4-6 選択項目を取得する・VLOOKUP関数のように使用するコンボボックス 2021.11.16
次の書籍の第1章~5章を公開しています。
「Excel VBA 逆引きで学ぶ ユーザーフォーム&コントロール」
リストで選択した項目を取得するには3つの方法があります。
・Listプロパティから取得
・Valueプロパティから取得
・Textプロパティから取得
1次元配列からの取得
1次元配列のリストにおいて、各プロパティでの値の取得は次のようになります。
■サンプルコード
フォームをクリックすると、選択項目を各プロパティで取得する
Private Sub UserForm_Click() With ComboBox1 If .ListIndex = -1 Then Exit Sub '選択されていなければ終了 MsgBox .List(.ListIndex) MsgBox .Value MsgBox .Text End With End Sub
2次元配列からの取得
2次元配列のリストで、選択項目の任意の列の値を取得するには、ListプロパティかBoundColumプロパティを利用します。
例えば「Sheet1」シートのセル範囲[A1:B7]に次の値が設定されているとします。
RowSouceプロパティに、このセル範囲を設定します。
Listプロパティで2列目の値を取得するには次のように記述します。
■サンプルコード
フォームをクリックすると、選択した項目の2列目の値を取得(ListIndexは0からはじまるため2列目は「1」)
Private Sub UserForm_Click() With ComboBox1 If .ListIndex = -1 Then Exit Sub '選択されていなければ終了 MsgBox .List(.ListIndex, 1) End With End Sub
BoundColumプロパティは、ワークシート関数のVLOOKUPのように、選択したリスト(行)の任意の列の値を、Valueプロパティに割り当てます。
BoundColumプロパティに設定できる値は次です。
・0:ListIndexプロパティの値を割り当てる
・1以上の整数(既定):指定した列を割り当てる
BoundColumnプロパティに「2」を設定します。
BoundColumnプロパティを設定し、Valueプロパティで値を取得すると、選択したリスト(行)のBoundColumnで指定した列の値が返ります。
■サンプルコード
Private Sub CommandButton1_Click() MsgBox ComboBox1.Value End Sub
なおListプロパティやTextプロパティを用いることで、別の列の値も併せて取得できます。
■サンプルコード
Private Sub CommandButton1_Click() MsgBox "選択した値:" & ComboBox1.Text & vbLf & _ "該当列の値:" & ComboBox1.Value End Sub
TextBoxコントロールやRefEditコントロールは、TextプロパティとValueプロパティの値がリンクしていますが、ComboBoxコントロールやListBoxコントロールでは、前述のような使い方をするため、TextプロパティとValueプロパティの値が必ずしも一致するわけではないため注意が必要です。
書籍紹介140以上のサンプルファイル付き!
知りたいがすぐわかる! やりたいがすぐできる!
「Excel VBA 逆引きで学ぶ ユーザーフォーム&コントロール」(Kindle版)
ユーザーフォームを扱えると、VBAでできることが大きく広がります!
本書では、知りたいこと、やりたいことから、逆引きで学びを深められます。
■ 購入:amazon