教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

【ExcelVBA フォーム&コントロール】リストボックスで選択されているデータをセルに入力する方法を教えて!

構文

構文は以下の通りです。

' 選択されたデータのインデックスを取得
リストボックス名.ListIndex
' リストボックスの中から選択されたデータを取得
リストボックス名.List(行, 列)

解説

リストボックスで選択されている行位置を取得するには、ListIndexプロパティを使用します。ListIndexプロパティが返す値は、リストの先頭行を「0」として上から数えた行位置を表す数値となります。また、ListIndexプロパティは、リストボックスで何も選択されていない状態では「-1」を返します。この性質を利用して、リストボックス上でデータが選択されているか否かを判定する事ができます。

リストボックスから行位置や列位置を指定してデータを取得するには、Listプロパティを使用します。引数の行には行位置、列には列位置を指定します。行に指定する値は、リストの先頭行を「0」として上から数えた行位置を表す数値となります。また、列にはリストの左端を「0」として左から数えた列位置を表す数値となります。

これらのListIndexプロパティとListプロパティを組み合わせて使用する事で、リストボックスで選択されているデータをセルに入力する事が可能です。

使い方

リストボックスで選択されたデータを取得する基本的な構文は以下の通りです。

Dim selectedIndex As Integer
selectedIndex = ListBox1.ListIndex

ここで ListBox1.ListIndex には選択されたアイテムのインデックスが格納されます。そして、このインデックスを使ってリストからデータを取得します。

Dim selectedData As String
selectedData = ListBox1.List(selectedIndex, 1)

ここで ListBox1.List(selectedIndex, 1) は、選択されたアイテムの1列目のデータを取得します。ListBox1.List の第1引数が行のインデックスで、第2引数が列のインデックスです。

プログラミング例

以下に、プログラミング例を紹介します。

Private Sub CommandButton1_Click()
    If ListBox1.ListIndex <> -1 Then
        Dim selectedData As String
        selectedData = ListBox1.List(ListBox1.ListIndex, 1)
        Range("A1").Value = selectedData
    Else
        MsgBox "リストからデータを選択してください。", vbExclamation
    End If
End Sub

この例では、もしリストボックスで何も選択されていない場合はメッセージボックスが表示され、そうでない場合は選択されたデータがセル A1 に入力されます。

まとめ

リストボックスのデータ取得とセルへの入力は、効率的で生産的な作業をサポートしてくれるため、是非積極的に活用してみてください。