「word vba 検索 行 取得」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがあることに気が付きました。
Word VBA(Visual Basic for Applications)の検索関連のコードを探していることはわかりますが、
「word vba 検索 行 取得」
というキーワードだけでは、具体的に何を探していたのか判断に迷いますので、ここでは実務でニーズがありそうな、文字列を検索してページ番号と行番号を取得するマクロをご紹介しておきます。
文字列を検索してページ番号と行番号を取得するサンプルマクロ
下記のマクロを実行すると、定数・SRCHに指定した文字列がアクティブな文書の中で検索され、見つかったページ番号と行番号がイミディエイトウィンドウに出力されます。
Const SRCH = "検索する文字列"
Dim rng As Range
Set rng = ActiveDocument.Range(0, 0)
rng.Find.Text = SRCH
Do While rng.Find.Execute
Debug.Print _
rng.Information(wdActiveEndAdjustedPageNumber) & vbTab & _
rng.Information(wdFirstCharacterLineNumber)
Loop
上記のマクロで利用しているオブジェクトモデルの階層関係は下図のとおりです。
Range.FindではExecute後にRangeが再定義される
Word VBAで検索を行うコードを自分で書けるようになるためには、RangeオブジェクトとFindオブジェクトの関係を、しっかりと理解する必要があります。
特にExcel VBAの経験がある方の場合、Word VBAのRangeオブジェクトからFindオブジェクトを取得した場合にRangeオブジェクトが勝手に再定義される、ということを理解しておくことはとても大切です。
文字列を検索して、ページ番号と行番号を取得するWordマクロは、実にさまざまな書き方ができますが、上記のマクロはRangeオブジェクトからFindオブジェクトを取得したときに、Rangeオブジェクトが再定義されるということを、感じていただきやすいコードにしています。
文字列を検索してページ番号と行番号を取得する処理の流れ
まずオブジェクト変数・rngに、Document.Rangeメソッドを使って、アクティブな文書の先頭位置をセットします。
Set rng = ActiveDocument.Range(0, 0)
定数・SRCHで指定しされている文字列を、検索したい文字列として設定して、
rng.Find.Text = SRCH
FindオブジェクトのExecuteメソッドで検索を実行します。
Do While rng.Find.Execute
FindオブジェクトのExecuteメソッドは、検索して見つかった場合にはTrueを、見つからなかった場合はFalseを返してきます。
ここでは、
Do While rng.Find.Execute
Loop
というループにすることで、検索して見つかる限り、Do~Loopループを回しつづけるという処理になっています。
そして、rng.Find.Executeというオブジェクト式で文字列が見つかった場合、変数・rngの中身が、見つかった場所を表すRangeオブジェクトになってしまうというのがポイントです。
中身の変わった変数・rngの、ページ番号と行番号をRange.Informationプロパティを使って取得して、イミディエイトウィンドウに出力しています。
Debug.Print _
rng.Information(wdActiveEndAdjustedPageNumber) & vbTab & _
rng.Information(wdFirstCharacterLineNumber)
ExcelのRange.FindとWordのRange.Findはまったく別物
特にExcel VBAのRange.Findメソッドに慣れている方だと、「Range」「Find」という同じ語句が登場するために混乱してしまいがちですが、Excel VBAとWord VBAでは別のアプリケーションをVBAで操作しているわけですから、Word VBAで登場するRangeやFindは、Excel VBAのRangeやFindとは、別物です。
Excel VBAのRangeとWord VBAの「Range」は、たまたま同じスペルの語句になっているだけで中身はまったく違います。
「Find」も、Excel VBAとWord VBAで、たまたま同じスペルの語句になっているだけで中身はまったく違います。
最終更新日時:2019-01-03 08:55
Home » ワードマクロ・Word VBAの使い方 » 文字列を検索して行番号・ページ番号を取得するWordマクロ