今回はリストボックスにセルの値を入力してファイル検索する方法を紹介します。
リストボックスを使用すると、最初から複数の選択肢を表示して作業者が簡単にリストから選択できるようになります。入力のミスを無くして入力作業をスムーズに行える利点があります。
まずユーザーフォームを作成します、「開発」タブ →「Visual Basic」でVBE(Visual Basic Editor)の画面を表示して「挿入」メニュー → 「ユーザーフォーム」でUserForm1を作成します。

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

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

ラベルのプロパティウィンドウでCaptionを「ファイル名選択」にして、コマンドボタンのプロパティウィンドウでCaptionを「検索開始」にします。
「検索開始」のコマンドボタンをダブルクリックして下のコードを貼り付けます。
Private Sub UserForm_Initialize() 'ユーザーフォームが表示されるタイミングでフォームの内容を準備するイベント。
Dim i As Long
For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row 'A列の1行目からデータがある最後の行を取得して繰り返し処理を行う。
ListBox1.AddItem Cells(i, 1) 'セルの値をリストボックスに入力して行きます。
Next i
End Sub
Private Sub CommandButton1_Click() 'コマンドボタンがクリックされたときに実行されるイベント。
If ListBox1.Text = "" Then 'リストが選択されていない場合の処理。
MsgBox "リストボックスが未選択です。"
Exit Sub
End If
Dim name As String
name = UserForm1.ListBox1.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

エクセルのSheet1にボタンを作成してボタンを押したときにユーザーフォームを表示出来るようにします。VBEの「挿入」メニュー →「標準モジュール」で標準モジュールを作成しModule1に下の「フォーム表示」のコードを貼り付けます。
Sub フォーム表示()
UserForm1.Show
End Sub

そしてエクセルのSheet1を表示し「開発」タブ → 「挿入」→ 「フォームコントロール」→「ボタン」でボタンを作成して「フォーム表示」のマクロをボタンに登録します。

検索するファイル名をセルのA列に入力します。
これでボタンをクリックしてユーザーフォームを表示し、ファイル名を選択して検索開始ボタンを押すとファイルが検索出来るようになりました。

前回投稿したコンボボックスと今回のリストボックスではファイル名をリストの中から選択出来るという点では同じですが、コンボボックスは▼ボタンを押さないとリストが表示されないのと、選択肢に無いファイル名を手入力できるなど若干の違いがあるので、実際に作業してみて操作がスムーズに行える方を選べば良いと思います。
コメント