【VBA】シート上のリストボックスを使いこなす!主要プロパティ徹底解説

目次

はじめに

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

注意: ユーザーフォームのリストボックスでは ListIndex0 から始まりますが、シート上のリストボックスでは 1 から始まるという違いがあります。


4. MultiSelect プロパティ

複数選択を許可するかどうかを設定します。

設定値VBA定数説明
1xlNone単一選択(デフォルト)
2xlSimpleShift/Ctrlキーなしで、クリックで複数選択
3xlExtendedShift/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つの基本プロパティを解説しました。これらのプロパティを組み合わせることで、リストの内容を動的に変更したり、ユーザーの選択に応じた処理を実装したりと、インタラクティブなシートを作成することが可能になります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次