リストの絞り込み(ユーザーフォーム)

ユーザーフォーム内に表示したリストボックスの中から、目的に合致するものを選択して処理することがあります。

  • 顧客名
  • 商品名
  • 商品のコード
  • 部署名や営業所名
  • などなど

選択肢が少ない内は選びやすいのですが、多くなってくると、スクロールしたり探したりと、なかなか面倒です。

↓ は、私の左わきにある本棚から、幾つかピックアップした本の題名です。
 (親と子の本が混在しています)。

f:id:Infoment:20180708000804p:plain

それでは、これをユーザーフォームに表示してみましょう。*1

Private Sub UserForm_Initialize()
    Dim Tb  As ListObject    
    Set Tb = ActiveSheet.ListObjects("書籍テーブル")
    ListBox1.List = Tb.DataBodyRange.Value
End Sub

f:id:Infoment:20180708002840p:plain

この時点ですでに、縦のスクロールバーが表示されています。この中から目的の書籍を目で見て探すのは、少々おっくうです。

そこで、検索用のテキストボックスを設けてみました。

f:id:Infoment:20180708004113p:plain

テキストボックスの値が変わるたび、その値を含むもののみ、リストに表示させています。

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

これで、入力した文字を含む題名のみ、リストボックスに表示されるようになり、選びやすくなりました。

f:id:Infoment:20180708004921p:plain

参考まで。

*1:リストは予めテーブル書式となっており、「書籍テーブル」と命名済みです。