ExcelVBA リストボックスに複数の関連情報を1つの選択肢で表示する方法

 

ExcelVBA リストボックスに複数列を表示することで、1つの項目に関連する複数の情報(例: 商品名と価格、社員名と部署など)を同時に表示できます。これにより、情報の視認性と操作性を向上させることができます。使い方や注意点など、サンプルコードをもとに具体的に解説します。

 

2025年の目標は繰り返し作業に悩まされない年にしませんか? Excel VBAを活用した効率化がその第一歩
本サイト参考:Excel VBAで自動化するコードのベースを習得したい方におすすめの記事

 

Excel VBA リストボックスに複数列を表示利用シーン

以下のようなシーンで利用で表示します。

1.データの表示
複数の関連情報を一括してユーザーに提示する場合(例: 商品リスト、顧客情報など)。

2.選択肢の管理
単一選択や複数選択で、各項目の詳細を確認できるようにする。

3.マスタ管理
例えば社員番号、氏名、部署名などを一覧で管理し、選択後の処理を簡単にする。

Excel VBA リストボックスに複数列を表示する|使い方

1. リストボックスの設定
・リストボックスの「ColumnCount」プロパティを設定します(列数を指定)。デフォルトは 1 列ですが、複数列表示するには必要な列数を設定します。

・「ColumnWidths」プロパティで各列の幅を調整します(幅を 0 にすると非表示になります)。

2. データの追加
・各列にデータを追加する場合は、 AddItem や List プロパティを使用します。

Excel VBA リストボックスに複数列を表示する|ポイント

・列幅の調整
列幅を設定しないと、デフォルトではすべて均等に配置されます。必要に応じて調整してください。

・データの結合
リストボックスは列ごとに分割されたデータを扱いますが、列同士の関連を考慮して正しくデータを配置する必要があります。

・選択時のデータ取得
特定の列のデータを取得する場合、 List プロパティで指定する必要があります。

Excel VBA  リストボックスに複数列を表示サンプルコード

Excel VBAで効率化の準備をしてみませんか?2025年をよりスムーズに過ごすための資格
基本的な文法やVBAの実践的な応用までを網羅的に学習できる方法は、ExcelVBAエキスパート資格の取得を目指すこと。学習を通して、より効率的に、着実に基礎を身につけることが可能です。資格取得すれば、スキルの証明にもなり、職場での評価アップにも繋がるため、勉強を進めるモチベーションにもなります。
本サイト参考:マクロ知識がないから「何から学べば良いのかわからない」という人におすすめの記事

フォームモジュール(ユーザーフォームで複数列のリストボックスを使用)

ユーザーフォームに以下を配置

1. リストボックス(例: ListBox1 )を配置します。
2. リストボックスの「ColumnCount」プロパティを 2 以上に設定します。
3. 必要に応じて「ColumnWidths」プロパティで各列の幅を調整します(例: 50pt;100pt )

Option Explicit

Private Sub UserForm_Initialize()
    ' リストボックスの列数を設定
    Me.ListBox1.ColumnCount = 2
    ' 列幅を設定(単位はポイント)
    Me.ListBox1.ColumnWidths = "100pt;150pt"
    
    ' データを追加(AddItemで1行ずつ追加)
    Me.ListBox1.AddItem "商品A"
    Me.ListBox1.List(0, 1) = "100円"
    
    Me.ListBox1.AddItem "商品B"
    Me.ListBox1.List(1, 1) = "200円"
    
    Me.ListBox1.AddItem "商品C"
    Me.ListBox1.List(2, 1) = "300円"
End Sub

Private Sub CommandButton1_Click()
    Dim selectedItem As String
    Dim selectedPrice As String
    
    ' 選択された行のデータを取得
    If Me.ListBox1.ListIndex <> -1 Then
        selectedItem = Me.ListBox1.List(Me.ListBox1.ListIndex, 0) ' 商品名
        selectedPrice = Me.ListBox1.List(Me.ListBox1.ListIndex, 1) ' 価格
        MsgBox "選択された商品: " & selectedItem & vbCrLf & "価格: " & selectedPrice, vbInformation
    Else
        MsgBox "項目が選択されていません。", vbExclamation
    End If
End Sub

標準モジュール(シート上でActiveXリストボックスを使う(複数列対応))

シート上に配置

1. シート上にActiveXリストボックス( ListBox1 )を配置します。
2. プロパティウィンドウで ColumnCount を 2 以上に設定し、必要なら ColumnWidths も調整

Option Explicit

Sub PopulateListBox()
    Dim ws As Worksheet
    Dim listBox As Object
    
    ' シートとリストボックスを取得
    Set ws = ThisWorkbook.Sheets(1)
    Set listBox = ws.OLEObjects("ListBox1").Object
    
    ' リストボックス設定
    listBox.ColumnCount = 2
    listBox.ColumnWidths = "100pt;150pt"
    
    ' データを追加
    listBox.AddItem "社員A"
    listBox.List(0, 1) = "営業部"
    
    listBox.AddItem "社員B"
    listBox.List(1, 1) = "総務部"
    
    listBox.AddItem "社員C"
    listBox.List(2, 1) = "開発部"
End Sub

Sub GetSelectedData()
    Dim ws As Worksheet
    Dim listBox As Object
    Dim selectedName As String
    Dim selectedDept As String
    
    ' シートとリストボックスを取得
    Set ws = ThisWorkbook.Sheets(1)
    Set listBox = ws.OLEObjects("ListBox1").Object
    
    ' 選択された行のデータを取得
    If listBox.ListIndex <> -1 Then
        selectedName = listBox.List(listBox.ListIndex, 0) ' 名前
        selectedDept = listBox.List(listBox.ListIndex, 1) ' 部署
        MsgBox "選択された社員: " & selectedName & vbCrLf & "部署: " & selectedDept, vbInformation
    Else
        MsgBox "項目が選択されていません。", vbExclamation
    End If
End Sub

リストボックスで複数の関連情報を1つの選択肢として表示・管理する。 列幅やデータの整合性に注意して利用してください。

上記のコードはコピペで動作するので、初心者でも安心して利用できます。

 

Excel VBAで自動化するコードのベースを習得したい方におすすめ!

VBAエキスパート資格は、日常業務でExcelを多用し、手動作業を減らしたいと考えている方には価値あるものです。

ExcelVBAエキスパートベーシック
仕事の効率をあげるためにExcelVBAを利用する人が対象の問題集です。


ExcelVBAエキスパートスタンダード

ExcelVBAの開発を仕事にする人が対象の問題集です。

 

Excel  VBA エキスパート資格について知りたい方は、下記「Excel VBAスキルアップを目指すなら知っておきたいVBAエキスパート」をご確認ください。