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

Excel VBA コンボボックス

今回はユーザーフォームのコンボボックスを使ってワード文書の文字を検索し、ハイパーリンクで開く方法を紹介します。

ユーザーフォームを作成する

まずユーザーフォームを作成します、エクセルのSheet1を開いて「開発」タブ →「Visual Basic」でVBE(Visual Basic Editor)の画面を表示します。

「挿入」メニュー → 「ユーザーフォーム」でUserForm1を作成します。

ツールボックスから「コンボボックス」と「コマンドボタン」をユーザーフォームに配置します。

ツールボックスが表示されていないときはVBEの「表示」メニュー →「ツールボックス」で表示します。

CommandButton1を「クリック」してプロパティウィンドウでCaptionを「検索開始」にします。

プロパティウィンドウが表示されていないときはVBEの「表示」メニュー →「プロパティウィンドウ」で表示します。

「検索開始」のボタンを「ダブルクリック」してコードウィンドウを開き、次のコードをコピーして貼り付けます。

Private Sub UserForm_Initialize()     'ユーザーフォームが表示されるタイミングでフォームの内容を準備する。

Dim i As Long

For i = 2 To Cells(Rows.Count, "F").End(xlUp).Row 'F列の2行目からデータがある最後の行まで処理を繰り返す。

ComboBox1.AddItem Cells(i, "F") 'F列のセルの値をコンボボックスに入力して行きます。

Next i

End Sub

Private Sub CommandButton1_Click()

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 = UserForm1.ComboBox1.Text '検索する文字列を指定します。

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列に表示する。
.Offset(1, 3).Value = search_name '検索した文字を表示します。

End With

Loop

End With

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

file_name = Dir()

Loop

MsgBox "検索が終了しました。"

End Sub

セルに設定するハイパーリンクに連動するイベントの作成

VBAProjectの「Sheet1」をダブルクリックしてコードウィンドウを開き、次のコードをコピーして貼り付けます。

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)

Dim Word_Appli As Object 'オブジェクト型変数宣言。
Dim Word_Docum As Object 'オブジェクト型変数宣言。
Dim Page_number As Integer

Set Word_Appli = GetObject(, "Word.Application") '開いているWordアプリを取得しその参照情報を「word_App」に格納します。
Set Word_Docum = Word_Appli.ActiveDocument 'アクティブなWord文書を取得しその参照情報を「word_Doc」に格納します。

Page_number = ActiveCell.Offset(0, 1).Value 'クリックしたセルの一つ右のセルの値を「Page_number」に格納します。
Word_Appli.Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=Page_number '文書のページを選択処理します。

Word_Appli.WindowState = 2 'Wordウィンドウをアクティブにしたとき最前面に表示されるようWordウィンドウを一度最小化する。
Word_Appli.WindowState = 1 'Wordウィンドウを最大化します。
Word_Appli.Visible = True 'Wordアプリケーションを画面上に目に見える状態にする。
Word_Appli.Activate 'Wordウィンドウをアクティブ(最前面)にします。

Set Word_Appli = Nothing 'メモリの解放。
Set Word_Docum = Nothing 'メモリの解放。

End Sub

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

エクセルのSheet1を表示してセルA1に「ファイル名」、セルB1に「ページNo」、セルC1に「行No」、セルD1に「検索文字」と入力します。

セルF1には「検索文字入力」と入力して、その下に検索する文字列を入れておきます。

ユーザーフォームを表示するコードの作成

VBE(Visual Basic Editor)の画面を表示して「挿入」メニュー →「標準モジュール」で標準モジュールを作成し「Module1」に次の「フォーム表示」のコードをコピーして貼り付けます。

Sub フォーム表示()

UserForm1.Show vbModeless

End Sub

ユーザーフォームを表示するボタンの作成

エクセルのSheet1を表示して「開発」タブ →「挿入」→「ボタン(フォームコントロール)」をクリックします。

ボタンを配置したい場所をマウスでドラッグします。

マクロの登録ダイアログボックスが表示されるので「フォーム表示」を選択して「OK」ボタンを押します。

ボタン1に「フォーム表示」のマクロが登録されました。

エクセルファイルを名前を付けて保存

ここで一旦、このエクセルファイルを保存しておきます。

「右クリック」→「新規作成」 →「フォルダー」で新しくフォルダを作成して、その中に「ワード文書の文字検索.xlsm」という名前でこのエクセルファイルを保存します。

検索するワード文書の入ったフォルダの作成

「右クリック」→「新規作成」 →「フォルダー」でもう一つフォルダを作成し、フォルダの名前は「フォルダ」にしてその中に文字を検索するワード文書を複数入れます。

文字を検索するワード文書の中には「Excel」「Word」「Outlook」「PowerPoint」の文字列を入れて文字が検索できるようにしておいてください。

下の階層図のようにワード文書を入れたフォルダは「ワード文書の文字検索.xlsm」のExcelファイルと同じフォルダに保存します。

ユーザーフォームから文字検索プログラムの実行

エクセルのSheet1を表示し、ボタン1をクリックしてユーザーフォームを表示します。

コンボボックスのドロップダウンボタンを選択するとリストが下に展開されるので検索したい文字列を選択します。

検索開始のボタンをクリックします。

検索が終了するとセルに文字が見つかったワード文書の名前とページNoと行Noが表示されました。

セルのA列に表示されたワード文書のファイル名をクリックするとワード文書を開くことができます。

ユーザーフォームのコンボボックスを使う利点は、あらかじめ入力する文字を登録しておくことで入力間違いを防ぐことができ、エクセルでの作業に不慣れな方でも容易に扱うことができる点にあります。

設定は少し大変ですけれど、ぜひ機会があればお試しください。!(^^)!