ユーザーフォームでファイルの検索をする

ユーザーフォーム Excel VBA For Each…Next

ユーザーフォームのテキストボックスにファイル名を入力してコマンドボタンを押すとファイルの検索ができるVBAのプログラムを紹介します。

まずユーザーフォームを作成します、VBEの画面を表示して「挿入」メニュー → 「ユーザーフォーム」でUserForm1を作成します。

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

ラベルのプロパティウィンドウでCaptionを「ファイル名入力」にして、コマンドボタンのプロパティウィンドウでCaptionを「検索開始」にします。

「検索開始」のコマンドボタンをダブルクリックして下のコードを貼り付けます。

Private Sub CommandButton1_Click()

Dim name As String
name = UserForm1.TextBox1.Text

Dim ブック As Workbook
Dim Flag As Boolean

For Each ブック In Workbooks '検索したファイルが開いているか調べます。

If ブック.name = name & ".xlsx" Then Flag = True

Next ブック

If Flag = True Then '検索したファイルが開いていた場合の処理。

MsgBox "「" & name & "」" & "のファイルは既に開いているので最前面に表示します。"

Workbooks(name & ".xlsx").Activate '開いていたファイルを最前面に表示します。

Unload UserForm1 'ユーザーフォームを閉じます。

Exit Sub

Else '検索したファイルが開いていない場合はファイルを開きます。

If Dir(ThisWorkbook.Path & "\フォルダ\" & name & ".xlsx") <> "" Then 'ファイルがフォルダ内にあるか調べます。

Workbooks.Open Filename:=ThisWorkbook.Path & "\フォルダ\" & name & ".xlsx" 'ファイルを開きます。

Unload UserForm1 'ユーザーフォームを閉じます。

Else 'ファイルがフォルダ内に無いときはメッセージを表示します。

Unload UserForm1

MsgBox "ファイルはフォルダ内にありません。"

UserForm1.Show

End If

End If

End Sub

拡張子「xlsx」の部分を変えれば他のファイルも検索できるので試してみてください。

Sheet1のセル上をマウスで左クリックしたときにユーザーフォームが表示されるようにしたいのでVBEのプロジェクトエクスプローラーのSheet1のモジュールに下のコードを貼り付けます。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

UserForm1.Show

End Sub

Sheet1にボタンを配置してユーザーフォームを表示したいときは、標準モジュールを作成して下のコード貼り付けてから「開発タブ」→ 「挿入」→ 「フォームコントロール」でボタンを作成してマクロを登録します。

Sub フォーム表示()

UserForm1.Show

End Sub

マクロ実行するブック(ファイル検索.xlsm)とファイルを検索するフォルダは同じフォルダ内にしてThisWorkbook.Pathでファイルの保存場所を自動取得しています。

これでユーザーフォームを表示してテキストボックスにファイル名を入力し検索開始ボタンを押すとファイルが検索できるようになりました。

プログラムの流れとしては、まず検索したファイルが開いているか調べて開いていた場合はファイルを最前面に表示し、検索したファイルが開いていない場合はファイルがフォルダ内にあるか調べてからファイルを開くという手順で行っています。

コメント