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
ユーザーフォームを表示すると、リストボックスが表示されます。リストボックスのいずれかの項目をクリックして選択したあと、コマンドボタンをクリックすると、選択している項目の 1 列目の値を取得してメッセージボックスで表示します。
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
ユーザーフォームを表示すると、リストボックスが表示されます。リストボックスのいずれかの項目をクリックして選択したあと、コマンドボタンをクリックすると、選択している項目の 2 列目の値を取得してメッセージボックスで表示します。
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
ユーザーフォームを表示すると、リストボックスが表示されます。リストボックスのいずれかの項目をクリックして選択したあと、コマンドボタンをクリックすると、選択している項目の 1 列目と 2 列目の値を取得してメッセージボックスで表示します。
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
ユーザーフォームを表示すると、リストボックスが表示されます。リストボックスのいずれかの項目をクリックして選択したあと、コマンドボタンをクリックすると、選択しているすべての項目の 2 列目の値を取得してラベルに表示します。
-- --
Excel の VBA を使ってリストボックスで選択された項目を取得する方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。