ユーザーフォームのリストボックスで選択されている値を取得するVBAコードをご紹介します。
- 選択された値を取得したい
- 選択内容をセルに書き込みたい
- 複数選択された値をまとめて処理したい
このような場合は、リストボックスの選択値をVBAで取得することで解決できます。
フォーム入力を活用するうえで必須のテクニックです。
この記事では、リストボックスの選択値を取得する方法を初心者向けに分かりやすく解説します。
この記事でできること
- 選択された値を取得できる
- 選択内容をExcelに反映できる
- 複数選択にも対応できる
- 実務で使えるコードが分かる
基本:選択された値を取得する方法
一番シンプルなコードはこちらです。
Private Sub CommandButton1_Click()
Dim val As String
val = Me.ListBox1.Value
MsgBox "選択された値:" & val
End Sub
これで、現在選択されている値を取得できます。
Valueプロパティとは?
ListBox1.Value は、選択されている項目の値を取得するプロパティです。
- 単一選択の場合に使用
- 選択された1件の値を返す
ListIndexで選択位置を取得する
選択されている位置(何番目か)を取得する方法です。
Dim idx As Long
idx = Me.ListBox1.ListIndex
MsgBox "選択位置:" & idx
ポイント:
- 0 → 1番目
- -1 → 未選択
ListIndexから値を取得する方法
ListIndexを使って値を取得することもできます。
Dim val As String
If Me.ListBox1.ListIndex <> -1 Then
val = Me.ListBox1.List(Me.ListBox1.ListIndex)
End If
選択された値をセルに書き込む
実務でよく使うパターンです。
Private Sub CommandButton1_Click()
Worksheets("Sheet1").Range("A1").Value = Me.ListBox1.Value
End Sub
未選択チェックを行う
エラー防止のために必須です。
If Me.ListBox1.ListIndex = -1 Then
MsgBox "項目を選択してください。", vbExclamation
Exit Sub
End If
複数選択された値を取得する方法
複数選択(MultiSelect)の場合はこちらです。
Private Sub CommandButton1_Click()
Dim i As Long
Dim result As String
For i = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.Selected(i) Then
result = result & Me.ListBox1.List(i) & vbCrLf
End If
Next i
MsgBox "選択された値:" & vbCrLf & result
End Sub
ポイント:
Selected(i)で選択状態を判定- 複数の値をまとめて取得可能
2列以上の場合の値取得
複数列のリストボックスでは、列を指定して取得します。
Dim id As String
Dim name As String
id = Me.ListBox1.Column(0)
name = Me.ListBox1.Column(1)
選択変更時に処理する方法
選択が変わった瞬間に処理したい場合はこちらです。
Private Sub ListBox1_Click()
MsgBox "現在の選択:" & Me.ListBox1.Value
End Sub
実務での活用例
- 選択したデータをExcelに反映
- 複数選択による一括処理
- 検索結果から対象を選択
- 項目選択による処理分岐
リストボックスは「一覧+選択」の場面で非常に便利です。
よくあるエラーと対処法
① 値が取得できない
何も選択されていない可能性があります。
② ListIndexが-1になる
未選択状態です。チェックを入れてください。
③ 複数選択でValueが使えない
複数選択の場合は Selected(i) を使います。
④ コードは正しいのにエラーになる
コピー時に全角文字や特殊文字が混ざることがあります。
その場合は該当行を手入力し直すと解決することがあります。
まとめ
- 単一選択は
Value - 位置は
ListIndex - 複数選択は
Selected(i) - 未選択チェックは必須
リストボックスの選択値を取得できるようになると、ユーザーフォームの活用範囲が一気に広がります。
入力データを元に処理を分けるなど、実務でも非常に重要なスキルなので、ぜひ使いこなしてみてください。


コメント