VBA リストボックス
In this Article
このチュートリアルでは、VBAを使用してリストボックスを操作する方法を説明します。
VBAでは、リストボックスを作成することができます。 リストボックスを作成すると、ユーザーは、リストされたオプションの中から1つを選択することができます。リストボックスはユーザーフォームでよく使用されますが、ワークシートでも使用できます。このチュートリアルでは、リストボックスの作成、入力、削除の方法について学習します。また、VBAでユーザーの選択肢を取得し、それをコードで使用する方法についても説明します。
コンボボックスの作成方法を学びたい場合は、こちらをご覧ください → VBA コンボボックス
チェックボックスの作成方法を学びたい場合は、こちらをご覧ください → VBA チェックボックス
リストボックスを作成する
ワークシートにリストボックスを挿入するためには、メニューから 開発タブをクリックし、コントロールグループの、ActiveX コントロールにあるリストボックスを選択します。
画像1.ワークシートへのリストボックスの挿入
挿入したリストボックスを選択すると、開発タブの プロパティをクリックすることができます。
画像2.リストボックスのプロパティを変更する
ここでは、リストボックスのさまざまなプロパティを設定することができます。まず、オブジェクト名をlstListBox に変更しました。これで、VBAのコードでこの名前のリストボックスが使えるようになります。
VBA コードでリストボックスに値を入力する
まず、リストボックスに値を入力する必要があります。ほとんどの場合、リストボックスはワークブックを開いたときに値を入力する必要があります。このため、WorkbookオブジェクトのOpenプロシージャに、リストボックスに値を入れるためのコードを記述する必要があります。このプロシージャは、ユーザーがワークブックを開くたびに実行されます。以下がそのコードです。
With Sheet1.lstListBox
.AddItem "ジョン"
.AddItem "マイケル"
.AddItem "ジェニファ"
.AddItem "リリー"
.AddItem "ロバート"
End With
画像 3 でわかるように、リストボックスに 5 人の名前 (John, Michael, Jennifer, Lilly, Robert) を入力しました。
画像3.VBAでリストボックスに値を入れる
セル範囲からリストボックスに入力する
リストボックスへの入力は、ユーザーが行うことも可能です。リストボックスはセル範囲にリンクすることができます。したがって、ユーザーがセル範囲に新しい値を入力するたびに、リストボックスはその値で更新されます。 この機能を有効にするには、リストボックスのプロパティで ListFillRange 属性を設定する必要があります。
画像4.セル範囲からリストボックスに値を入れる
リストボックスを E2:E5 の範囲にリンクし、そこに必要な名前(ネイサン、ハリー、ジョージ、ロベルタ)を入力しました。その結果、リストボックスにこれらの名前が入力されるようになりました。
VBAでリストボックスの選択された項目を取得する
リストボックスの目的は、ユーザーの選択肢を取得することです。ユーザーによって選択された値を取得するには、次のコードを使用する必要があります。
Dim strSelectedItem As Variant
strSelectedItem = Sheet1.lstListBox.Value
ユーザーが選択した項目は、Sheet1.lstListboxオブジェクトのValueという属性にあります。この値が変数strSelectedItemに代入されています。
画像5.VBAでリストボックスから選択した値を取得する
リストボックスでハリーを選択し、プロシージャを実行しました。画像5でわかるように、strSelectedItemの値は、選択した値であるハリーになっています。さらに、この変数をコード内で処理することができます。
リストボックスのクリア
VBAでリストボックスをクリアするには、Sheet1.lstListBoxオブジェクトのClearメソッドを使用する必要があります。これは、リストボックスからすべての項目を削除します。以下は、そのコードです。
Sheet1.lstListBox.Clear
このコードを実行すると、空のリストボックスが表示されます。
(ただし、ListFillRange属性を設定されている場合はこのコードによってクリアされず、エラーが発生します。)
画像6.リストボックスをクリアする
ユーザーフォームでリストボックスを使用する
前述したように、リストボックスはユーザーフォームの中で使われることがほとんどです。その方法を説明するために、まず、ユーザーフォームを挿入します。VBAエディタで、モジュール名を右クリックし、挿入、ユーザーフォームを選択します。
画像7.ユーザーフォームを挿入する
挿入のためのコントロールを表示するには、ツールボックスを有効にする必要があります。これを行うには、ツールバーのツールボックスのアイコンをクリックします。すると、利用可能なすべてのコントロールが表示されたウィンドウが表示されます。リストボックスをクリックすると、ユーザーフォームにリストボックスを作成することができます。
画像8.ユーザーフォームにリストボックスを挿入する
リストボックスの名前をlstListBoxとします。これに値を入れるには、以下のコードをオブジェクトUserFormの Initializeメソッドに記述する必要があります。
Private Sub UserForm_Initialize()
With UserForm1.lstListBox
.AddItem "ジョン"
.AddItem "マイケル"
.AddItem "ジェニファ"
.AddItem "リリー"
.AddItem "ロバート"
End With
End Sub
このコードは、ユーザーがユーザーフォームを実行し、リストボックスにこれら5つの名前を入力するたびにトリガーされます。
画像9.ユーザーフォームに値を含むリストボックス
リストボックスから選択された値を取得する場合は、先に説明したワークシートのリストボックスと同じロジックを使用する必要があります。