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

スポンサーリンク

リストボックスで選択されたリストの値を取得する方法

選択されているリストの値を取得するには、まずListBox【リストボックス】コントロールオブジェクトのListIndex【リストインデックス】プロパティで選択されている行位置を取得します。次に、取得した選択されている値の行位置をたよりにListBox【リストボックス】コントロールオブジェクトのList【リスト】プロパティを使用してリストボックスのリストの値を取得します。

ListIndex【リストインデックス】プロパティ

リストボックスで選択されているリストの行位置を取得するには、ListBox【リストボックス】コントロールオブジェクトのListIndex【リストインデックス】プロパティを使用します。

ListIndex【リストインデックス】が返す値はリストの先頭行を「0」として、上から順番に数えた行番号です。リストが選択されていないときは「-1」を返すのでこれを利用すると項目が選択されているかどうかを調べることができます。値の取得と設定ができます。

ListIndex【リストインデックス】プロパティの書式と設定値の説明

【取得】
オブジェクト.ListIndex
【設定】
オブジェクト.ListIndex = 設定値

  • オブジェクト(必須)
    対象となるListBox【リストボックス】コントロールオブジェクトの「オブジェクト名」を指定します。
  • 設定値(必須)
    リストボックスを表示したときに選択状態にしておきたい行番号をリストの先頭行を「0」として上から数えた数値で指定します。

※複数行選択できるリストボックスで選択されている行を調べるにはSelected【セレクティッド】プロパティを使用します。


List【リスト】プロパティ

リストボックスの項目の値を取得するには、ListBox【リストボックス】コントロールオブジェクトのList【リスト】プロパティを使用します。値の取得と設定ができます。

List【リスト】プロパティの書式と設定値の説明

【取得】
オブジェクト.List( pvargIndex, pvargColumn )
【設定】
オブジェクト.List( pvargIndex, pvargColumn ) = 設定値

  • オブジェクト(必須)
    対象となるListBox【リストボックス】コントロールオブジェクトの「オブジェクト名」を指定します。
  • pvargIndex【ピイブイアーグインデックス】(省略可)
    値を取得または設定したい行位置を指定します。指定する値は先頭行を「0」として上から順番に数えた数値です。省略した場合は先頭行を表す「0」が設定されます。
  • pvargColumn【ピイブイアーグカラム】(省略可)
    値を取得または設定したい列位置を指定します。指定する値はリストの左端列を「0」として左から順番に数えた数値です。省略した場合は先頭列を表す「0」が設定されます。
  • 設定値(必須)
    リストボックスの項目に追加したい値を設定します。

リストボックスの選択したリストを取得する例


リストボックスにリストを登録するには「リストボックスにセル範囲のデータを設定する」をご覧ください。

コードと解説

Private Sub CommandButton1_Click()
With ListBox1
  If .ListIndex = -1 Then
      MsgBox "未選択です。"
  Else
      MsgBox .List(.ListIndex, 0)
  End If
End With
End Sub
1行目【Private Sub CommandButton1_Click()】
「CommandButton1」ボタンがクリックされたときに発生する「CommandButton1_Click」イベントプロシージャにコードを記述します。


2行目【With ListBox1】
ListBox【リストボックス】コントロールオブジェクトを表すListBox1オブジェクトをWith【ウィズ】ステートメントで指定します。


3行目【If .ListIndex = -1 Then】
If【イフ】ステートメント(条件分岐)を使用して、ListIndex【リストインデックス】の値が‐1のとき
すなわち、「リストが選択されていないとき」を定義します。


4行目【 MsgBox “未選択です。”】
3行目の条件分岐で条件が成立したとき(リストが選択されていないとき)
MsgBox【メッセージボックス】関数を使用してリストが選択されていないことをユーザーに伝えます。


5行目~6行目【Else
MsgBox .List(.ListIndex, 0)】

Else【エルズ】ステートメントを使用して3行目の条件分岐が成立しなかったとき(リストが選択されているとき)の処理をします。List【リスト】プロパティを使用して、値を取得する行位置を設定する引数pvargIndexにLiseIndex【リストインデックス】プロパティを使用して選択されている
行番号を設定し値を取得する列位置を設定する引数pvargcolumnにリストの1列目を表「0」を設定してMsgBox【メッセージボックス】関数を使用して取得した値を表示します。


実行結果


リストボックスから選択した値をセルに代入するコードと解説

Private Sub CommandButton1_Click()
With ListBox1
  If .ListIndex = -1 Then
      MsgBox "未選択です。"
  Else
    Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = .List(.ListIndex, 0)
  End If
End With
End Sub
6行目【Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = .List(.ListIndex, 0)】
アクティブシートのA列のセルをRows.Countプロパティで最終セルを参照しEnd【エンド】プロパティを使用して引数にXlUpを使用して上方向に値が入力されているの終端セルを参照し、OffSet【オフセット】プロパティで値が入力されている終端セルの一つ下のセルを参照して、ListBox【リストボックス】コントロールオブジェクトのList【リスト】プロパティで取得した値を代入します。

実行結果


リストボックスのプロパティ一覧は「リストボックスのプロパティ」をご覧ください。
リストボックスにリストを設定するには「リストボックスにセル範囲のデータを設定する」をご覧ください。


以上で、リストボックスで選択されたリストの値を取得する方法についての解説を終了します。ありがとうございました。

スポンサーリンク

関連記事・広告