VBA~ユーザーフォームのリストボックスで選択したデータを取得しよう~Excel
ユーザーフォームのリストボックスで選択したデータを取得するにはListIndexプロパティでデータのインデックス番号を取得し、Listプロパティでデータを取得します。
インデックス番号はリストの上から0,1,2・・・となります。データが選択されていない場合は-1を返します。
書き方(ListIndexプロパティ)
オブジェクト名.ListIndex
書き方(Listプロパティ)
オブジェクト名.List(インデックス番号)
オブジェクト名の確認方法は作成したユーザーフォームファイルをクリックするとユーザーフォームが表示されます。リストボックスを選択するとプロパティウィンドウにオブジェクト名という項目があるので、それがリストボックスのオブジェクト名になります。プロパティウィンドウが表示されていない場合はメニューの表示からプロパティウィンドウをクリックすると表示されます。
例えばリストボックスでユーザー側で選択したデータをコマンドボタン等を押した時の処理に活用することができます。UserForm1というユーザーフォームにListBox1というリストボックスを作成した場合、ユーザーフォームのファイルをクリックするとユーザーフォームが開きます。
ツールボックスの下段のabマーク(コマンドボタン)をクリックしユーザーフォームのコマンドボタンを表示したい箇所でクリックするとコマンドボタンが設定さます。コマンドボタンを選択した状態でもう一度クリックすると入力カーソルが表示されるのでOKに書き換えます。
コマンドボタンをダブルクリックすると下のコードが表示されます。
Private Sub CommandButton1_Click() End Sub
ここに処理内容を書き込めばコマンドボタンをクリックしたときの処理を設定できます。今回は下のコードにコマンドボタンをクリックするとリストボックスからユーザーが選択したデータをセルA1に表示する処理を書き込みました。
Private Sub CommandButton1_Click() If ListBox1.ListIndex = -1 Then MsgBox "項目を選択してください" Else Range("A1") = ListBox1.List(ListBox1.ListIndex) Unload UserForm1 End If End Sub
VBAで下のコードを実行すると作成したユーザーフォームが表示されデータを選択してOKをクリックするとセルA1に選択したデータが表示され、ユーザーボックスが閉じます。
Sub test1() Load UserForm1 UserForm1.ListBox1.additem "織田信長" UserForm1.ListBox1.additem "豊臣秀吉" UserForm1.ListBox1.additem "徳川家康" UserForm1.Show End Sub