複数選択可能なリストボックス


リストボックスで複数の項目を選択可能にするには、リストボックスの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