ファビコン。井の家紋。ワード(Word)ファイルの検索(正規表現検索)を行うGrep風ツール | エクセルマクロ(VBA)実践蔵(じっせんぐら)

前の項目 - エクセルで正規表現検索と置換を行うためのツール
次の項目 - Google Spread Sheetのマクロ(Google Apple Script[GAS])の基本

ワード(Word)ファイルの検索(正規表現検索)を行うGrep風ツール最終更新日:2024-06-13

前の記事でExcelの正規表現ツールを作成していて、以前、エクセルやワードファイルを対象にGrep検索を行うようなツールを作ったことを思い出し、今回は、ワード(Word)ファイル限定ですが、Wordファイルを対象に、正規表現を使用しない通常検索や、正規表現検索を行い、一致した箇所の履歴を残すようなツールを作成しました。

動作可能環境

ExcelがPC内にインストールされているWindows PC環境で動作します。

コンテンツの有効化やセキュリティの許可が必要です。

マクロの有効化手順については、こちら。

使い方

起動画面

ワードWordファイル起動画面

この画面は、エクセルの「実行」シートにあります。

一番上は、「ファイル選択」ボタンを使用して、検索する1ファイルを選択するか、又は、「フォルダ選択」ボタンにて、ワード(Word)ファイルが格納されているフォルダを指定して、複数ファイルを対象に検索することが可能です。「フォルダ選択」ボタンを押した場合はそのすぐ下の「ファイル一覧」ボタンも押して、検索対象ファイルを確認してください。「ファイル一覧」は、エクセルの「filelist」シートに一覧が記述されます。検索対象にしたくないファイルが含まれる場合は、行削除にて除外してください。ファイル一覧を確認後は、「実行」シートに戻ってください。

通常検索(正規表現を使用しない検索)を行う場合は、検索文字を実行シートのセルA13に文字列を直接記入して「通常検索」ボタンを押してください。

正規表現検索を使用する場合は、サポートとして、記号一覧を用意しています。ここから、使用したい記号を選択後に、右隣の挿入ボタンを押すことで、検索文字列(セルB13)に入力されます。

正規表現サポート記号

このリストは、「文字種別」シートに一覧を記述していて、入力規則のリストとして、参照しています。追加したい記号があれば編集可能です。追加する場合は、入力規則のリストの範囲を広げてください。

正規表現サポート記号リスト

正規表現記号の文字種別入力後、必要があれば、繰り返す回数(セルD18)に数値を入力し、その横の挿入ボタンをクリックすることで、検索文字列に挿入されます。

繰り返し回数には固定回数の「数値」、または範囲の「最小値,最大値」(間は、半角カンマ) 、1回以上の繰り返しなら「+」(プラス記号)を入力するすることができます。

(例)4回なら「4」、2~5回なら「2,5」、1回以上なら「+」を入力し、挿入ボタンを押すと、検索文字列末尾に{4}、{2,5}、+ が追加されます。

\d{4} なら、半角数値4桁が検索対象となります。 [a-z|A-Z]{2,5}でアルファベット2文字~5文字が検索対象になります。

検索文字列が完了したら、「正規表現検索」ボタンを押してください。

検索結果画面

検索文字列「Excel」でフォルダを対象に、通常検索を行った実行結果になります。

通常検索の検索結果

A列に格納フォルダへの絶対パス、B列にファイル名、C列に検索文字列、D列に文字位置、E列に一致した文字列、F列に検索結果文字列を含む一文、セルH1に最終書き込み位置を結果として記入します。

通常検索(正規表現を使用しない検索)では、C列とE列は、同じ文字列となります。ここの列を設けている理由は、正規表現検索の場合に、検索文字列と一致した文字列が異なるためです。検索結果シートのフォーマットは、通常検索と正規表現検索で同じものを使用しています。

上の図の例の場合、フォルダを対象に複数のワード(Word)ファイルを検索しており、B列には複数のファイル名が表示されています。試験用のワード(Word)ファイルなので、内容が同じワード(Word)ファイルの為、E列の一文は同じ一文を検出しています。

D列の文字位置情報は、ダブルクリックされたときのマクロの動作として、該当のワード(Word)ファイルを開き、該当位置にJumpするために必要な数値です。D列の文字位置の数値をダブルクリックすることで、検索文字列と一致した箇所を開くことができます。

