VBAを使ったコンボボックスの作成と項目の追加および削除
Excel のユーザーフォーム上でコンボボックス(ComboBox)コントロールを設置したあと、 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()
ComboBox1.AddItem "洗濯機"
ComboBox1.AddItem "掃除機"
ComboBox1.AddItem "炊飯器", 1
End Sub
ユーザーフォームを表示すると、表示されたコンボボックスに項目が追加されているのか確認できます。最初の 2 つの項目については位置を指定していないのでコンボボックスの最後に追加され、 3 つ目の項目については位置を指定しているので指定の位置に挿入されています。
配列を使って複数の項目をまとめて追加する(List)
コンボボックスに項目を追加する場合、 AddItem メソッドを使って一つ一つ追加する方法とは別に、あらかじめ追加する項目を配列に格納しておき、 まとめて項目をコンボボックスに追加することができます。
配列に格納した項目のデータをまとめて追加するには List プロパティを使用します。
オブジェクト.List(row, column) [= Variant ]
具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャにコードを記述し、配列に格納しておいたデータをコンボボックスに項目としてまとめて追加しています。
Option Explicit
Private Sub UserForm_Initialize()
Dim machineArray(2)
machineArray(0) = "洗濯機"
machineArray(1) = "掃除機"
machineArray(2) = "炊飯器"
ComboBox1.List() = machineArray
End Sub
ユーザーフォームを表示すると、表示されたコンボボックスに項目が追加されているのか確認できます。
コンボボックスの項目数を取得する(ListCount)
コンボボックスに追加されている項目数を取得するには ListCount プロパティを使用します。
オブジェクト.ListCount
ListCount プロパティは読み取り専用です。コンボボックスに追加されている項目数を取得します。
具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャにコードを記述し、コンボボックスに 5 個の項目を追加しています。そしてコマンドボタンをがクリックされると現在の項目数をメッセージボックスに表示します。
Option Explicit
Private Sub UserForm_Initialize()
Dim i As Integer
For i = 1 To 5
ComboBox1.AddItem "項目" & i
Next i
End Sub
Private Sub CommandButton1_Click()
MsgBox "項目数は " & ComboBox1.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
ComboBox1.AddItem "項目" & i
Next i
End Sub
Private Sub CommandButton1_Click()
If ComboBox1.ListCount > 0 Then
ComboBox1.RemoveItem 0
End If
End Sub
Private Sub CommandButton2_Click()
ComboBox1.Clear
End Sub
ユーザーフォームを表示すると、コンボボックスが表示されます。コンボボックスには 5 個の項目が追加されています。
「Remove」ボタンをクリックすると、コンボボックスの先頭の項目が 1 つ削除されます。
「Clear」ボタンをクリックすると、コンボボックスのすべての項目が削除されます。
コンボボックスで複数列の項目を使用する
リストボックスと同じようにコンボボックスでも複数列で項目を表示することができます。ただあまりコンボボックスで複数列にする使い方は一般的ではなく、複数列が必要な場合はリストボックスを利用されることが多いようです。
コンボボックスで複数列を使用する方法について簡単にご紹介しておきます。使い方はリストボックスの場合と同じなので、詳しい手順については「VBAを使ったリストボックスの作成と項目の追加および削除」を参照されてください。
ColumnCount プロパティで表示する列数を指定します。そして AddItem メソッドを使って項目を追加したあと、 2 列目以降の値については List プロパティを使って設定します。
Option Explicit
Private Sub UserForm_Initialize()
ComboBox1.ColumnCount = 2
ComboBox1.AddItem "洗濯機"
ComboBox1.List(0, 1) = "10個"
ComboBox1.AddItem "掃除機"
ComboBox1.List(1, 1) = "14個"
ComboBox1.AddItem "炊飯器"
ComboBox1.List(2, 1) = "8個"
End Sub
配列を使って複数列の値をまとめて項目に追加することもできます。
Option Explicit
Private Sub UserForm_Initialize()
Dim machineArray(2, 1)
machineArray(0, 0) = "洗濯機"
machineArray(0, 1) = "10個"
machineArray(1, 0) = "掃除機"
machineArray(1, 1) = "14個"
machineArray(2, 0) = "炊飯器"
machineArray(2, 1) = "8個"
ComboBox1.ColumnCount = 2
ComboBox1.List() = machineArray
End Sub
複数の列を表示する場合に、各列の列毎の幅を ColumnWidths プロパティを使って設定することもできます。
Option Explicit
Private Sub UserForm_Initialize()
Dim machineArray(2, 1)
machineArray(0, 0) = "洗濯機"
machineArray(0, 1) = "10個"
machineArray(1, 0) = "掃除機"
machineArray(1, 1) = "14個"
machineArray(2, 0) = "炊飯器"
machineArray(2, 1) = "8個"
ComboBox1.ColumnCount = 2
ComboBox1.List() = machineArray
ComboBox1.ColumnWidths = "50;30"
End Sub
コンボボックスで項目を複数列で表示する場合の設定方法について簡単にご紹介しました。
-- --
Excel の VBA を使ったコンボボックスの作成と項目の追加および削除の方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。