リストボックスで複数の項目を選択可能にするには、リストボックスのMultiSelectプロパティを設定します。標準では「fmMultiSelectSingle」が設定されています。
標準のfmMultiSelectSingleは、単一選択です。fmMultiSelectMultiまたはfmMultiSelectExtendedを設定すると、複数の項目を選択可能になります。両者は複数の項目を選択する方法が異なります。
【fmMultiSelectMulti】
項目をクリックすると選択できます
別の項目を選択するときもクリックだけです
CtrlキーやShiftキーは必要ありません
すでに選択している項目を再度クリックすると
選択状態が解除されます
【fmMultiSelectExtended】
クリックすると1つめの項目を選択できます
ただクリックすると、1つめの選択項目が変わるだけです
2つめ以降の項目を選択するには
CtrlキーかShiftキーを押しながらクリックします
Windowsの基本ルールと同じです
項目をドラッグして選択することもできます
複数選択可能なリストボックスで、どの項目が選択されているかは、TextプロパティやValueプロパティでは調べられないので、少しめんどうな方法を使わなければなりません。
上図のように、リストボックスに4つの項目が登録されていて、そのうちの「1番目」と「3番目」が選択されているとします。リストボックスに登録されているデータは、Listプロパティに配列形式で格納されています。また、Selectedプロパティには、選択されているかどうかが配列形式で格納されています。
Listプロパティ | Selectedプロパティ | ||
---|---|---|---|
0 | 吉沢 | 選択されている | True |
1 | 桜木 | False | |
2 | 西野 | 選択されている | True |
3 | 安藤 | False |
List(0) = "吉沢"
List(1) = "桜木"
List(2) = "西野"
List(3) = "安藤"
Selected(0) = True
Selected(1) = False
Selected(2) = True
Selected(3) = False
つまり、複数選択可能なリストボックスで、どの項目が選択されているかは、すべての項目のSelectedプロパティを調べて、Trueだったら選択されている、ということになります。
Private Sub CommandButton1_Click() Dim i As Long, msg As String For i = 0 To ListBox1.ListCount - 1 If ListBox1.Selected(i) = True Then msg = msg & ListBox1.List(i) & vbCrLf End If Next i MsgBox msg End Sub