Home » ワードマクロ・Word VBAの使い方 » 段落・パラグラフ » 指定語句を含む段落の文字列を取得するWordマクロ

指定語句を含む段落の文字列を取得するWordマクロ

動作検証バージョン:Windows版Word(バージョン1811 ビルド11029.20108)

いちばんやさしいExcel VBAの教本』につづく、2冊目のVBA本の執筆を進めています。

基本的にはテキストエディタを使っているのですが、ふと思い立って執筆に役立ちそうなWordマクロを作ったので公開しておきます。

[スポンサードリンク]

開いている文書から指定語句を含む段落の文字列を取得するWordマクロ

以下のSubプロシージャを実行すると、開いている文書から定数FIND_STRで指定された語句が検索され、その語句を含む段落の文字列がイミディエイトウィンドウに出力されます。

Sub 開いている文書から指定語句を含む段落の文字列を取得する()
 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 doc
 Debug.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マクロ

「段落・パラグラフ」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.
.