エクセルVBAでフォルダ内のワード文書の文字を検索してハイパーリンクで開く

雲 Excel VBA Find

エクセルVBAでフォルダ内のワード文書の文字を検索してハイパーリンクで開くプログラムを紹介します。

まずエクセルからワードを操作できるようにするため参照設定を行います、VBEの画面を表示して「ツール」→「参照設定」→ 「Microsoft Word ○○.○ Object Libary」にチェックを入れてOKボタンを押します。

次にVBEの画面から「挿入」→「標準モジュール」で標準モジュールを作成します。

そして下のコードをコピーして標準モジュールに貼り付けます。

Sub エクセルVBAでフォルダ内のワード文書の文字を検索してハイパーリンクで開く()

Dim folder_name As String
Dim file_name As String

folder_name = ThisWorkbook.Path & "\フォルダ\"

file_name = Dir(folder_name & "*.docx") 'Dir関数で検索します。

Do While file_name <> "" 'フォルダ内にワードのファイルが見つかる間は処理を行います。

Dim Word_Appli As Word.Application
Dim Word_Docum As Word.Document

Set Word_Appli = New Word.Application

Word_Appli.Visible = True 'Wordアプリケーションを起動します。

Set Word_Docum = Word_Appli.Documents.Open(folder_name & file_name) 'ワード文書を開きます。

Dim search_name As String
search_name = "エクセル" '検索する文字列を指定します。

MsgBox file_name & "の文章内の" & "「" & search_name & "」" & "の文字を検索します。"

With Word_Appli.Selection.Find '文書内を検索します。

.Text = search_name
.Forward = True '検索する方向を指定します、文書を末尾に向かって検索します。
.Wrap = wdFindStop '文章の末尾まで到達したら検索を終了します。

Do While .Execute = True '検索して文字列が見つかったらエクセルシートに書き込みます。

Dim Page_number As Long
Dim Line_number As Long

Page_number = Word_Appli.Selection.Range.Information(wdActiveEndPageNumber)
Line_number = Word_Appli.Selection.Range.Information(wdFirstCharacterLineNumber)

With ThisWorkbook.Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp) 'セルの最終行取得。

.Hyperlinks.Add Anchor:=.Offset(1, 0), Address:=folder_name & file_name, TextToDisplay:=file_name
.Offset(1, 1).Value = Page_number '文字列が見つかったページをB列に表示します。
.Offset(1, 2).Value = Line_number '文字列が見つかった行をC列に表示する。

End With

Loop

End With

Word_Docum.Close SaveChanges:=False 'ワード文書を保存しないで閉じます。
Word_Appli.Quit 'Wordアプリケーションを閉じます。

file_name = Dir()

Loop

End Sub

上のプログラムの中の「search_name = “エクセル”」のエクセルの部分を書き換えて検索する文字を指定してください。

また古いワード文書は拡張子がdocのため「file_name = Dir(folder_name & “*.docx”)」のdocxをdocに書き換えが必要です。

ThisWorkbook.Pathでファイルパスを取得しているので文字を検索するファイルが入っているフォルダはマクロを実行するファイルと同じフォルダに入れて下さい。

検索の結果を表示するワークシートの準備

シート1のセルA1にファイル名、セルB1にページNo、セルC1に行Noを入力します。

プログラムの実行

エクセルのシート1を表示して「開発タブ」 →「マクロの表示」ボタン → マクロ名を選択 → [実行] ボタンを押すとプログラムを実行できます。

プログラムの流れ

プログラムを実行するとフォルダの中にあるワード文書を順番に開きながら文章の先頭から末尾までの文字を検索していき目的の文字が見付かった場合はエクセルシートに書き込んでいきます。

プログラムの実行後の結果表示

エクセルシートのA列には文字が見つかったファイル名、B列には文字が見つかったワード文書のページ番号、C列には文字が見つかったワード文書の行番号を表示します、カウンタ変数を使わずオフセットを使ってセルに書き込んでいるので変数の値を気にせずにプログラムを組むことができて楽だと思います。

結果表示からできること

ファイル名にハイパーリンクを設定しているのでファイル名をクリックすると文字が見付かったワード文書を開くことができます。

コメント