トップ > 逆引きで学ぶ ユーザーフォーム&コントロール > 5-6 選択項目を取得する・VLOOKUP関数のように使用する

5-6 選択項目を取得する・VLOOKUP関数のように使用するリストボックス

次の書籍の第1章~5章を公開しています。
「Excel VBA 逆引きで学ぶ ユーザーフォーム&コントロール」

目次  前頁   次頁  索引

リストで選択した項目を取得するには3つの方法があります。
 ・Listプロパティから取得
 ・Valueプロパティから取得
 ・Textプロパティから取得


1次元配列からの取得

1次元配列のリストにおいて、各プロパティでの値の取得は次のようになります。

■サンプルコード
フォームをクリックすると、選択項目を各プロパティで取得する

Private Sub UserForm_Click()
    With ListBox1
        If .ListIndex = -1 Then Exit Sub '選択されていなければ終了
        MsgBox .List(.ListIndex)
        MsgBox .Value
        MsgBox .Text
    End With
End Sub

2次元配列からの取得

2次元配列のリストで、選択項目の任意の列の値を取得するには、ListプロパティかBoundColumプロパティを利用します。

例えば「Sheet1」シートのセル範囲[A1:D8]に次の値が設定されているとします。


RowSouceプロパティに、見出しを除くセル範囲[A2:D8]を設定します。


Listプロパティで2列目の値を取得するには次のように記述します。

■サンプルコード
フォームをクリックすると、選択した項目の2列目の値を取得(ListIndexは0からはじまるため2列目は「1」)

Private Sub UserForm_Click()
    With ListBox1
        If .ListIndex = -1 Then Exit Sub '選択されていなければ終了
        MsgBox .List(.ListIndex, 1)
    End With
End Sub

BoundColumプロパティは、ワークシート関数のVLOOKUPのように、選択した行の任意の列の値をValueプロパティに割り当てます。
BoundColumプロパティに設定できる値は次です。
 ・0:ListIndexプロパティの値を割り当てる
 ・1以上の整数(既定):指定した列を割り当てる

BoundColumnプロパティに「4(列目)」を設定します。
(あわせてColumnCountに「4」を設定し、リストボックスの表示を4列にします。)


BoundColumnプロパティを設定し、Valueプロパティで値を取得すると、選択したリスト(行)のBoundColumnで指定した列の値が返ります。

■サンプルコード

Private Sub CommandButton1_Click()
    MsgBox ListBox1.Value
End Sub



なおListプロパティやTextプロパティを用いることで、別の列の値も併せて取得できます。

■サンプルコード

Private Sub CommandButton1_Click()
    MsgBox "選択した値:" & ListBox1.Text & vbLf & _
           "該当列の値:" & ListBox1.Value
End Sub



TextBoxコントロールやRefEditコントロールは、TextプロパティとValueプロパティの値がリンクしていますが、ComboBoxコントロールやListBoxコントロールでは、前述のような使い方をするため、TextプロパティとValueプロパティの値が必ずしも一致するわけではないため注意が必要です。


書籍紹介140以上のサンプルファイル付き!

知りたいがすぐわかる! やりたいがすぐできる!
「Excel VBA 逆引きで学ぶ ユーザーフォーム&コントロール」(Kindle版)
ユーザーフォームを扱えると、VBAでできることが大きく広がります!
本書では、知りたいこと、やりたいことから、逆引きで学びを深められます。

■ 購入:amazon

ページトップへ戻る
Copyright(C) 2009- 坂江 保 All Rights Reserved.