リストボックスに登録されているデータを検索するには、どうしたらいいでしょう。ListBoxにはFindメソッドなどありません。一発で検索してくれるような、便利なコマンドはないんです。コマンドがなければ検索できないというのは、あまりに寂しい発想です。そもそも、検索するとは、どういうことでしょう。ある文字列を、その全体の中から探し出すことでしょ。もし、目で見て探すとしたらどうしますか。きっと、上から順に「○○か?違う。じゃ次。○○か?これも違う。じゃ次。今度は○○か?」と、データの最後まで順番にチェックしていくでしょ。それと同じことを、やってやればいいんです。ですが安心してください。人間が紙とペンでチェックするのとは違い、パソコンのメモリ内をチェックするのですから、おそらく、あなたがやるよりは高速です。
ここでは、下図のようなUserFormで、テキストボックスに入力した文字列を、リストボックス内で検索します。
Private Sub CommandButton1_Click() Dim i As Long If TextBox1.Text = "" Then Exit Sub For i = 0 To ListBox1.ListCount - 1 ''(1) If ListBox1.List(i) = TextBox1.Text Then ''(2) ListBox1.ListIndex = i ''(3) MsgBox ListBox1.ListIndex & "番目に見つかりました" Exit Sub End If Next i MsgBox "見つかりませんでした" End Sub
(1)ListBox内に登録されているデータの個数は、ListCountプロパティで取得できます。これは、純粋に個数を返します。5つ登録されていれば「5」です。
(2)ListBox内に登録されている全データは、配列形式で管理されています。その配列データは、ListBoxのListプロパティで操作できます。仮に5つのデータが登録されているなら、List(0)~List(4)です。先頭のインデックス値が「0」から始まる点に留意してください。先頭が「0」から始まるのですから、For Nextの繰り返し回数は、ListCount - 1にしなければなりません。
(3)ListBoxで、任意のデータを選択状態にするには、ListBoxのListIndexプロパティに、選択したいデータの位置を指定します。このとき、先頭のデータが「0」になります。