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
ユーザーフォームを表示すると、コンボボックスが表示されます。
コンボボックスのいずれかの項目をクリックして選択すると、コンボボックスに選択した項目の値が表示されます。そのあとでコマンドボタンをクリックすると、表示されている値を取得してメッセージボックスで表示します。
またコンボボックスでは項目を選択するだけではなく直接値を入力することもできます。値を入力した場合、コマンドボタンをクリックすると、表示されている値を取得してメッセージボックスで表示します。
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
プロパティで取得することができます。
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
ユーザーフォームを表示すると、コンボボックスが表示されます。コンボボックスのいずれかの項目をクリックして選択したあと、コマンドボタンをクリックすると、選択している項目の値を取得してメッセージボックスで表示します。
コンボボックスに直接値を入力した場合は、コマンドボタンをクリックしても取得することはできません。
-- --
Excel の VBA を使ってコンボボックスで選択された項目や入力された値を取得する方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。