ExcelのVBAを使用し、検索ボタンでリストボックスに絞り込みする方法
 ExcelのVBAを使用していると、「検索ボタン」を作ってリストの絞り込みをしたいということがあるでしょう。
私も仕事で検索ボタンを使用することが多いので、出来るなら自分で作りたいと考えていろいろ調べました。
そこでこの記事ではVBAを使用し、検索ボタンでリストボックスに尿字する方法を紹介します。
検索ボタンのコード例は人によっていろいろと違いますので、この記事を読んで作成した後はアレンジしてみましょう。
出来上がらは以下のようなイメージで、例としてはBと入力して検索をクリックすると、リストボックスにはBが含まれる氏名が表示されます。

検索ボタンを作る下準備

まずはAlt+11でVBAの入力画面を呼び出し、その後ユーザーフォームを挿入しましょう。
続いて、コマンドボタンとリストボックスを使用して配置します。

Excelのsheetには表を作成しておきましょう。

これで検索ボタンを作成するための下準備は完成です。
検索ボタンでコンボボックスに表示するコード例
次に、コードを入力する例を紹介します。
以下のコードをコピペしましょう。
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39  | 
						 '検索ボタンでキーワードが含まれる氏名を呼び出し Private Sub CommandButton1_Click()     Dim 文字 As String     Dim i As Integer, リスト As Integer, フラグ As Integer     文字 = TextBox1     i = 3  'Excelのsheetで入力を開始した行数     フラグ = 0     リスト = 0     '最初にリストボックスの中身をリセット     ListBox1.Clear     If 文字 = "" Then         MsgBox "何も入力されていません"     End If     '同じ文字が合った場合はコンボボックスに追加する     Do Until Worksheets("Sheet1").Cells(i, 1) = ""  'もしB列であればCells(i, 2)          If InStr(Worksheets("Sheet1").Cells(i, 1).Value, 文字) <> 0 Then                     ListBox1.AddItem ""                     ListBox1.List(リスト, 0) = Worksheets("Sheet1").Cells(i, 1)                 リスト = リスト + 1                 フラグ = 1         End If                 i = i + 1     Loop      '同じ氏名が見当たらなかった場合はメッセージ      If フラグ = 0 Then         MsgBox "検索した氏名が見つかりませんでした"      End If End Sub  | 
					
InStrを使用することで、テキストボックスに入力した文字と同じ文字があるかどうかを調べます。
メッセージボックスは入れた方が分かりやすいと思ったので入力しましたが、もし不要な場合は削除してもいいでしょう。
今回のコード例ではsheetに氏名のリストを追加しても検索に支障がない。空白の行まで検索するため、途中に空白の行を入れた後に氏名を入力しないよう注意
実際に使ってみると、最初に見せたような検索ボタンが出来上がっているでしょう。

まとめ
今回はユーザーフォームを使用し、検索ボタンでリストボックスに表示する方法について紹介しました。
リストボックスは非常に便利なフォームですが、sheetに大量のデータがある場合は探すだけでも手間がかかります。
データ量が多い時は今回のように検索ボタンを使用することで仕事の効率化に繋がりますので、是非おすすめです。
Excelの機能を使いこなすと、仕事の効率化から大きな時間短縮に繋がります。
仕事術のスキルが増えるとプライベートの時間を時間を増やすことができますので、当サイトで得た知識を是非活用していきましょう。
以下のExcel記事もおすすめです。
リストボックスやコンボボックス、スピンボタンの使い方を見てみましょう。
また、ユーザーフォームの各ボタンの作り方は以下の記事でまとめています。
 
