ユーザーフォーム上のリストボックスのリストを、すべて取得する方法についてご説明します。
リストボックスは複数のテキストを登録し、その中から選択できる機能のコントロールです。
セル範囲をリストに登録したり、1つしか選択できないように指定したり、複数選択可能にしたり、また、選択したリストを取得するなどが可能です。
処理によっては選択関係なく、登録されているリストをすべて取得したい場合があります。
そんな時に使えるサンプルコードの説明です。
その他のリストボックスの操作方法については、下記記事をご覧ください。
1.リストボックスのリストの取得方法
リストボックスに登録されているリストの登録方法です。
リストをすべて取得するにはループを使用して、リストに登録されている文字列を取得します。
ループさせるためにはリストの数を取得しなければいけません。
登録されているリストの数は「ListCount」プロパティで取得出来ます。
リストのインデックスは0から始まるため、-1する必要があります。
次のように記述します。
Contents("コントロール名").ListCount-1
リストのインデックスを指定するには「List」プロパティで指定します。
次のように記述します。
Contents("コントロール名").List(番号)
リストの数の取得と、リストのインデックスの指定がわかりましたので、取得するコードを作成したいと思います。
2.取得するサンプルコード
サンプルデータ
まずは次のようなデータをリストとして登録したリストボックスを用意します。
サンプルデータのコード
本題とは関係ないですが、簡単に上記リストボックスの表示方法とリストの作成追加について説明したいと思います。
まずはユーザーフォームを作成し、リストボックスを追加します。
つづいて作成したユーザーフォームの表示とリストの追加するコードです。
標準モジュールに記述しています。
Sub FormShow()
Dim i As Long
With UserForm1.Controls("ListBox1")
For i = 2 To 25 'A列のリスト分ループする
.AddItem Cells(i, 1) 'AddItemでリストを順番に登録する
Next i
End With
UserForm1.Show vbModeless 'モードレスで表示する
End Sub
リストを取得するサンプルコード
上記で作成したフォームを表示して、表示されているリストボックスに登録されているリストをすべて取得するサンプルコードです。
リストボックスのリストを順番に変数に格納して、最後にメッセージボックスに表示させます。
Sub List_Get()
Dim MyStr As String
Dim i As Long
With UserForm1.Controls("ListBox1")
'コンボボックスのリスト数分ループする
For i = 0 To .ListCount - 1
'登録されているリストを順番に取得する
MyStr = MyStr & .List(i) & vbCrLf
Next i
MsgBox MyStr
End With
End Sub