【Excel VBA】リストボックスの使い方

当ページのリンクには広告が含まれている可能性があります。
リストボックスの使い方

こんにちは、ユーキです。

今回は、リストボックスの使い方を紹介します。

目次

リストボックスとは

複数の入力項目を一覧にして、そこから値を選択できるコントロールです。以下のような部品になります。

リストボックス

シンプルなリストボックス

では、さっそくリストボックスを作ってみます。

リストボックスの配置

ユーザーフォームにリストボックスを配置します。

リストボックスの追加

これだけだと、選択肢が表示されません。選択肢を追加する必要があります。

選択肢をコードで設定する

コードで設定する方法になります。

ユーザーフォームが表示されるタイミングで、選択肢を設定するコードは以下になります。

Private Sub UserForm_Initialize()
    ListBox1.AddItem ("A型")
    ListBox1.AddItem ("B型")
    ListBox1.AddItem ("O型")
    ListBox1.AddItem ("AB型")
End Sub

シートの値を選択肢として設定する

シートに設定した値を選択肢として指定することも可能です。

Sheet3のA2~A5の値を選択肢に定義したい場合、以下のようなコードになります。

リストボックスの選択肢定義
Private Sub UserForm_Initialize()
    ListBox1.RowSource = "Sheet3!A2:A5"
End Sub

RowSourceプロパティは、プロパティ画面でも設定可能です。

RowSourceプロパティ

見出し(タイトル)のあるリストボックス

選択肢の先頭に見出し(タイトル)は、RowSourceを指定した場合のみ設定可能です。ColumnHeads プロパティをTrueに設定します。これで、選択肢の1行上に書いた文字列が見出し(タイトル)になります。

見出し付き選択肢
Private Sub UserForm_Initialize()
    ListBox1.RowSource = "Sheet3!A2:A5" '指定する範囲は選択肢の部分のみ
    ListBox1.ColumnHeads = True
End Sub

次のような見出し(タイトル)が表示されるようになります。

見出し付きリストボックス

複数列のリストボックス

複数列のリストボックスの作り方は2種類あります。RowSourceプロパティで指定する方法と、リストを1つずつ指定していく方法があります。

RowSourceプロパティで指定する

シンプルなリストボックスと同じですが、表示する列数に応じて、ColumnCountを設定する必要があります。

複数列の選択肢
Private Sub UserForm_Initialize()
    ListBox1.ColumnCount = 2
    ListBox1.RowSource = "Sheet3!A2:B9"
    ’見出しも表示する
    ListBox1.ColumnHeads = True
End Sub

見出し(タイトル)が付いた2列のリストボックスが表示されました。

複数列リストボックス

2次元配列で指定する

2次元配列を作り、Columnプロパティに指定をします。

Private Sub UserForm_Initialize()
    Dim myData(1, 7) As Variant
    myData(0, 0) = "A型"
    myData(1, 0) = "男性"
    
    myData(0, 1) = "A型"
    myData(1, 1) = "女性"
    
    myData(0, 2) = "B型"
    myData(1, 2) = "男性"
    
    myData(0, 3) = "B型"
    myData(1, 3) = "女性"
    
    myData(0, 4) = "O型"
    myData(1, 4) = "男性"
    
    myData(0, 5) = "O型"
    myData(1, 5) = "女性"
    
    myData(0, 6) = "AB型"
    myData(1, 6) = "男性"
    
    myData(0, 7) = "AB型"
    myData(1, 7) = "女性"
    
    ListBox1.ColumnCount = 2
    ListBox1.Column = myData
End Sub

これで、2列のリストボックスができます。3列、4列と増やしたい場合は、配列のサイズを大きくして、設定するデータを追加すればOKです。

二次元配列を指定したリストボックス

Listプロパティを指定

この方法が一番汎用性が高いでしょう。AddItemで行を追加し、Listプロパティで1行ずつデータを指定する方法になります。

Private Sub UserForm_Initialize()
    ListBox1.ColumnCount = 2
    
    ListBox1.AddItem
    ListBox1.List(0, 0) = "A型"
    ListBox1.List(0, 1) = "男性"
    
    ListBox1.AddItem
    ListBox1.List(1, 0) = "A型"
    ListBox1.List(1, 1) = "女性"
    
    ListBox1.AddItem
    ListBox1.List(2, 0) = "B型"
    ListBox1.List(2, 1) = "男性"
    
    ListBox1.AddItem
    ListBox1.List(3, 0) = "B型"
    ListBox1.List(3, 1) = "女性"
    
    ListBox1.AddItem
    ListBox1.List(4, 0) = "O型"
    ListBox1.List(4, 1) = "男性"
    
    ListBox1.AddItem
    ListBox1.List(5, 0) = "O型"
    ListBox1.List(5, 1) = "女性"
    
    ListBox1.AddItem
    ListBox1.List(6, 0) = "AB型"
    ListBox1.List(6, 1) = "男性"
    
    ListBox1.AddItem
    ListBox1.List(7, 0) = "AB型"
    ListBox1.List(7, 1) = "女性"
    
End Sub

この方法でも表示結果は、二次元配列と同じような結果が得られます。

Listプロパティで指定したリストボックス

列幅を変更する

複数列のリストボックスにした場合、列幅を変更するにはColumnWidthsプロパティを指定します。

Private Sub UserForm_Initialize()
    ListBox1.ColumnCount = 2
    
    ListBox1.AddItem
    ListBox1.List(0, 0) = "A型"
    ListBox1.List(0, 1) = "男性"
    
    ListBox1.AddItem
    ListBox1.List(1, 0) = "A型"
    ListBox1.List(1, 1) = "女性"
    
    ListBox1.AddItem
    ListBox1.List(2, 0) = "B型"
    ListBox1.List(2, 1) = "男性"
    
    ListBox1.ColumnWidths = "100; 40"    
End Sub

区切り文字は「;」となります。「ListBox1.ColumnWidths = “100; 40″」と指定した場合、1列目が100ポイント、2列目が40ポイントのカラムとなります。

列幅指定のリストボックス

単位を省略した場合はポイントとなります。㎝(センチメートル)で指定したい場合は、「ListBox1.ColumnWidths = “10cm; 4cm”」のように指定をすることも可能です。明示的にポイントを指定したい場合は「pt」を付けましょう。

まとめ

今回は、リストボックスの使い方を紹介しました。

Point
  • リストボックスは単一列~複数列の指定ができる
  • 選択肢は、RowSource指定のほかコードでも設定が可能
  • 見出し(タイトル)はRowSource指定時のみ設定可能
  • 列幅も変更が可能

少しでもお役に立てば、幸いです。

スポンサーリンク
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

旅好き職業プログラマ。文系大学卒業後、ITソフトウエア開発会社に勤務してプログラミング言語を学ぶ。現在は転職し、プロジェクトマネージャ的ポジションで生産管理システムの開発にあたる。
得意言語は、VB、VB.NET、C#.NET、Java、SQLなど。

目次