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

Excel のユーザーフォーム上でリストボックス(ListBox)コントロールを設置したあと、 VBA を使ってリストボックスで現在選択されている項目を取得することができます。ここでは Excel の VBA を使ってリストボックスで選択された項目を取得する方法について解説します。

※ リストボックスを作成し項目を追加する方法については「VBAを使ったリストボックスの作成と項目の追加および削除」を参照されてください。

(Last modified: )

Textプロパティを使って選択項目を取得する

リストボックスで選択されている項目を取得する方法を 4 つ紹介します。まず一つ目です。

リストボックスの Text プロパティの値を取得すると、現在選択されている項目の 1 列目の値を取得することができます。

オブジェクト.Text

Text プロパティの場合は 1 列目の値しか取得することができません。またリストボックスが選択されていない場合は Text プロパティの値は Null になります。

具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャにコードを記述し、リストボックスに 5 個の項目を追加しています。そしてコマンドボタンをがクリックされたときに、現在選択している項目の 1 列目の値を取得してメッセージボックスに表示します。

Option Explicit

Private Sub UserForm_Initialize()
    Dim i As Integer

    For i = 0 To 4
        ListBox1.AddItem i
        ListBox1.List(i, 1) = "項目" & i
    Next i

    ListBox1.ColumnCount = 2
    ListBox1.ColumnWidths = "20;50"
End Sub

Private Sub CommandButton1_Click()
    Dim var As Variant

    var = ListBox1.Text

    If IsNull(var) Then
        MsgBox "選択されていません"
    Else
        MsgBox var
    End If
End Sub

Textプロパティを使って選択項目を取得する(1)

Textプロパティを使って選択項目を取得する(2)

ユーザーフォームを表示すると、リストボックスが表示されます。リストボックスのいずれかの項目をクリックして選択したあと、コマンドボタンをクリックすると、選択している項目の 1 列目の値を取得してメッセージボックスで表示します。

Textプロパティを使って選択項目を取得する(3)

ValueとBoundColumnプロパティを使って選択項目を取得する

リストボックスの Value プロパティの値を取得すると、現在選択されている項目の値を取得することができます。このとき何列目の値を取得するかは BoundColumn プロパティに設定されている数値の列の値を取得します。

オブジェクト.Value
オブジェクト.BoundColumn

BoundColumn プロパティには列数を指定します。列数は最初の列が 1 、次の列が 2 のようになっています。デフォルトの値は 1 です。

リストボックスが選択されていない場合は Value プロパティの値は Null になります。

具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャにコードを記述し、リストボックスに 5 個の項目を追加しています。そしてコマンドボタンをがクリックされたときに、現在選択している項目の 2 列目の値を取得してメッセージボックスに表示します( BoundColumn プロパティに 2 を設定しているため)。

Option Explicit

Private Sub UserForm_Initialize()
    Dim i As Integer

    For i = 0 To 4
        ListBox1.AddItem i
        ListBox1.List(i, 1) = "項目" & i
    Next i

    ListBox1.ColumnCount = 2
    ListBox1.ColumnWidths = "20;50"
End Sub

Private Sub CommandButton1_Click()
    Dim var As Variant

    ListBox1.BoundColumn = 2
    var = ListBox1.Value

    If IsNull(var) Then
        MsgBox "選択されていません"
    Else
        MsgBox var
    End If
End Sub

ValueとBoundColumnプロパティを使って選択項目を取得する(1)

ValueとBoundColumnプロパティを使って選択項目を取得する(2)

ユーザーフォームを表示すると、リストボックスが表示されます。リストボックスのいずれかの項目をクリックして選択したあと、コマンドボタンをクリックすると、選択している項目の 2 列目の値を取得してメッセージボックスで表示します。

ValueとBoundColumnプロパティを使って選択項目を取得する(3)

ListIndexとListプロパティを使って選択項目を取得する

