VBAを使ったリストボックスの作成と項目の追加および削除
Excel のユーザーフォーム上でリストボックス(ListBox)コントロールを設置したあと、 VBA を使ってリストボックスに項目を追加してり削除したりすることができます。ここでは Excel の VBA を使ったリストボックスの作成と項目の追加および削除の方法について解説します。
※ リストボックスで選択されている項目を取得する方法については「VBAを使ってリストボックスで選択された項目を取得する」を参照されてください。
(Last modified: )
目次
リストボックスに項目を追加する(AddItem)
リストボックスに項目を追加するには AddItem
メソッドを使用します。
オブジェクト.AddItem [ item [, varIndex ]]
リストボックスに追加する項目に表示する値を 1 番目の引数に指定します。 2 番目の引数に位置を指定すれば項目がその位置に挿入されます。 2 番目の引数を省略した場合はリストボックスの最後に項目が追加されます。位置を指定する場合、 0 を指定すればリストボックスの先頭、 1 を指定すれば 1 番目と 2 番目の項目の間に挿入されます。
具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize
イベントに対するイベントプロシージャにコードを記述し、リストボックスに項目を追加しています。
Option Explicit Private Sub UserForm_Initialize() ListBox1.AddItem "キャベツ" ListBox1.AddItem "玉ねぎ" ListBox1.AddItem "人参", 1 End Sub
ユーザーフォームを表示すると、表示されたリストボックスに項目が追加されているのか確認できます。最初の 2 つの項目については位置を指定していないのでリストボックスの最後に追加され、 3 つ目の項目については位置を指定しているので指定の位置に挿入されています。
複数列のリストボックスを作成する(ColumnCount,List)
リストボックスは 1 列だけでなく複数の列を持つことができます。リストボックスで何列表示するのかを設定するには ColumnCount
プロパティに値を設定します。
オブジェクト.ColumnCount [= Long ]
リストボックスで表示する列数を代入してください。例えば 2 列のリストボックスを作成する場合は 2 を代入します。
リストボックスでは項目を追加するときに AddItem
メソッドを使用しますが、 AddItem
メソッドでは 1 列目の値しか指定できません。 2 列目以降の値を指定するには List
プロパティを使用します。
オブジェクト.List(row, column) [= Variant ]
1 番目の引数( row
)に行数、 2 番目の引数( column
)に列数を指定し、該当する項目の値に指定した値を設定します。
新しい値を設定する時だけでなく、既に設定されている値に別の値を設定する場合も同じように設定することができます。
注意点として List
プロパティを使って値を設定する場合、対象の項目が既に追加されている必要があります。そこでまず AddItem
メソッドを使って項目を追加したあと、 2 列目以降の値について List
プロパティを使って設定する形になります。
具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize
イベントに対するイベントプロシージャにコードを記述し、リストボックスに項目を追加したあとで項目の別の列の値を設定しています。
Option Explicit Private Sub UserForm_Initialize() ListBox1.ColumnCount = 2 ListBox1.AddItem "キャベツ" ListBox1.List(0, 1) = "100円" ListBox1.AddItem "玉ねぎ" ListBox1.List(1, 1) = "80円" ListBox1.AddItem "人参" ListBox1.List(2, 1) = "120円" End Sub
ユーザーフォームを表示すると、リストボックスが 2 列表示されるように変更され、 3 つの項目に対してそれぞれ値が設定されます。
配列を使って複数列の項目をまとめて追加する
複数列のリストボックスを作成する場合、リストボックスに追加する値の配列をあらかじめ作成しておき、まとめてリストボックスに設定することもできます。先ほどと同じ List
プロパティを使用しますが、行数と列数は省略して配列を代入します。この方法の場合は先に AddItem
で項目を追加しておく必要はありません。
具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize
イベントに対するイベントプロシージャにコードを記述し、配列に設定しておいた値をリストボックスにまとめて追加しています。
Option Explicit Private Sub UserForm_Initialize() Dim foodsArray(2, 1) foodsArray(0, 0) = "キャベツ" foodsArray(0, 1) = "100円" foodsArray(1, 0) = "玉ねぎ" foodsArray(1, 1) = "80円" foodsArray(2, 0) = "人参" foodsArray(2, 1) = "120円" ListBox1.ColumnCount = 2 ListBox1.List() = foodsArray End Sub
ユーザーフォームを表示すると、表示されたリストボックスに項目が追加されているのか確認できます。
リストボックスの列毎の幅を設定する(ColumnWidths)
リストボックスに複数の列を表示するように設定している場合に、列毎の幅を設定するには ColumnWidths
プロパティに値を設定します。
オブジェクト.ColumnWidths [= String ]
列毎の幅をセミコロンで区切って記述した文字列を代入します。単位はポイントです。例えば 3 列の幅を指定する場合は "10;20;15" のような値を代入します。幅に 0 を指定した列は表示されなくなります。
具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize
イベントに対するイベントプロシージャにコードを記述し、リストボックスの列毎の幅を設定しています。
Option Explicit Private Sub UserForm_Initialize() Dim foodsArray(2, 3) foodsArray(0, 0) = 1 foodsArray(0, 1) = "キャベツ" foodsArray(0, 2) = "100円" foodsArray(1, 0) = 2 foodsArray(1, 1) = "玉ねぎ" foodsArray(1, 2) = "80円" ListBox1.ColumnCount = 3 ListBox1.List() = foodsArray ListBox1.ColumnWidths = "20;50;30" End Sub
ユーザーフォームを表示すると、3 列のリストボックスが表示され、各列の幅が指定した長さに設定されているのが確認できます。
もし今回のサンプルで各列の幅を指定していなかった場合は次のように表示されます。各列に同じ長さのデフォルトの幅が設定され、リストボックスに入りきらなかった場合は自動的に水平スクロールバーが表示されるようです。
リストボックスの項目数を取得する(ListCount)
リストボックスに追加されている項目数を取得するには ListCount
プロパティを使用します。
オブジェクト.ListCount
ListCount
プロパティは読み取り専用です。リストボックスに追加されている項目数を取得します。
具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize
イベントに対するイベントプロシージャにコードを記述し、リストボックスに 5 個の項目を追加しています。そしてコマンドボタンをがクリックされると現在の項目数をメッセージボックスに表示します。
Option Explicit Private Sub UserForm_Initialize() Dim i As Integer For i = 1 To 5 ListBox1.AddItem "項目" & i Next i End Sub Private Sub CommandButton1_Click() MsgBox "項目数は " & ListBox1.ListCount & "個です" End Sub
ユーザーフォームを表示すると、リストボックスが表示されます。リストボックスには 5 個の項目が追加されています。
「Count」ボタンをクリックすると、リストボックスに追加されている項目数をメッセージボックスで表示します。
リストボックスの項目を削除する(RemoveItem,Clear)
リストボックスに追加した項目を削除するには RemoveItem
メソッドを使用します。
オブジェクト.RemoveItem index
指定したインデックスの項目をリストボックスから削除します。インデックスは先頭の項目から順に 0, 1, 2... となっています。
またリストボックスのすべての項目を削除するには Clear
メソッドを使用します。
オブジェクト.Clear
リストボックスに追加されている項目をすべて削除します。
具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize
イベントに対するイベントプロシージャにコードを記述し、リストボックスに 5 個の項目を追加しています。そしてコマンドボタンをがクリックされたときに、リストボックスの先頭の項目を削除したりすべての項目を削除したりします。
Option Explicit Private Sub UserForm_Initialize() Dim i As Integer For i = 1 To 5 ListBox1.AddItem "項目" & i Next i End Sub Private Sub CommandButton1_Click() If ListBox1.ListCount > 0 Then ListBox1.RemoveItem 0 End If End Sub Private Sub CommandButton2_Click() ListBox1.Clear End Sub
ユーザーフォームを表示すると、リストボックスが表示されます。リストボックスには 5 個の項目が追加されています。
「Remove」ボタンをクリックすると、リストボックスの先頭の項目が 1 つ削除されます。
「Clear」ボタンをクリックすると、リストボックスのすべての項目が削除されます。
-- --
Excel の VBA を使ったリストボックスの作成と項目の追加および削除の方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
プログラミングや開発環境構築の解説サイトを運営しています。