Excel VBAのユーザーフォームに登録するリストボックスのリストの追加と削除する方法についてご説明します。
リストボックスは複数のテキストを登録し、その中から選択できる機能のコントロールです。
セル範囲をリストに登録したり、1つしか選択できないように指定したり、複数選択可能にしたり、また、選択したリストを取得するなどが可能です。
そのリストボックスのリストの追加と削除についてです。
リストボックスのコントロールの追加方法や詳細設定、サンプルコードについては「リストボックス追加とリスト作成、詳細設定の方法」をご覧ください。
1.リストの追加方法
リストボックスのリストにテキストを追加するには、「AddItem」メソッドを使用します。
また、「RowSource」プロパティを使用するとセル範囲をまとめて追加する事が可能です。
AddItemメソッド
「AddItem」メソッドの場合は次のように記述します。
AddItem(Item,[Index])
「Item」には追加したい文字列を指定します。
「Index」は追加したい位置を指定しますが、省略可能で省略した場合は末尾に登録されます。
RowSourceプロパティ
「RowSource」プロパティの場合は次のように記述します。
ComboBox1.RowSource = "Sheet1!A1:A4"
「RowSource」プロパティにシート名とセル範囲を指定します。
設定したリスト項目を変更する場合、その参照先に指定した範囲のセルの値を変更する必要があります。
リストの範囲を変更する場合は、セルの参照範囲も変更します。
「RowSource」で追加した場合は「AddItem」、「Clear」、「RemoveItem」メソッドで追加や削除は行えませんので注意が必要です。
そのため特に理由がない場合はAddItemメソッドで追加する事をおすすめします。
2.追加のサンプルコード
リストにItemを追加する方法をいくつかサンプルコードでご説明します。
「UserForm1」に追加した「ListBox1」を操作します。
UserForm1を表示するコードは次のように記述します。
Sub Sample()
UserForm1.Show vbModeless
End Sub

直接リストを追加する
コード上でリストを追加する方法です。
Sub Sample1()
With UserForm1.Controls("ListBox1")
.AddItem "りんご"
.AddItem "みかん"
.AddItem "ぶどう"
.AddItem "スイカ"
End With
End Sub

セルのデータをリストに追加する
セルの値をリストに追加する方法です。
Sub Sample2()
Dim i As Long
With UserForm1.Controls("ListBox1")
For i = 1 To 4
.AddItem Cells(i, 1).Value
Next i
End With
End Sub

RowSourceプロパティでセル範囲を追加する
「”Sheet1!A1:A4″」とシートとセル範囲を指定します。
ただし、「RowSource」で追加した場合は「AddItem」、「Clear」、「RemoveItem」メソッドで追加や削除は行えません。
Sub Sample3()
With UserForm1.Controls("ListBox1")
.RowSource = "Sheet1!A1:A4"
End With
End Sub

配列からリストを追加する
配列を用意して、配列をリストに追加する方法です。
Sub Sample4()
Dim i As Long
Dim MyArray() As Variant
ReDim MyArray(0 To 3)
MyArray(0) = "りんご"
MyArray(1) = "みかん"
MyArray(2) = "ぶどう"
MyArray(3) = "スイカ"
With UserForm1.Controls("ListBox1")
For i = 0 To 3
.AddItem MyArray(i)
Next i
End With
End Sub

2.リストをすべて削除する方法
リストを削除するには、「Clearメソッド」を使用します。
次のように記述します。
ListBox1.Clear
リストボックスのリストを削除するサンプルコードです。
Sub Sample5()
With UserForm1.Controls("ListBox1")
'すべて削除する
.Clear
End With
End Sub
3.リストの一部を削除する
リストの一部を削除する場合は「RemoveItem」メソッドを使用します。
削除するリストはインデックス番号で指定します。
インデックスは0から始まります。
次のように記述します。
ComboBox1.RemoveItem 0
リストの一部を削除するサンプルコードです。
指定したリストのインデックスが存在しない場合はエラーとなりますので、ご注意ください。
Sub Sample6()
With UserForm1.Controls("ListBox1")
'2つ目(インデックス1)を削除する
.RemoveItem 1
End With
End Sub