リストボックスの ListIndex プロパティの値を取得すると、現在選択されている項目のインデックスを取得することができます。インデックスは先頭の項目が 0 、次の項目が 1 のようになります。

オブジェクト.ListIndex

リストボックスが選択されていない場合は ListIndex プロパティは -1 を返します。

リストボックスで行と列を指定して値を取得するには List プロパティを使用します。

オブジェクト.List(row, column)

現在選択されている項目の値を取得するには List プロパティの 1 番目の引数に ListIndex プロパティの値を参照して取得したインデックスを指定し、 2 番目の引数に取得したい列数を指定します。 1 列目の値を取得したい場合は 1 を指定します。

具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャにコードを記述し、リストボックスに 5 個の項目を追加しています。そしてコマンドボタンをがクリックされたときに、現在選択している項目の 1 列目の値と 2 列目の値を取得してメッセージボックスに表示します。

Option Explicit

Private Sub UserForm_Initialize()
    Dim i As Integer

    For i = 0 To 4
        ListBox1.AddItem i
        ListBox1.List(i, 1) = "項目" & i
    Next i

    ListBox1.ColumnCount = 2
    ListBox1.ColumnWidths = "20;50"
End Sub

Private Sub CommandButton1_Click()
    Dim index As Integer

    index = ListBox1.ListIndex

    If index = -1 Then
        MsgBox "選択されていません"
    Else
        MsgBox ListBox1.List(index, 0) & " : " & ListBox1.List(index, 1)
    End If
End Sub

ListIndexとListプロパティを使って選択項目を取得する(1)

ListIndexとListプロパティを使って選択項目を取得する(2)

ユーザーフォームを表示すると、リストボックスが表示されます。リストボックスのいずれかの項目をクリックして選択したあと、コマンドボタンをクリックすると、選択している項目の 1 列目と 2 列目の値を取得してメッセージボックスで表示します。

ListIndexとListプロパティを使って選択項目を取得する(3)

Selectedプロパティを使って選択している複数の項目を取得する

リストボックスの Selected プロパティの値を取得すると、指定したインデックスの項目が選択されているかどうかを「True」または「False」の値として取得できます。特にリストボックスで複数の項目を同時に選択できるように設定している場合に、この方法を使用します。

オブジェクト.Selected(index) [= Boolean ]

引数のインデックスに選択されているかどうか調べたい項目のインデックスを指定します。インデックスは先頭の項目が 0 、次の項目が 1 と続いていきます。

具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャにコードを記述し、リストボックスに 5 個の項目を追加しています。リストボックスは MultiSelect プロパティを使って複数の項目を同時に選択可能に設定してあります。そしてコマンドボタンをがクリックされたときに、現在選択しているすべての項目の 2 列目の値を取得してラベルに表示します。

Private Sub UserForm_Initialize()
    Dim i As Integer

    For i = 0 To 4
        ListBox1.AddItem i
        ListBox1.List(i, 1) = "項目" & i
    Next i

    ListBox1.ColumnCount = 2
    ListBox1.ColumnWidths = "20;50"
    ListBox1.MultiSelect = fmMultiSelectMulti
    Label1.Caption = ""
End Sub

Private Sub CommandButton1_Click()
    Dim msg As String
    Dim i As Integer

    For i = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(i) = True Then
            msg = msg & ListBox1.List(i, 1) & " "
        End If
    Next i

    Label1.Caption = msg
End Sub

Selectedプロパティを使って選択している複数の項目を取得する(1)

Selectedプロパティを使って選択している複数の項目を取得する(2)

ユーザーフォームを表示すると、リストボックスが表示されます。リストボックスのいずれかの項目をクリックして選択したあと、コマンドボタンをクリックすると、選択しているすべての項目の 2 列目の値を取得してラベルに表示します。

Selectedプロパティを使って選択している複数の項目を取得する(3)

Selectedプロパティを使って選択している複数の項目を取得する(4)

-- --

Excel の VBA を使ってリストボックスで選択された項目を取得する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。