VBA コンボボックス
In this Article
このチュートリアルでは、VBAでコンボボックスを操作する方法を紹介します。
コンボボックスは、ユーザーがドロップダウンメニューの一覧からオプションを選択できるようにします。コンボボックスは、VBAのユーザーフォームまたはExcelのワークシートで作成することができます。このチュートリアルでは、VBAとExcelワークシートでコンボボックスを作成し操作する方法を学びます。
リストボックスの作成方法を学びたい方は、こちら:VBA リストボックス
チェックボックスの作成方法を学びたい方は、こちら:VBA チェックボックス
Excelワークシートにコンボボックスを作成する
ワークシートにコンボボックスを挿入するために 開発者タブをクリックし、ActiveX Controlsの下にあるCombo Boxを選択します。
図1. ワークシートにコンボボックスを挿入する
挿入したComboBoxを選択すると、Developerタブの Propertiesをクリックすることができます。
図2. コンボボックスのプロパティを変更する
ここでは、コンボボックスのさまざまなプロパティを設定することができます。まず、属性Nameを cmbComboBoxに変更しました。これで、VBAのコードでこの名前のコンボボックスが使えるようになります。
VBAコードでコンボボックスにデータを入力する
まず、ComboBoxに値を入力する必要があります。ほとんどの場合、コンボボックスはワークブックを開いたときに入力される必要があります。このため、オブジェクトWorkbook、プロシージャOpenに ComboBoxに値を入力するためのコードを配置する必要があります。このプロシージャは、ユーザーがWorkbookを開くたびに実行されます。以下がそのコードです。
With Sheet1.cmbComboBox
.AddItem "John"
.AddItem "Michael"
.AddItem "Jennifer"
.AddItem "Lilly"
.AddItem "Robert"
End With
ドロップダウンメニューをクリックすると、5つの名前(John、Michael、Jennifer、Lilly、Robert)を選択することができます。
図3. VBAでコンボボックスに入力する
セル範囲からコンボボックスに入力する
コンボボックスへ入力するもう一つの方法は、ユーザーにそれをさせることです。コンボボックスは、セル範囲にリンクすることができます。このアプローチでは、ユーザーがセル範囲に新しい値を入力するたびに、コンボボックスはその値で更新されます。 これを有効にするには、コンボボックスのプロパティで、ListFillRange 属性をセル範囲(ここではE2:E5)に設定する必要があります。
図4. セル範囲を指定してコンボボックスに入力する
コンボボックスとE2:E5の範囲をリンクし、そこに必要な名前(Nathan, Harry, George, Roberta)を入れています。その結果、ComboBoxにこれらの名前が入力されるようになりました。
図5. セル範囲から入力されたコンボボックス
VBAでコンボボックスの選択項目を取得する
コンボボックスの目的は、ユーザーの選択肢を取得することです。ユーザーの選択肢を取得するためには、次のコードを使用する必要があります。
Dim strSelectedItem As Variant
strSelectedItem = Sheet1.cmbComboBox.Value
ユーザーの選択項目はSheet1.cmbComboBoxオブジェクトのValue属性にあります。この値が変数strSelectedItemに代入されています。
図6. VBAでComboBoxから選択した値を取得する
ComboBoxでJuliaを選択し、プロシージャを実行しました。図5でわかるように、strSelectedItemの値は、選択した値であるJuliaになっています。これで、この変数をさらにコード内で処理することができます。
コンボボックスをクリアする
VBAでComboBoxをクリアするには、Sheet1.lstComboBoxオブジェクトのClearメソッドを使用する必要があります。これは、コンボボックスからすべての項目を削除します。以下がそのコードです。
(注) ただし、ClearメソッドはListFillRange属性を削除しないため、Clearメソッドを実行する前にコンボボックスのプロパティから削除しておく必要があります。
Sheet1.cmbComboBox.Clear
このコードを実行すると、空のComboBoxが表示されます。
図7.コンボボックスをクリアする
ユーザーフォームでコンボボックスを使用する
前述したように、コンボボックスはユーザーフォームで最もよく使用されます。その方法を説明するために、まず、ユーザーフォームを挿入します。VBAエディタで、モジュール名の上で右クリックし、「モジュール」をクリックします。 挿入 を選択し、ユーザフォームを選択します。
図8. ユーザーフォームを挿入する
挿入のためのコントロールを表示するには、ツールボックスを有効にする必要があります。これを行うには、ツールバーのツールボックスのアイコンをクリックします。その後、利用可能なすべてのコントロールのウィンドウが表示されます。コンボボックスをクリックすると、ユーザーフォームにコンボボックスを作成することができます。
図9.ユーザーフォームにコンボボックスを挿入する
コンボボックスの名前をcmbComboBox とします。これに値を入れるには、以下のコードをオブジェクトUserFormの Initializeメソッドに記述する必要があります。
Private Sub UserForm_Initialize()
With UserForm1.cmbComboBox
.AddItem "John"
.AddItem "Michael"
.AddItem "Jennifer"
.AddItem "Lilly"
.AddItem "Robert"
End With
End Sub
このコードは、ユーザーがユーザーフォームを実行するたびに実行され、コンボボックスにこれら5つの名前が入力されます。
図10. ユーザーフォームに値が表示されたコンボボックス
コンボボックスから選択された値を取得する場合は、先に説明したワークシートのコンボボックスと同じロジックを使用する必要があります。