ユーザーフォーム内に表示したリストボックスの中から、目的に合致するものを選択して処理することがあります。
- 顧客名
- 商品名
- 商品のコード
- 部署名や営業所名
- などなど
選択肢が少ない内は選びやすいのですが、多くなってくると、スクロールしたり探したりと、なかなか面倒です。
↓ は、私の左わきにある本棚から、幾つかピックアップした本の題名です。
(親と子の本が混在しています)。
それでは、これをユーザーフォームに表示してみましょう。*1
Private Sub UserForm_Initialize() Dim Tb As ListObject Set Tb = ActiveSheet.ListObjects("書籍テーブル") ListBox1.List = Tb.DataBodyRange.Value End Sub
この時点ですでに、縦のスクロールバーが表示されています。この中から目的の書籍を目で見て探すのは、少々おっくうです。
そこで、検索用のテキストボックスを設けてみました。
テキストボックスの値が変わるたび、その値を含むもののみ、リストに表示させています。
Dim seq As Variant Private Sub TextBox1_Change() Dim str As String Dim s As Variant str = TextBox1.Value ListBox1.Clear For Each s In seq If s Like "*" & str & "*" Then ListBox1.AddItem s End If Next End Sub Private Sub UserForm_Initialize() Dim Tb As ListObject Set Tb = ActiveSheet.ListObjects("書籍テーブル") seq = Tb.DataBodyRange ListBox1.List = seq End Sub
これで、入力した文字を含む題名のみ、リストボックスに表示されるようになり、選びやすくなりました。
参考まで。
*1:リストは予めテーブル書式となっており、「書籍テーブル」と命名済みです。