ユーザーフォームのコンボボックスで選択されている値を取得するVBAコードをご紹介します。
- 選択された値を取得したい
- 選択内容によって処理を変えたい
- 入力内容をセルに書き込みたい
このような場合は、コンボボックスの選択値をVBAで取得することで解決できます。
フォーム入力を活用した処理を作るための、非常に重要な基本テクニックです。
この記事では、コンボボックスで現在選択されている値を取得する方法を初心者向けに分かりやすく解説します。
この記事でできること
- コンボボックスの選択値を取得できる
- 選択内容で処理を分岐できる
- セルへ値を書き込める
- 実務で使えるコードが分かる
基本:選択されている値を取得する方法
一番基本のコードはこちらです。
Private Sub CommandButton1_Click()
Dim val As String
val = Me.ComboBox1.Value
MsgBox "選択された値:" & val
End Sub
これで、現在選択されている値を取得できます。
Valueプロパティとは?
ComboBox1.Value は、現在選択されている項目の値を取得するプロパティです。
例えば、リストが次のような場合:
- 未処理
- 進行中
- 完了
「進行中」を選んでいれば、「進行中」という文字列が取得されます。
選択された値をセルに書き込む
実務では、選択された値をExcelに反映することが多いです。
Private Sub CommandButton1_Click()
Worksheets("Sheet1").Range("A1").Value = Me.ComboBox1.Value
End Sub
これで、選択値がA1セルに書き込まれます。
未選択チェックを行う
何も選択されていない場合の対策も重要です。
If Me.ComboBox1.Value = "" Then
MsgBox "項目を選択してください。", vbExclamation
Exit Sub
End If
ListIndexを使って取得する方法
選択位置(何番目か)を取得する場合はこちらです。
Dim idx As Long
idx = Me.ComboBox1.ListIndex
MsgBox "選択位置:" & idx
ポイント:
- 0 → 1番目
- 1 → 2番目
- -1 → 未選択
ListIndexを使って値を取得する
ListIndexと組み合わせる方法です。
Dim val As String
If Me.ComboBox1.ListIndex <> -1 Then
val = Me.ComboBox1.List(Me.ComboBox1.ListIndex)
End If
選択内容で処理を分岐する
選択された値によって処理を変える例です。
Select Case Me.ComboBox1.Value
Case "未処理"
MsgBox "未処理を選択しました"
Case "進行中"
MsgBox "進行中です"
Case "完了"
MsgBox "完了しています"
End Select
このパターンは実務でよく使います。
変更されたタイミングで処理する
選択が変わった瞬間に処理したい場合はこちらです。
Private Sub ComboBox1_Change()
MsgBox "現在の選択:" & Me.ComboBox1.Value
End Sub
実務での活用例
- ステータス選択による処理分岐
- 入力内容のExcel反映
- 検索条件の指定
- 入力フォームの制御
コンボボックスの値取得は、フォーム処理の基本です。
よくあるエラーと対処法
① 値が取得できない
コンボボックスに何も選択されていない可能性があります。
② ListIndexが-1になる
未選択状態です。チェックを入れてください。
③ コードは正しいのにエラーになる
コピー時に全角文字や特殊文字が混ざることがあります。
その場合は該当行を手入力し直すと解決することがあります。
まとめ
- 選択値は
ComboBox.Valueで取得 - 位置は
ListIndex - 未選択チェックは必須
- 分岐処理と組み合わせると実務で活躍
コンボボックスの選択値を取得できるようになると、ユーザーフォームの活用範囲が一気に広がります。
入力内容を元に処理を分けるなど、実務でも非常に重要なスキルなので、ぜひ使いこなしてみてください。


コメント