リストボックスのデータを検索する


リストボックスに登録されているデータを検索するには、どうしたらいいでしょう。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」になります。