はじめに
Excelのシート上に配置できる「フォームコントロール」のリストボックスは、ユーザーに選択肢を提示するための非常に強力なツールです。VBAでこのリストボックスを自在に操るためには、その主要なプロパティを理解することが不可欠です。
この記事では、シート上のリストボックスを操作する上で最も重要となる、以下の5つのプロパティについて、それぞれの役割と使い方をサンプルコード付きで分かりやすく解説します。
- List: リストの項目を設定する
- ListCount: 項目の総数を取得する
- ListIndex: 選択された項目の番号を取得する
- MultiSelect: 複数選択を許可するか設定する
- Selected: 複数選択時に、各項目が選択されているか判定する
1. List
プロパティ
リストボックスに表示する項目のリストを設定、または取得します。VBAの配列を直接代入するのが最も簡単な設定方法です。
サンプルコード
Sub PopulateListBox()
Dim targetListBox As ListBox
Set targetListBox = ActiveSheet.ListBoxes("SalesOfficeList")
' Array関数で作成した配列を .List プロパティに代入
targetListBox.List = Array("東京本社", "大阪支社", "名古屋支社", "福岡支社")
End Sub
解説: Array
関数で作成した配列を .List
プロパティに代入するだけで、リストの項目が一括で設定されます。
2. ListCount
プロパティ
リストボックスに含まれる項目の総数を取得します。読み取り専用のプロパティです。ループ処理などで全項目をチェックする際に使います。
サンプルコード
Sub GetItemCount()
Dim targetListBox As ListBox
Set targetListBox = ActiveSheet.ListBoxes("SalesOfficeList")
' .ListCount で現在の項目数を取得
MsgBox "現在の項目数: " & targetListBox.ListCount
End Sub
3. ListIndex
プロパティ
ユーザーが選択している項目のインデックス番号(1始まり)を取得、または設定します。
- 単一選択モードでのみ有効です。
- 何も選択されていない場合は
0
を返します。
サンプルコード
Sub SelectAndGetItem()
Dim targetListBox As ListBox
Set targetListBox = ActiveSheet.ListBoxes("SalesOfficeList")
' 2番目の項目(大阪支社)を選択状態にする
targetListBox.ListIndex = 2
' 現在選択されている項目のインデックス番号を取得
MsgBox targetListBox.ListIndex & "番目の項目が選択されています。"
End Sub
注意: ユーザーフォームのリストボックスでは ListIndex
は 0
から始まりますが、シート上のリストボックスでは 1
から始まるという違いがあります。
4. MultiSelect
プロパティ
複数選択を許可するかどうかを設定します。
設定値 | VBA定数 | 説明 |
1 | xlNone | 単一選択(デフォルト) |
2 | xlSimple | Shift /Ctrl キーなしで、クリックで複数選択 |
3 | xlExtended | Shift /Ctrl キーを使った標準的な複数選択 |
サンプルコード
Sub EnableMultiSelect()
Dim targetListBox As ListBox
Set targetListBox = ActiveSheet.ListBoxes("SalesOfficeList")
' Ctrlキーを使った複数選択を有効にする
targetListBox.MultiSelect = xlExtended
End Sub
5. Selected
プロパティ
複数選択が有効な場合に、各項目が選択されているかどうかを判定します。
サンプルコード
Sub GetSelectedItems()
Dim targetListBox As ListBox
Dim i As Long
Dim resultText As String
Set targetListBox = ActiveSheet.ListBoxes("SalesOfficeList")
' 複数選択が有効でない場合は終了
If targetListBox.MultiSelect = xlNone Then Exit Sub
resultText = "選択された項目:" & vbCrLf
For i = 1 To targetListBox.ListCount
' .Selected(i) が True かどうかで、i番目の項目が選択されているか判定
If targetListBox.Selected(i) Then
resultText = resultText & "・" & targetListBox.List(i) & vbCrLf
End If
Next i
MsgBox resultText
End Sub
解説: .Selected
プロパティは、引数にインデックス番号(1始まり)を取ります。その項目が選択されていれば True
、されていなければ False
を返します。
まとめ
今回は、シート上のリストボックスをVBAで操作するための5つの基本プロパティを解説しました。これらのプロパティを組み合わせることで、リストの内容を動的に変更したり、ユーザーの選択に応じた処理を実装したりと、インタラクティブなシートを作成することが可能になります。