ユーザーフォームのコンボボックスに検索の履歴を表示する

Excel VBA コンボボックス

今回はユーザーフォームのコンボボックスに検索の履歴を表示する方法を紹介します。

まずユーザーフォームを作成します、「開発」タブ →「Visual Basic」でVBE(Visual Basic Editor)の画面を表示して「挿入」メニュー → 「ユーザーフォーム」でUserForm1を作成します。

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

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

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

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

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

Dim i As Long

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

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

Next i

End Sub

Private Sub CommandButton1_Click()

With ThisWorkbook.Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp) 'セルにデータがある最終行を取得します。

.Offset(1, 0).Value = ComboBox1.Text 'コンボボックスに入力した値をA列の検索履歴に書き込みます。

End With

Dim name As String
name = UserForm1.ComboBox1.Text

Dim ブック As Workbook
Dim Flag As Boolean

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

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

Flag = True

End If

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 vbModeless 'ユーザーフォームをモードレスで表示します。

End If

End If

End Sub

Private Sub CommandButton2_Click() '検索履歴を削除します。

Range("A2:A" & Rows.Count).ClearContents

End Sub

「UserForm_Initialize」の「For i…Next i」の繰り返し処理で、A列セルの検索履歴を自動で取得してコンボボックスに表示するようにしています。

次にエクセルのSheet1にボタンを作成してボタンを押したときにユーザーフォームを表示出来るようにします。

VBEの「挿入」メニュー →「標準モジュール」で標準モジュールを作成し、Module1をダブルクリックしてコードウインドウを開き、下の「フォーム表示」のコードをコピーして貼り付けます。

Sub フォーム表示()

UserForm1.Show vbModeless

End Sub

そして、エクセルのSheet1を表示し「開発」タブ → 「挿入」→ 「フォームコントロール」→「ボタン」でボタンを作成すると「マクロの登録ダイアログボックス」が表示されるので「フォーム表示」のマクロを選択してボタン1に登録します。A列に検索履歴を表示するのでA1のセルに「検索履歴」と入力しておきます。

以上で設定は終了しました、これでボタン1をクリックしてユーザーフォームを表示し、コンボボックスにファイル名を入力して検索するとセルのA列の2行目から下に検索した値が登録されていきます。

ファイル検索した後、コンボボックス右側の下向き矢印を押すとセルに入力された検索履歴がコンボボックスに表示されるようになりました。

ユーザーフォーム内の履歴削除ボタンを押すとセルA列に登録した履歴を削除することができます。日本語IMEの「入力履歴の消去」や検索エンジンの「閲覧履歴データを削除」と同じ感覚で履歴を削除できます。履歴が多くなりすぎても使いずらいので必要に応じて削除しながら使用することをお勧めします。

検索履歴を表示できると、キーボードからの入力操作が減って効率的な検索作業が行えるので設定してみてはいかがでしょうか。(^o^)