複数列のリストボックス


UserFormで使用するリストボックス(ListBox)では、複数列のデータを表示することが可能です。

複数列のデータを表示するには、まずリストボックスのColumnCountプロパティに表示したい列の数を指定します。標準では1が設定されています。このColumnCountプロパティは、プロパティウィンドウで指定すればいいでしょう。ここでは、ColumnCountプロパティに"2"を指定したものとします。

さて、これで準備は完了です。

このリストボックスには、複数列のデータを表示できるようになりました。リストボックスに複数列のデータを表示するには、次のようにします。

ListBox1.List(行位置, 列位置) = "データ"

リストボックス内のデータは配列形式で管理されていて、それはListプロパティで操作できるのですが、実は上のように二次元配列になっています。"行位置"というのは、リストボックスの「上から何番目」です。つまり、ListIndexプロパティと同じことですね。先頭行が"0"です。"列位置"は、左から数えて何列目かということです。こちらも、左端列が"0"となります。つまり、リストボックスの先頭行に、

のように表示したいのなら、次のようにします。

ListBox1.List(0, 0) = "tanaka"
ListBox1.List(0, 1) = 2012

しかし、何もデータが登録されていないリストボックスに対して、いきなり上のコードを実行してはいけません。複数列のリストボックスにデータを登録するには、まず「空のデータ」を登録し、その空データを編集するという2段階の操作が必要になります。

Private Sub CommandButton1_Click()
    ListBox1.AddItem ""
    ListBox1.List(0, 0) = "tanaka"
    ListBox1.List(0, 1) = 2012
End Sub

ちょっと整理してみましょう。上のコードは、次のような動作です。

アクティブシートに、次のようなデータが入力されていたとします。これらを、複数列のリストボックスに表示するには、たとえば次のようにします。

Private Sub CommandButton1_Click()
    Dim i As Long
    With ListBox1
        For i = 2 To 11
            .AddItem ""
            .List(.ListCount - 1, 0) = Cells(i, 1)
            .List(.ListCount - 1, 1) = Cells(i, 2)
        Next i
    End With
End Sub

あるいは、リストボックスに登録したいデータが、上のように、ワークシートに入力されているのでしたら、もっと簡単な方法もあります。リストボックスは、そこに表示するデータを配列形式で管理しています。ここまでで解説した、一度空のデータを登録してから・・・というのは、その配列データに、1件ずつ登録する考え方です。そうではなく、ワークシートに入力された"ひとかたまりのセル範囲"を、配列として一気に登録することも可能です。

Private Sub CommandButton1_Click()
    ListBox1.List = Range("A2:B11").Value
End Sub

このとき、Valueプロパティを省略してはいけません。複数セル範囲を扱うとき、Valueプロパティを省略すると、配列にならないからです。もし、データの数が不定で、最終行の位置を調べなければならないときは、たとえば次のようにしましょう。

Private Sub CommandButton1_Click()
    ListBox1.List = Range(Range("A2"), Cells(Rows.Count, 2).End(xlUp)).Value
End Sub

もちろん、配列であれば登録できるのですから、次のように、任意のデータを一括登録することも可能です。まぁ、こうした使い方は希でしょうけど。

Private Sub CommandButton1_Click()
    Dim tmp(2, 2) As String
    tmp(0, 0) = "大野"
    tmp(0, 1) = 536
    tmp(1, 0) = "栗原"
    tmp(1, 1) = 914
    tmp(2, 0) = "宮下"
    tmp(2, 1) = 440
    ListBox1.List = tmp
End Sub

各列の幅

リストボックスに複数列を表示するとき、各列の幅は個別に指定できます。

各列の幅は、ColumnWidthsプロパティに指定します。ColumnWidthsプロパティに、空欄("")または-1を指定すると、各列は、リストボックスの幅を列数で割った幅になります。ColumnWidthsプロパティは、標準では空欄ですから、上記で解説したリストボックスは、2つの列が均等の幅で、それぞれ「リストボックスの幅÷2」になっています。

ColumnWidthsプロパティに指定する各列の幅は、ポイント(pt)・センチメートル(Cm)・インチ(in)の、いずれかの単位で指定します。単位を省略すると、ポイント(pt)とみなされます。ちなみに、1ポイントは1/72インチです。