VBA リストボックス

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

masahiro yoshida

Last updated on 4月 25, 2022

このチュートリアルでは、VBAを使用してリストボックスを操作する方法を説明します。

VBAでは、リストボックスを作成することができます。 リストボックスを作成すると、ユーザーは、リストされたオプションの中から1つを選択することができます。リストボックスはユーザーフォームでよく使用されますが、ワークシートでも使用できます。このチュートリアルでは、リストボックスの作成、入力、削除の方法について学習します。また、VBAでユーザーの選択肢を取得し、それをコードで使用する方法についても説明します。

コンボボックスの作成方法を学びたい場合は、こちらをご覧ください → VBA コンボボックス

チェックボックスの作成方法を学びたい場合は、こちらをご覧ください → VBA チェックボックス

リストボックスを作成する

ワークシートにリストボックスを挿入するためには、メニューから 開発タブをクリックし、コントロールグループの、ActiveX コントロールにあるリストボックスを選択します。

vba insert listbox リストボックス 挿入

画像1.ワークシートへのリストボックスの挿入

挿入したリストボックスを選択すると、開発タブの プロパティをクリックすることができます。

vba listbox properties リストボックス プロパティ

画像2.リストボックスのプロパティを変更する

ここでは、リストボックスのさまざまなプロパティを設定することができます。まず、オブジェクト名lstListBox に変更しました。これで、VBAのコードでこの名前のリストボックスが使えるようになります。

VBA コードでリストボックスに値を入力する

まず、リストボックスに値を入力する必要があります。ほとんどの場合、リストボックスはワークブックを開いたときに値を入力する必要があります。このため、WorkbookオブジェクトのOpenプロシージャ、リストボックスに値を入れるためのコードを記述する必要があります。このプロシージャは、ユーザーがワークブックを開くたびに実行されます。以下がそのコードです。

With Sheet1.lstListBox

    .AddItem "ジョン"
    .AddItem "マイケル"
    .AddItem "ジェニファ"
    .AddItem "リリー"
    .AddItem "ロバート"

End With

画像 3 でわかるように、リストボックスに 5 人の名前 (John, Michael, Jennifer, Lilly, Robert) を入力しました。 vba populate listbox in vba リストボックス

画像3.VBAでリストボックスに値を入れる

セル範囲からリストボックスに入力する

リストボックスへの入力は、ユーザーが行うことも可能です。リストボックスはセル範囲にリンクすることができます。したがって、ユーザーがセル範囲に新しい値を入力するたびに、リストボックスはその値で更新されます。 この機能を有効にするには、リストボックスのプロパティで ListFillRange 属性を設定する必要があります。

vba populate listbox from cells range リストボックス セル範囲

画像4.セル範囲からリストボックスに値を入れる

リストボックスを E2:E5 の範囲にリンクし、そこに必要な名前(ネイサン、ハリー、ジョージ、ロベルタ)を入力しました。その結果、リストボックスにこれらの名前が入力されるようになりました。

VBAでリストボックスの選択された項目を取得する

リストボックスの目的は、ユーザーの選択肢を取得することです。ユーザーによって選択された値を取得するには、次のコードを使用する必要があります。

Dim strSelectedItem As Variant

strSelectedItem = Sheet1.lstListBox.Value

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

vba listbox get selected value リストボックス 値 取得

画像5.VBAでリストボックスから選択した値を取得する

リストボックスでハリーを選択し、プロシージャを実行しました。画像5でわかるように、strSelectedItemの値は、選択した値であるハリーになっています。さらに、この変数をコード内で処理することができます。

リストボックスのクリア

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

Sheet1.lstListBox.Clear

このコードを実行すると、空のリストボックスが表示されます。
(ただし、ListFillRange属性を設定されている場合はこのコードによってクリアされず、エラーが発生します。)

vba clear listbox リストボックス クリア

画像6.リストボックスをクリアする

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

前述したように、リストボックスはユーザーフォームの中で使われることがほとんどです。その方法を説明するために、まず、ユーザーフォームを挿入します。VBAエディタで、モジュール名を右クリックし、挿入ユーザーフォームを選択します。

vbalistbox insert in userform ユーザーフォーム リストボックス

画像7.ユーザーフォームを挿入する

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

vba insert listbox in userform ユーザーフォーム リストボックス

画像8.ユーザーフォームにリストボックスを挿入する

リストボックスの名前をlstListBoxとします。これに値を入れるには、以下のコードをオブジェクトUserFormの Initializeメソッドに記述する必要があります。

Private Sub UserForm_Initialize()
    
    With UserForm1.lstListBox

        .AddItem "ジョン"
        .AddItem "マイケル"
        .AddItem "ジェニファ"
        .AddItem "リリー"
        .AddItem "ロバート"

    End With

End Sub

このコードは、ユーザーがユーザーフォームを実行し、リストボックスにこれら5つの名前を入力するたびにトリガーされます。

vba listbox in userform ユーザーフォーム リストボックス

画像9.ユーザーフォームに値を含むリストボックス

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

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