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

コンボボックスに項目を追加する(AddItem)(1)

コンボボックスに項目を追加する(AddItem))(2)

ユーザーフォームを表示すると、表示されたコンボボックスに項目が追加されているのか確認できます。最初の 2 つの項目については位置を指定していないのでコンボボックスの最後に追加され、 3 つ目の項目については位置を指定しているので指定の位置に挿入されています。

コンボボックスに項目を追加する(AddItem)(3)

コンボボックスに項目を追加する(AddItem)(4)

配列を使って複数の項目をまとめて追加する(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

配列を使って複数の項目をまとめて追加する(List)(1)

配列を使って複数の項目をまとめて追加する(List)(2)

ユーザーフォームを表示すると、表示されたコンボボックスに項目が追加されているのか確認できます。

配列を使って複数の項目をまとめて追加する(List)(3)

コンボボックスの項目数を取得する(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

コンボボックスの項目数を取得する(ListCount)(1)

コンボボックスの項目数を取得する(ListCount)(2)

ユーザーフォームを表示すると、コンボボックスが表示されます。コンボボックスには 5 個の項目が追加されています。

コンボボックスの項目数を取得する(ListCount)(3)

「Count」ボタンをクリックすると、コンボボックスに追加されている項目数をメッセージボックスで表示します。

コンボボックスの項目数を取得する(ListCount)(4)

コンボボックスの項目を削除する(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

コンボボックスの項目を削除する(RemoveItem,Clear)(1)

コンボボックスの項目を削除する(RemoveItem,Clear)(2)

ユーザーフォームを表示すると、コンボボックスが表示されます。コンボボックスには 5 個の項目が追加されています。

コンボボックスの項目を削除する(RemoveItem,Clear)(3)

「Remove」ボタンをクリックすると、コンボボックスの先頭の項目が 1 つ削除されます。

コンボボックスの項目を削除する(RemoveItem,Clear)(4)

コンボボックスの項目を削除する(RemoveItem,Clear)(5)

「Clear」ボタンをクリックすると、コンボボックスのすべての項目が削除されます。

コンボボックスの項目を削除する(RemoveItem,Clear)(6)

コンボボックスの項目を削除する(RemoveItem,Clear)(7)

コンボボックスで複数列の項目を使用する

リストボックスと同じようにコンボボックスでも複数列で項目を表示することができます。ただあまりコンボボックスで複数列にする使い方は一般的ではなく、複数列が必要な場合はリストボックスを利用されることが多いようです。

コンボボックスで複数列を使用する方法について簡単にご紹介しておきます。使い方はリストボックスの場合と同じなので、詳しい手順については「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

コンボボックスで複数列の項目を使用する(1)

コンボボックスで複数列の項目を使用する(2)

配列を使って複数列の値をまとめて項目に追加することもできます。

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

コンボボックスで複数列の項目を使用する(3)

複数の列を表示する場合に、各列の列毎の幅を 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

コンボボックスで複数列の項目を使用する(4)

コンボボックスで項目を複数列で表示する場合の設定方法について簡単にご紹介しました。

-- --

Excel の VBA を使ったコンボボックスの作成と項目の追加および削除の方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。