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