本文検索の後に、ヘッダー、フッター検索を行います。ヘッダー、フッターは、各ページのヘッダー、フッターに対する検索はできません。たとえば、フッターに、ページ数を記述していて、P.5を検索してヒットさせることはできません。ヘッダー、フッターは、「奇数/偶数ページ別指定」というような特別な設定をしていない限り、1ファイルで1つとして扱われます。そのため、ヘッダーにタイトルを入力していて、検索文字列と一致する場合、ヒットする箇所は、1か所となります。(全ページのヘッダータイトルがヒット対象とはならない。) 同じく、フッターにページ番号を入力していて、正規表現として数値検索を行うと、F列に表示されるのは先頭のヘッダー情報の文章になります。そのため、D列をダブルクリックした際にも先頭のヘッダーが開くようにしたかったのですが、結果的にはできませんでした。D列をダブルクリックして開くのは、編集された末尾のヘッダが開きます。

上図(例)の最終行は、D列に「ヘッダー:4」とありますが、この数値は、ヘッダ情報のInformation(wdActiveEndPageNumber)という情報から取得して表示しています。このメンバに、Startが存在したならそちらを選んだのですが、残念ながら、WordVBAとして取得可能なヘッダー情報に先頭ページのページ番号や先頭セクション番号がありませんでした。WordVBAはExcelVBAと比べるとVBA操作や得られる情報に制限があります。確認したMicrosoftのサイト

その為、ヘッダー、フッターに関しては、F列に表示される文章は、先頭ヘッダーの情報であり、D列をダブルクリックして開くのは編集された末尾のヘッダになります。

もう1点、ヘッダーの設定として、3分割設定されていると、間に数値の0が入ってしまいます。

ヘッダー3分割

下記の場合、Wordマクロから取得できるデータは「0Excelマクロ初期設定02024/6/9」となりました。この仕切りを表す0と、数値の0が同じ値の為、判別ができませんず、検出一文としてそのまま表示させるようにしています。

ヘッダー3分割の設定例

半角数値4文字(\d{4})にて正規表現検索をして、表示される結果が下記です。仕切り部分の0が検出対象となってしまいます。

ヘッダー3分割の設定例実行結果

この辺りが、Wordマクロの使いずらい部分な気がします。

追加対応ここから 2024/06/13 Update

図形内の文書を検索対象に含めました。テキストボックスなどです。

D列のダブルクリックで基本的には図形が表示されますが、グループ化されているとグループの先頭が表示されるため、多少のスクロールが必要な場合があります。

追加対応ここまで 2024/06/13 Update

検索結果シートは、追加書き込みをすることが可能です。検索結果シートが残っている状態で、検索を実行した場合、確認のダイアログが表示されます。

検索結果履歴削除の確認

過去の履歴が不要の場合は、「はい(Y)」を選択し、追記書き込みを行いたい場合は、「いいえ(N)」を選択してください。「キャンセル」を選ぶと、検索を中止します。

最後に、このツールを含むブックから、検索結果だけを切り離す必要がある場合、Wordファイルの該当箇所へJumpする機能を残すためには、Excelのシートコピー機能を使用して、別ブックへコピー後、マクロ有効ブックで保存する必要があります。(シート表面だけをCtrl+A等で移すと、Jumpさせるためのマクロが一緒に移動できないため、Jumpできなくなりますが、シート移動やシートコピーの操作であれば、シート裏に記述しているマクロは一緒に移動できます。) また、参照設定としては、「Microsoft Word 16.0 Object Library」が必要です。

ワード(Word)ファイルで検索や正規表現検索を行うGrep風ツールのダウンロード

下記からダウンロードしたエクセルファイルを起動し、コンテンツの有効化を行う。

Windows PCにインストールされているExcelで起動してください。

マクロの有効化手順については、こちらも参考にしてください。

Wordファイルの検索(正規表現検索)ツールのエクセルマクロ有効ブック(xlsm)のダウンロード

前の項目 - エクセルで正規表現検索と置換を行うためのツール
次の項目 - Google Spread Sheetのマクロ(Google Apple Script[GAS])の基本