ExcelVBA リストボックスに動的な項目追加でユーザー選択肢を提供する

 

ExcelVBA リストボックスに動的に項目を追加することで、ユーザーに選択肢を提供します。項目をプログラムで追加することで、柔軟なデータ表示や選択機能を実現できます。使い方や注意点など、サンプルコードをもとに具体的に解説します。

 

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

 

Excel VBA リストボックスに動的な項目追加利用シーン

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

1.フォームのリストボックスにデータを動的に表示

2.シートのセルや外部データソース(CSVやデータベース)からデータを取得して追加

3.条件に応じた選択肢の絞り込み

使い方

リストボックスに項目を追加するには、AddItem メソッドを使用します。

リストボックス名.AddItem "追加する項目

ポイント

1. リストボックスのクリア
新しいデータを追加する場合は、既存の項目を消去するために Clear メソッドを使います。

リストボックス名.Clear

2. アイテムの重複
同じ値が重複しないように管理が必要です。

3. リストボックスのプロパティ
RowSource プロパティを設定している場合は AddItem が無効になります。 RowSource をクリアする必要があります。

リストボックス名.RowSource = ""

 

Excel VBA  リストボックスに動的な項目追加サンプルコード

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

フォームモジュール(ユーザーフォームでリストボックスに項目を追加)

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

1. リストボックス(例: ListBox1 )を配置します。
2. コマンドボタン(例: CommandButton1 )を配置します。

Option Explicit

Private Sub UserForm_Initialize()
    ' 初期化時にリストボックスをクリア
    Me.ListBox1.Clear
    
    ' リストボックスにデータを追加
    Me.ListBox1.AddItem "選択肢 1"
    Me.ListBox1.AddItem "選択肢 2"
    Me.ListBox1.AddItem "選択肢 3"
End Sub

Private Sub CommandButton1_Click()
    Dim newItem As String
    
    ' 新しい項目を追加
    newItem = InputBox("追加する項目を入力してください", "リストに追加")
    If newItem <> "" Then
        Me.ListBox1.AddItem newItem
        MsgBox "「" & newItem & "」を追加しました。"
    Else
        MsgBox "項目が入力されませんでした。"
    End If
End Sub

標準モジュール(シート上のリストボックスに項目を追加)

シート上に配置

シートにActiveXコントロールのリストボックス( ListBox1 )を配置

Option Explicit

Private Sub CommandButton1_Click()
    AddToListBox
End Sub

Sub AddToListBox()
    Dim ws As Worksheet
    Dim listBox As Object

    ' シートとリストボックスの設定
    Set ws = ThisWorkbook.Sheets("Sheet1") ' シート名を確認
    Set listBox = ws.OLEObjects("ListBox1").Object
    
    ' 既存の項目をクリア
    listBox.Clear
    
    ' 新しいデータを追加
    listBox.AddItem "オプション A"
    listBox.AddItem "オプション B"
    listBox.AddItem "オプション C"
End Sub

標準モジュール(CSVデータをリストボックスに追加)サンプルCSVファイル(列にデータが含まれる)を用意

Option Explicit

Private Sub CommandButton1_Click()
    AddCSVToListBox
End Sub

Sub AddCSVToListBox()
    Dim ws As Worksheet
    Dim listBox As Object
    Dim csvPath As String
    Dim fileNumber As Integer
    Dim lineData As String
    
    ' CSVファイルのパスを指定
    csvPath = Application.GetOpenFilename("CSV Files (*.csv), *.csv")
    If csvPath = "False" Then Exit Sub

    ' シートとリストボックスを取得
    Set ws = ThisWorkbook.Sheets(1)
    Set listBox = ws.OLEObjects("ListBox1").Object
    
    ' 既存データをクリア
    listBox.Clear
    
    ' CSVファイルを読み込み
    fileNumber = FreeFile
    Open csvPath For Input As #fileNumber
    Do Until EOF(fileNumber)
        Line Input #fileNumber, lineData
        listBox.AddItem lineData
    Loop
    Close #fileNumber
End Sub

リストボックスに動的に選択肢を追加し、ユーザーに適切な選択肢を提供する。データを更新する際はクリア処理やプロパティの確認を忘れずにしてください。

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

 

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

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

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


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

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

 

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