エクセル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に書き換えが必要です。
コメント