Excel VBA コンボボックスのリストの追加と削除する方法

コントロール作成/操作

Excel VBAのユーザーフォームに登録するコンボボックスのリストの追加と削除する方法についてご説明します。

コンボボックスはテキストボックスとリストボックスが合わさったコントロールで、非常に使用頻度の高いコントロールです。

そのコンボボックスのリストの追加と削除についてです。

コンボボックスのコントロールの追加方法や詳細設定、サンプルコードについては「ユーザーフォームにコンボボックスの追加とリスト作成、詳細設定の方法」をご覧ください。

1.リストの追加方法

コンボボックスのリストにテキストを追加するには、「AddItem」メソッドを使用します。

また、「RowSource」プロパティを使用するとセル範囲をまとめて追加する事が可能です。

ですが「RowSource」で追加した場合は「AddItem」、「Clear」、「RemoveItem」メソッドで追加や削除は行えませんので注意が必要です。

AddItemメソッド

AddItem」メソッドの場合は次のように記述します。

AddItem(Item,[Index])

「Item」には追加したい文字列を指定します。

「Index」は追加したい位置を指定しますが、省略可能で省略した場合は末尾に登録されます。

RowSourceプロパティ

RowSource」プロパティの場合は次のように記述します。

ComboBox1.RowSource = "Sheet1!A1:A4"

RowSource」プロパティにシート名とセル範囲を指定します。

設定したリスト項目を変更する場合、その参照先に指定した範囲のセルの値を変更する必要があります。

リストの範囲を変更する場合は、セルの参照範囲も変更します。

「RowSource」で追加した場合は「AddItem」、「Clear」、「RemoveItem」メソッドで追加や削除は行えませんので注意が必要です。

2.追加のサンプルコード

リストにItemを追加する方法をいくつかサンプルコードでご説明します。

「UserForm1」に追加した「ComboBox1」を操作します。

UserForm1を表示するコードは次のように記述します。

Sub Sample()

UserForm1.Show vbModeless

End Sub

コンボボックスのテキストから追加する

リストをコンボボックスのテキスト部分に入力された文字列を追加する方法です。

テキスト部分を取得するには「Textプロパティ」を使用します。

Sub Sample1()

With UserForm1.Controls("ComboBox1")
    
    'テキスト部分をリストに追加
    .AddItem .Text

End With

End Sub

直接リストを追加する

コード上でリストを追加する方法です。

Sub Sample2()

With UserForm1.Controls("ComboBox1")
    
    .AddItem "りんご"
    .AddItem "みかん"
    .AddItem "ぶどう"
    .AddItem "スイカ"

End With

End Sub

セルのデータをリストに追加する

セルの値をリストに追加する方法です。

Sub Sample3()

Dim i      As Long

With UserForm1.Controls("ComboBox1")
        
    For i = 1 To 4
    
        .AddItem Cells(i, 1).Value
    
    Next i

End With

End Sub

RowSourceプロパティでセル範囲を追加する

Sub Sample4()

With UserForm1.Controls("ComboBox1")
        
    .RowSource = "Sheet1!A1:A4"

End With

End Sub

配列からリストを追加する

配列を用意して、配列をリストに追加する方法です。

Sub Sample5()

Dim i           As Long
Dim MyArray()   As Variant

ReDim MyArray(0 To 3)
MyArray(0) = "りんご"
MyArray(1) = "みかん"
MyArray(2) = "ぶどう"
MyArray(3) = "スイカ"

With UserForm1.Controls("ComboBox1")
        
    For i = 0 To 3
    
        .AddItem MyArray(i)
    
    Next i
    
End With

End Sub

2.リストをすべて削除する方法

リストを削除するには、「Clearメソッド」を使用します。

「Clearメソッド」を使用するとリストも初期化されますが、テキスト部分も初期化されますのでそこはご注意ください。

次のように記述します。

ComboBox1.Clear

コンボボックスとテキスト部分を削除するサンプルコードです。

Sub Sample6()

With UserForm1.Controls("ComboBox1")
    
    'すべて削除する
    .Clear

End With

End Sub

3.リストの一部を削除する

リストの一部を削除する場合は「RemoveItem」メソッドを使用します。

削除するリストはインデックス番号で指定します。

インデックスは0から始まります。

次のように記述します。

ComboBox1.RemoveItem 0

リストの一部を削除するサンプルコードです。

指定したリストのインデックスが存在しない場合はエラーとなりますので、ご注意ください。

Sub Sample7()

With UserForm1.Controls("ComboBox1")
    
    '2つ目(インデックス1)を削除する
    .RemoveItem 1

End With

End Sub
タイトルとURLをコピーしました