リストボックスに複数選択可能なリストを表示する|Excel VBA |
リストボックスにリストを表示し、複数選択を可能にします。
また、コマンドボタンをクリックしたときに、リストボックスで選択された値を取得します。
まず、リストボックスとコマンドボタンを配置したユーザーフォームを用意します。
ユーザーフォームが開かれる時に発生する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