VBAでリストボックスを使いこなす!基礎から応用まで徹底解説

Excel VBAを使ってユーザーフォームを作成するとき、「リストボックス」はとても便利なコントロールの一つです。複数の選択肢から選ばせたり、データを一覧表示したり、選択された内容を別の処理に使ったりと、その活用シーンはさまざまです。
本記事では、VBAでのリストボックスの基本的な使い方から、データの追加・削除、複数選択、シート連携などの応用テクニックまで、解説します。VBA初心者の方でも実際に動かしながら学べるよう、コード付きで紹介していますので、ぜひ参考にしてください。


リストボックスとは何か?

リストボックス(ListBox)は、複数の選択肢を一覧表示し、ユーザーがその中から1つまたは複数を選択できるコントロールです。Excelのユーザーフォーム上に配置して使うのが一般的で、フォームから値を取得したり、逆にリストにデータを追加したりすることができます。

VBAで使う際には、以下のような用途に活用されます。

  • 都道府県や商品リストの選択
  • データベースからの動的なリスト表示
  • ユーザーの選択に応じた処理分岐

シンプルな見た目ながら、業務効率化には欠かせない存在です。


リストボックスの配置とプロパティ設定

まず、ユーザーフォームにリストボックスを配置する方法です。

  1. Excelの「開発」タブから「挿入」→「ユーザーフォーム」を選択
  2. ツールボックスから「ListBox」をフォーム上にドラッグ
  3. 配置したリストボックスを選択し、プロパティウィンドウで名前や動作を設定

主なプロパティには以下のようなものがあります:

プロパティ説明
Nameコントロールの名前(コードで参照する際に使用)
RowSource表示するデータの範囲を設定(例:”Sheet1!A1:A10″)
MultiSelect複数選択の可否(0:不可、1:Ctrlキーで選択、2:複数選択可)
ColumnCount列数を設定(複数列表示も可能)

リストボックスに項目を追加する基本コード

次に、コードでリストに項目を追加する方法です。以下は基本的な例です。

Private Sub UserForm_Initialize()
ListBox1.AddItem "リンゴ"
ListBox1.AddItem "バナナ"
ListBox1.AddItem "オレンジ"
End Sub

このコードは、フォームが起動したときにリストボックスに3つの果物を追加する内容です。AddItemで項目を1行ずつ追加できます。


複数列を表示する方法

リストボックスに複数の列を表示するには、ColumnCountプロパティを使います。

Private Sub UserForm_Initialize()
ListBox1.ColumnCount = 2
ListBox1.AddItem "001" ' 1列目(列インデックス0)
ListBox1.List(0, 1) = "リンゴ" ' 2列目(列インデックス1)

ListBox1.AddItem "002"
ListBox1.List(1, 1) = "バナナ"
End Sub

このように、1つの行に複数の値を入れて表示できます。


シートのデータをリストボックスに読み込む

シートから直接データを読み込んでリストボックスに表示させるには、RowSourceプロパティを使うか、VBAで読み込む方法があります。

Private Sub UserForm_Initialize()
Dim i As Integer
For i = 1 To 10
ListBox1.AddItem Worksheets("Sheet1").Cells(i, 1).Value
Next i
End Sub

または、RowSourceを使えばより簡潔です。

Private Sub UserForm_Initialize()
ListBox1.RowSource = "Sheet1!A1:A10"
End Sub

選択された項目を取得する方法

ユーザーがリストから選んだ値を取得するには、ListBox1.Valueを使います。

Private Sub CommandButton1_Click()
MsgBox "選択された項目は: " & ListBox1.Value
End Sub

複数選択が許可されている場合は、以下のようにループで取得します。

Private Sub CommandButton1_Click()
Dim i As Integer
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) Then
MsgBox "選択された項目: " & ListBox1.List(i)
End If
Next i
End Sub

リストから項目を削除する方法

項目を削除するには、RemoveItemを使用します。

Private Sub CommandButton2_Click()
If ListBox1.ListIndex <> -1 Then
ListBox1.RemoveItem ListBox1.ListIndex
Else
MsgBox "項目が選択されていません"
End If
End Sub

選択肢をクリアする方法

リストを初期化するには、Clearを使います。

Private Sub CommandButton3_Click()
ListBox1.Clear
End Sub

このようにすれば、再読み込みや更新時にリストをリセットすることが可能です。


応用:リストボックスの値に応じて処理を変える

選択された値に応じて処理を分岐することで、より実践的なユーザーインターフェースが作れます。

Private Sub CommandButton4_Click()
Select Case ListBox1.Value
Case "リンゴ"
MsgBox "リンゴは赤い果物です"
Case "バナナ"
MsgBox "バナナは黄色い果物です"
Case Else
MsgBox "その他の果物です"
End Select
End Sub

まとめ

リストボックスは、見た目はシンプルですが、データの表示や選択、ユーザーとのインタラクションにおいて非常に強力なツールです。今回ご紹介した内容を活用すれば、日常業務における入力フォームやデータ抽出ツールの幅がぐっと広がるでしょう。

VBA初心者の方は、まずは今回のサンプルコードを動かしてみることから始めてください。実際に手を動かすことで、理解が深まります。そして慣れてきたら、複数のリストを連携させたり、条件付きでリストを更新するような仕組みも挑戦してみましょう。

タイトルとURLをコピーしました