はじめに
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つの基本プロパティを解説しました。これらのプロパティを組み合わせることで、リストの内容を動的に変更したり、ユーザーの選択に応じた処理を実装したりと、インタラクティブなシートを作成することが可能になります。

 
			 
			 
			 
			 
			 
			 
			