『いちばんやさしいExcel VBAの教本』につづく、2冊目のVBA本の執筆を進めています。
基本的にはテキストエディタを使っているのですが、ふと思い立って執筆に役立ちそうなWordマクロを作ったので公開しておきます。
開いている文書から指定語句を含む段落の文字列を取得するWordマクロ
以下のSubプロシージャを実行すると、開いている文書から定数FIND_STRで指定された語句が検索され、その語句を含む段落の文字列がイミディエイトウィンドウに出力されます。
Const FIND_STR = "検索したい語句を指定"
Dim cnt As Long
Dim doc As Document
For Each doc In Documents
Debug.Print vbCrLf & "★" & doc.Name
Dim par As Paragraph
For Each par In doc.Paragraphs
Dim par_txt As String
par_txt = par.Range.Text
If InStr(par_txt, FIND_STR) >= 1 Then
Debug.Print Replace(par_txt, vbCrLf, "")
cnt = cnt + 1
End If
Next par
Next docDebug.Print vbCrLf & "★『" & FIND_STR & "』は" & cnt & "個みつかりました。"
End Sub
各章が1個のファイルになっている状態で執筆を進めているのですが、章の違いによる表記ゆれなどを確認したい場面があります。
テキストエディタの検索機能で同様の処理は可能ですけれど、執筆環境を変えることが有効なことがあり、上記のマクロを作ってみました。
サンプルマクロで行っている処理の流れ
開いている全文書に対して、For Each~Nextループを回し、
Dim doc As Document
For Each doc In Documents
まず文書名をイミディエイトウィンドウに出力しています。
Debug.Print vbCrLf & "★" & doc.Name
各文書に対して以下のような処理を行っています。
WordのFindオブジェクトを使わず、VBAのInStr関数を使っているのがポイントです。
全段落に対してFor Each~Nextループを回して、
Dim par As Paragraph
For Each par In doc.Paragraphs
段落の文字列を変数par_txtに格納しておきます。
Dim par_txt As String
par_txt = par.Range.Text
定数FIND_STRに格納されている文字列を探す処理は、VBAのInStr関数を使っています。
If InStr(par_txt, FIND_STR) >= 1 Then
大量の文書で大量の段落が存在すると、Findオブジェクトを使うほうが速くなる可能性もありそうですが(未検証)、現時点では気になるレベルではないので、Word側の検索設定の影響を受けたり与えたりしない、この方法を気に入っています。
イミディエイトウィンドウへの出力時には、無駄な空白行を入れないために、段落記号をVBAのReplace関数で取り除いています。
Debug.Print Replace(par_txt, vbCrLf, "")
最終更新日時:2021-02-26 06:17
Home » ワードマクロ・Word VBAの使い方 » 段落・パラグラフ » 指定語句を含む段落の文字列を取得するWordマクロ