HOME > 即効テクニック > Excel VBA > ユーザーフォーム関連のテクニック > リストボックスに複数選択可能なリストを表示する

リストボックスに複数選択可能なリストを表示する|Excel VBA

ユーザーフォーム関連のテクニック

リストボックスに複数選択可能なリストを表示する

(Excel 97/2000/2002/2003/2007/2010)

リストボックスにリストを表示し、複数選択を可能にします。
また、コマンドボタンをクリックしたときに、リストボックスで選択された値を取得します。

■リストボックスにリストを表示する

まず、リストボックスとコマンドボタンを配置したユーザーフォームを用意します。
ユーザーフォームが開かれる時に発生するInitializeイベントのイベントプロシージャ「UserForm_Initialize」に、次のような処理を記述します。

Private Sub UserForm_Initialize()
    Dim sh As Object
    
    For Each sh In Sheets
        'リストボックスのリストに追加
        ListBox1.AddItem sh.Name
    Next
    
    '複数選択可
    ListBox1.MultiSelect = fmMultiSelectExtended
End Sub

ここでは、リストボックスに全シート名を表示します。
リストボックスにリストを表示するには、AddItemメソッドを使用します。
For Each...Nextステートメントを使い、シート名をリストに追加します。
また、MultiSelectプロパティにfmMultiSelectExtendedを指定して、リストの項目を複数選択できるように設定します。
1つの項目のみを選択可能にするには、fmMultiSelectSingleを指定します。

■リストボックスで選択された項目を取得する

選択されたシートを取得するには、コマンドボタンがクリックされた時に発生するClickイベントのイベントプロシージャ「CommandButton1_Click」に処理を記述します。

Private Sub CommandButton1_Click()
    Dim i As Long

    With ListBox1
        For i = 0 To .ListCount - 1
            If .Selected(i) Then
                MsgBox .List(i)
            End If
        Next i
    End With
End Sub

リストボックス内の項目が選択されると、SelectedプロパティはTrueを返します。
リスト内のすべての項目についてSelectedプロパティを1つずつ判断し、選択されていたらメッセージボックスにListプロパティの値を表示します。

このメッセージボックスを表示する部分を、印刷処理や削除処理にするなどして応用することができます。

●補足●

リストボックスにリストを表示するには、Listプロパティを使う方法もあります。
次のように、あらかじめデータを配列にいれておき、Listプロパティに設定します。

Private Sub UserForm_Initialize()
    Dim myList As Variant
    
    myList = Array("東京", "大阪", "名古屋", "札幌", "福岡")
                    
    With ListBox1
        .List = myList
        .MultiSelect = fmMultiSelectExtended
    End With
End Sub