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