ユーザーフォームとコンボボックスの値の取得

VBA
スポンサーリンク

コンボボックスの値の取得方法を紹介します。

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

VBAユーザーフォームとコンボボックス
ExcelVBAのユーザーフォームにおけるコンボボックスの値の追加方法と初期値の設定方法の基本について紹介しています。

スポンサーリンク
スポンサーリンク

コンボボックスの値の取得

コンボボックスの項目の中から選択された値を取得します。

活用例としては、下図のようにコンボボックスで選択した値を取得してセル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プロパティ

次回は、ユーザーフォームを使ったレコードの抽出方法を紹介します!

コメント

タイトルとURLをコピーしました