VBAを使ってコンボボックスで選択された項目や入力された値を取得する

Excel のユーザーフォーム上でコンボボックス(ComboBox)コントロールを設置したあと、 VBA を使ってコンボボックスで現在選択されている項目や入力されている値を取得することができます。ここでは Excel の VBA を使ってコンボボックスで選択された項目や入力された値を取得する方法について解説します。

※ コンボボックスを作成し項目を追加する方法については「VBAを使ったコンボボックスの作成と項目の追加および削除」を参照されてください。

(Last modified: )

Textプロパティを使って選択項目または入力した値を取得する

コンボボックスで選択されている項目を取得する方法を 3 つ紹介します。まず一つ目です。

コンボボックスの Text プロパティの値を取得すると、現在選択されている項目の値や入力された値を取得することができます。

オブジェクト.Text

コンボボックスでは項目が選択されると、その項目の値がコンボボックスに表示されます。 Text プロパティを参照することでその値を取得できます。またコンボボックスでは項目を選択する以外に直接値を入力することができます。直接値を入力している場合は Text プロパティを参照すると入力された値を取得します。

なおコンボボックスで何も入力されておらず項目が何も選択されていない場合、空文字が入力されているのと同じなので Text プロパティを参照すると空文字を取得します。

具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャにコードを記述し、コンボボックスに 5 個の項目を追加しています。そしてコマンドボタンをがクリックされたときに、現在選択している項目の値か、またはコンボボックスに直接入力された値を取得してメッセージボックスに表示します。

Option Explicit

Private Sub UserForm_Initialize()
    ComboBox1.AddItem "東京都"
    ComboBox1.AddItem "神奈川県"
    ComboBox1.AddItem "千葉県"
    ComboBox1.AddItem "埼玉県"
    ComboBox1.AddItem "群馬県"
End Sub

Private Sub CommandButton1_Click()
    MsgBox ComboBox1.Text
End Sub

Textプロパティを使って選択項目または入力した値を取得する(1)

Textプロパティを使って選択項目または入力した値を取得する(2)

ユーザーフォームを表示すると、コンボボックスが表示されます。

Textプロパティを使って選択項目または入力した値を取得する(3)

コンボボックスのいずれかの項目をクリックして選択すると、コンボボックスに選択した項目の値が表示されます。そのあとでコマンドボタンをクリックすると、表示されている値を取得してメッセージボックスで表示します。

Textプロパティを使って選択項目または入力した値を取得する(4)

Textプロパティを使って選択項目または入力した値を取得する(5)

Textプロパティを使って選択項目または入力した値を取得する(6)

またコンボボックスでは項目を選択するだけではなく直接値を入力することもできます。値を入力した場合、コマンドボタンをクリックすると、表示されている値を取得してメッセージボックスで表示します。

Textプロパティを使って選択項目または入力した値を取得する(7)

Textプロパティを使って選択項目または入力した値を取得する(8)

Valueプロパティを使って選択項目または入力した値を取得する

コンボボックスの Value プロパティの値を取得すると、現在選択されている項目の値、またはコンボボックスに入力されている値を取得することができます。このとき何列目の値を取得するかは BoundColumn プロパティに設定されている数値の列の値を取得します。

オブジェクト.Value
オブジェクト.BoundColumn

BoundColumn プロパティには列数を指定します。列数は最初の列が 1 、次の列が 2 のようになっています。デフォルトの値は 1 です。

ただコンボボックスでは複数列ではなく列が一つの状態で利用することが多く、 BoundColumn プロパティのデフォルトの値が 1 で Value プロパティは項目の 1 列目の値を取得するため、結果として Text プロパティと Value プロパティは同じ値を取得することが多いです。

先ほどの Text プロパティで使ったサンプルを Value プロパティに変更した場合、まったく同じ結果となります。

Option Explicit

Private Sub UserForm_Initialize()
    ComboBox1.AddItem "東京都"
    ComboBox1.AddItem "神奈川県"
    ComboBox1.AddItem "千葉県"
    ComboBox1.AddItem "埼玉県"
    ComboBox1.AddItem "群馬県"
End Sub

Private Sub CommandButton1_Click()
    MsgBox ComboBox1.Value
End Sub

Valueプロパティを使って選択項目または入力した値を取得する(1)

Valueプロパティを使って選択項目または入力した値を取得する(2)

コンボボックスに値を直接入力した場合も Value プロパティで取得することができます。

Valueプロパティを使って選択項目または入力した値を取得する(3)

Valueプロパティを使って選択項目または入力した値を取得する(4)

ListIndexとListプロパティを使って選択項目を取得する

コンボボックスの ListIndex プロパティの値を取得すると、現在選択されている項目のインデックスを取得することができます。インデックスは先頭の項目が 0 、次の項目が 1 のようになります。

オブジェクト.ListIndex

コンボボックスが選択されていない場合は ListIndex プロパティは -1 を返します。

コンボボックスで行と列を指定して値を取得するには List プロパティを使用します。

オブジェクト.List(row, column)

現在選択されている項目の値を取得するには List プロパティの 1 番目の引数に ListIndex プロパティの値を参照して取得したインデックスを指定し、 2 番目の引数に取得したい列数を指定します。コンボボックスの場合は基本的に 1 列しか使用しないので 1 を指定します。

注意点としてコンボボックスの場合は項目を選択する以外にも値を直接入力することができます。値が直接入力された場合は ListInex プロパティは -1 となり List プロパティでは値を取得することができません。そのためコンボボックスで値を直接入力できる形で使用している場合は、ここで紹介した方法ではなく Text プロパティなどの方法を使われることをおすすめします。

具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャにコードを記述し、コンボボックスに 5 個の項目を追加しています。そしてコマンドボタンをがクリックされたときに、現在選択している項目の値を取得してメッセージボックスに表示します。

Option Explicit

Private Sub UserForm_Initialize()
    ComboBox1.AddItem "東京都"
    ComboBox1.AddItem "神奈川県"
    ComboBox1.AddItem "千葉県"
    ComboBox1.AddItem "埼玉県"
    ComboBox1.AddItem "群馬県"
End Sub

Private Sub CommandButton1_Click()
    Dim index As Integer

    index = ComboBox1.ListIndex

    If index = -1 Then
        MsgBox "選択されていません"
    Else
        MsgBox ComboBox1.List(ComboBox1.ListIndex, 0)
    End If
End Sub

ListIndexとListプロパティを使って選択項目を取得する(1)

ListIndexとListプロパティを使って選択項目を取得する(2)

ユーザーフォームを表示すると、コンボボックスが表示されます。コンボボックスのいずれかの項目をクリックして選択したあと、コマンドボタンをクリックすると、選択している項目の値を取得してメッセージボックスで表示します。

ListIndexとListプロパティを使って選択項目を取得する(3)

ListIndexとListプロパティを使って選択項目を取得する(4)

コンボボックスに直接値を入力した場合は、コマンドボタンをクリックしても取得することはできません。

ListIndexとListプロパティを使って選択項目を取得する(5)

-- --

Excel の VBA を使ってコンボボックスで選択された項目や入力された値を取得する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。