VBA コンボボックス

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

masahiro yoshida

Last updated on 3月 23, 2022

このチュートリアルでは、VBAでコンボボックスを操作する方法を紹介します。

コンボボックスは、ユーザーがドロップダウンメニューの一覧からオプションを選択できるようにします。コンボボックスは、VBAのユーザーフォームまたはExcelのワークシートで作成することができます。このチュートリアルでは、VBAとExcelワークシートでコンボボックスを作成し操作する方法を学びます。

リストボックスの作成方法を学びたい方は、こちら:VBA リストボックス

チェックボックスの作成方法を学びたい方は、こちら:VBA チェックボックス

Excelワークシートにコンボボックスを作成する

ワークシートにコンボボックスを挿入するために 開発者タブをクリックし、ActiveX Controlsの下にあるCombo Boxを選択します。 vba insert combobox コンボボックス

図1. ワークシートにコンボボックスを挿入する

挿入したComboBoxを選択すると、Developerタブの Propertiesをクリックすることができます。

vba combobox 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)を選択することができます。

vba combobox populate コンボボックス

図3. VBAでコンボボックスに入力する

セル範囲からコンボボックスに入力する

コンボボックスへ入力するもう一つの方法は、ユーザーにそれをさせることです。コンボボックスは、セル範囲にリンクすることができます。このアプローチでは、ユーザーがセル範囲に新しい値を入力するたびに、コンボボックスはその値で更新されます。 これを有効にするには、コンボボックスのプロパティでListFillRange 属性をセル範囲(ここではE2:E5)に設定する必要があります。

vba populate combobox from cells range コンボボックス セル範囲

図4. セル範囲を指定してコンボボックスに入力する

コンボボックスとE2:E5の範囲をリンクし、そこに必要な名前(Nathan, Harry, George, Roberta)を入れています。その結果、ComboBoxにこれらの名前が入力されるようになりました。

vba populated combobox コンボボックス

図5. セル範囲から入力されたコンボボックス

VBAでコンボボックスの選択項目を取得する

コンボボックスの目的は、ユーザーの選択肢を取得することです。ユーザーの選択肢を取得するためには、次のコードを使用する必要があります。

Dim strSelectedItem As Variant

strSelectedItem = Sheet1.cmbComboBox.Value

ユーザーの選択項目はSheet1.cmbComboBoxオブジェクトのValue属性にあります。この値が変数strSelectedItemに代入されています。

vba combobox get selected value コンボボックス 選択した値の取得

図6. VBAでComboBoxから選択した値を取得する

ComboBoxでJuliaを選択し、プロシージャを実行しました。図5でわかるように、strSelectedItemの値は、選択した値であるJuliaになっています。これで、この変数をさらにコード内で処理することができます。

コンボボックスをクリアする

VBAでComboBoxをクリアするには、Sheet1.lstComboBoxオブジェクトのClearメソッドを使用する必要があります。これは、コンボボックスからすべての項目を削除します。以下がそのコードです。

(注) ただし、ClearメソッドはListFillRange属性を削除しないため、Clearメソッドを実行する前にコンボボックスのプロパティから削除しておく必要があります。

Sheet1.cmbComboBox.Clear

このコードを実行すると、空のComboBoxが表示されます。

vba clear combobox

図7.コンボボックスをクリアする

ユーザーフォームでコンボボックスを使用する

前述したように、コンボボックスはユーザーフォームで最もよく使用されます。その方法を説明するために、まず、ユーザーフォームを挿入します。VBAエディタで、モジュール名の上で右クリックし、「モジュール」をクリックします。 挿入 を選択し、ユーザフォームを選択します。

vba combobox insert userform コンボボックス ユーザーフォーム 挿入

図8. ユーザーフォームを挿入する

挿入のためのコントロールを表示するには、ツールボックスを有効にする必要があります。これを行うには、ツールバーのツールボックスのアイコンをクリックします。その後、利用可能なすべてのコントロールのウィンドウが表示されます。コンボボックスをクリックすると、ユーザーフォームにコンボボックスを作成することができます。

vba combobox insert in userform コンボボックス ユーザーフォーム 挿入

図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つの名前が入力されます。

vba combobox in userform コンボボックス ユーザーフォーム

図10. ユーザーフォームに値が表示されたコンボボックス

コンボボックスから選択された値を取得する場合は、先に説明したワークシートのコンボボックスと同じロジックを使用する必要があります。

vba-free-addin

VBA Code Examples Add-in

Easily access all of the code examples found on our site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(No installation required!)

Free Download

Return to VBA Code Examples