コンボボックスの値の取得方法を紹介します。
前回はユーザーフォームにおけるコンボボックスの値の設定方法について解説しました。

コンボボックスの値の取得
コンボボックスの項目の中から選択された値を取得します。
活用例としては、下図のようにコンボボックスで選択した値を取得してセルC2に代入するといったような形です。

コマンドボタンの設定
コンボボックスの値を取得するためにコマンドボタンを設置します。
そもそもユーザーフォームの中のコマンドボタン、テキストボックス、コンボボックスなどのコントロールはコントロール自体にVBAコードを仕込んで動かしていきます。
よって、コマンドボタンにコンボボックスの値を取得して出力するコードを仕込んでいきます。
コマンドボタンの設置
「表示」タブ→「ツールボックス」→コマンドボタンを選択します。

コマンドボタンをダブルクリックしてCommandButton1_Click()イベントプロシージャにコンボボックスで選択した値を取得するコードを記述します。
それでは具体的に値を取得するためのプロパティを3つ紹介します。
Textプロパティ
1つ目はTextプロパティです。
Textプロパティでコンボボックスの値を取得できます。コンボボックスのオブジェクト名はcbごはん変更しています。


Private Sub UserForm_Initialize()
cbごはん.List = Sheets("食べ物").Range("A2:A5").Value 'Valueプロパティは省略不可
End Sub
Private Sub CommandButton1_Click()
Sheets("食べ物").Cells(2, 3) = cbごはん.Text
End Sub
複数列の表示と列指定での取得
コンボボックスに複数の列が設定されている場合、Textプロパティと合わせてTextcolumnプロパティを使って取得する列を指定します。
TextColumnプロパティ・・・取得する列を指定できます。
ColumnCountプロパティ・・・表示する列を指定できます。
Private Sub UserForm_Initialize()
cbごはん.List = Sheets("表").Range("A2:C5").Value 'Valueプロパティは省略不可
cbごはん.TextColumn = 2 '2列目を選択
cbごはん.ColumnCount = 3 '3列表示
End Sub
Private Sub CommandButton1_Click()
MsgBox cbごはん.Text
End Sub


TextColumnプロパティ、ColumnCountプロパティはコード上ではなく、プロパティウィンドウでも設定できます。


Valueプロパティ
2つ目はValueプロパティです。
Valueプロパティでコンボボックスの値を取得します。Valueプロパティと合わせてBoundColumnプロパティを使って取得する列を指定します。
BoundColumnプロパティ・・・取得する列を指定できます。
Private Sub UserForm_Initialize()
cbごはん.List = Sheets("表").Range("A2:C5").Value
cbごはん.BoundColumn = 2
cbごはん.ColumnCount = 3
End Sub
Private Sub CommandButton1_Click()
MsgBox cbごはん.Value
End Sub


TextプロパティとValueプロパティの空欄の処理
TextプロパティとValueプロパティで空欄を選択した時の表示結果が異なります。

Textプロパティは空欄が表示されます。

Valueプロパティはエラーになります。

ListプロパティとListIndexプロパティ
3つ目はListプロパティとListIndexプロパティです。
Listプロパティを使ってコンボボックスの行と列を指定して値を取得します。
オブジェクト.List(row,column)・・・行と列を指定して値を取得
インデックスは0からの連番です。

Private Sub UserForm_Initialize()
cbごはん.List = Sheets("表").Range("A2:C5").Value
End Sub
Private Sub CommandButton1_Click()
MsgBox cbごはん.List(0, 1)
End Sub


ListIndexプロパティ
オブジェクト.ListIndex・・・現在選択されている項目の行位置を取得
ListIndexプロパティは現在選択されている項目の行位置を取得します。
ListプロパティとListIndexプロパティを使ってコンボボックスの値を取得できます。
オブジェクト.List(オブジェクト.ListIndex,column)
Private Sub UserForm_Initialize()
cbごはん.List = Sheets("表").Range("A2:C5").Value
End Sub
Private Sub CommandButton1_Click()
MsgBox cbごはん.List(cbごはん.ListIndex, 1)
End Sub


注意点として、コンボボックスの項目以外で値を直接入力した場合には、ListIndexプロパティの値は-1になりListプロパティでは値を取得することはできません。
予めコンボボックスのプロパティウィンドウのStyleプロパティをfmStyleDropDownListに設定しておくことでリストからの値の選択のみとなり、値の直接入力はできません。


まとめ
コンボボックスの値の取得方法を紹介します。
取得するためのプロパティは以下の3つです。
- Textプロパティ
- Valueプロパティ
- Listプロパティ・ListIndexプロパティ
次回は、ユーザーフォームを使ったレコードの抽出方法を紹介します!
コメント