リストボックスで複数の項目を選択可能にするには、リストボックスのMultiSelectプロパティを設定します。標準では「fmMultiSelectSingle」が設定されています。
fmMultiSelectSingle
fmMultiSelectMulti
fmMultiSelectExtended
標準の
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