Excel VBA コンボボックスにリストを設定する 選択された値を取得する

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

コンボボックスにリストを設定、値を取得する方法

コンボボックスはリストボックスとテキストボックスを
組み合わせたようなコントロールで、
リストから値を選択することや、値を直接入力することもできます。

ここでは、コンボボックスに項目を設定する方法と
選択された項目の値の取得方法について解説します。

コンボボックスのドロップダウンリストの選択肢(項目)を
設定する方法は複数ありますが、ここでは
ComboBox【コンボボックス】コントロールオブジェクトの
AddItem【アドアイテム】メソッドを使用して設定する方法を説明します。

AddItem【アドアイテム】メソッド

コンボボックスのドロップダウンリストに項目を設定するには
コマンドバーコントロールオブジェクトの
AddItem【アドアイテム】メソッドを使用します。

AddItem【アドアイテム】メソッドの書式

[]内は省略可能です。
オブジェクト.AddItem( Item[, Index] )


設定値(引数)の説明

  • オブジェクト(必須)
    ComboBox【コンボボックス】コントロールオブジェクトを表す
    オブジェクト名を指定します。
  • Item【アイテム】(必須)
    項目に設定する文字列を設定または参照します。
  • Index【インデックス】(省略可)
    新しい項目を追加する位置を整数値で指定します。
    省略した場合は末尾に追加されます。
    なお、先頭の番号は0から始まります。

AddItem【アドアイテム】メソッドでの項目設定コード例

Private Sub UserForm_Initialize()
With ComboBox1
    .AddItem "AAAA"
    .AddItem "BBBB"
    .AddItem "CCCC"
    .AddItem "DDDD"
    .AddItem "EEEE"
    .AddItem "FFFF", 0
End With
End Sub

コードの解説

1行目
【Private Sub UserForm_Initialize()】

ユーザーフォームが開かれる直前に実行される
UserForm【ユーザーフォーム】の
Initializue【イニシャライス】イベントプロシージャー
コードを記述します。


2行目
【With ComboBox1】

ComboBox【コンボボックス】コントロールオブジェクトを表す
オブジェクト名をWithステートメントで指定します。


3行目~8行目
【.AddItem “AAAA”
.AddItem “BBBB”
.AddItem “CCCC”
.AddItem “DDDD”
.AddItem “EEEE”
.AddItem “FFFF”, 0】

Withステートメントで指定した
ComboBox【コンボボックス】オブジェクトコントロールの
AddItem【アドアイテム】メソッドを使用して項目を追加します。
項目FFFFの引数Indexに0を指定して
項目の先頭に表示するように設定しました。


実行結果


ワークシートのリストを参照して項目を設定するコード例

Private Sub UserForm_Initialize()
Dim 最終行 As Integer
Dim i As Integer
最終行 = Worksheets("リスト").Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To 最終行
ComboBox1.AddItem Worksheets("リスト").Range("A" & i).Value
Next i
End Sub

コードの解説

1行目
【Private Sub UserForm_Initialize()】

ユーザーフォームが開かれる直前に実行される
UserForm【ユーザーフォーム】の
Initializue【イニシャライス】イベントプロシージャーに
コードを記述します。


2行目
【Dim 最終行 As Integer】

ワークシートに登録されている
コンボボックスの項目のセルの最終行を格納する
変数「最終行」を整数型(Integer)で宣言します。


3行目
【Dim i As Integer】

セルの行番号を繰り返し処理の中で格納する
カウンター変数「i」を整数型(Integer)で宣言します。


4行目
【最終行 = Worksheets(“リスト”).Cells(Rows.Count, 1).End(xlUp).Row】

A列のセルをEnd【エンド】プロパティを使用して
最終セルからデータが入力されている終端セルまで引数xlupで上方向に
移動してRow【ロウ】プロパティで行番号を取得して
変数「最終行」に代入します。


5行目
【For i = 1 To 最終行】

For Next【フォアネクスト】ステートメント
繰り返し処理の始まりです。
カウンター変数iに順次1~リストの最終行番号の値を格納します。


6行目
【ComboBox1.AddItem Worksheets(“リスト”).Range(“A” & i).Value】

ComboBox【コンボボックス】コントロールオブジェクトの
AddItem【アドアイテム】メソッドを使用して
コンボボックスに項目を追加します。
繰り返し処理の中でワークシートリストに入力されている
項目を参照してコンボボックスの項目に追加します。


実行結果


コンボボックスの選択された項目をセルに登録する方法

コマンドボタンをクリックしたとき選択項目をセルに登録するコード例

Private Sub CommandButton1_Click()
Dim 最終行 As Integer
最終行 = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row + 1
Worksheets("Sheet1").Cells(最終行, 1).Value = ComboBox1.Value
End Sub

コードの解説

1行目
【Private Sub CommandButton1_Click()】

フォームにコマンドボタンを追加して
コマンドボタンをクリックしたときに発生する
CommandButton【コマンドボタン】コントロールオブジェクトの
Click【クリック】イベントプロシージャー
コードを記述します。


2行目
【Dim 最終行 As Integer】

選択した項目を登録するセルの最終行番号を格納する
変数「最終行」を整数型(Integer)で宣言します。


3行目
【最終行 = Worksheets(“Sheet1”).Cells(Rows.Count, 1).End(xlUp).Row + 1】

ワークシートSheet1のA列の最終行から
Endプロパティを使用して、引数をxlupに指定し
上方向にデータが入力されている終端セルまでに移動して
Rowプロパティでその行番号を取得して1加算することで
データが入力されている終端行の次の行番号を取得して
変数「最終行」に代入します。


4行目
【Worksheets(“Sheet1”).Cells(最終行, 1).Value = ComboBox1.Value】
Sheet1のA列のデータが入力されている次の行のセルに
コンボボックスで選択されている値を代入します。


実行結果


リスト存在する値だけを登録できるようにする方法

リストの存在する値だけを登録できるようにするには
ComboBoxコントロールオブジェクトの
MatchFound【マッチファンド】プロパティを使用します。

MatchFound【マッチファンド】プロパティ

ComboBoxコントロールオブジェクトの
MatchFound【マッチファンド】プロパティは
コンボボックスに入力された値が登録された
リスト内に存在するかどうかを調べてブール型の値で返します。

MatchFound【マッチファンド】プロパティの書式

オブジェクト.MatchFound


設定値 戻り値の説明

  • オブジェクト(必須)
    ComboBoxコントロールオブジェクトを表すオブジェクト名を指定します。
  • 戻り値
    戻り値内容
    Trueコンボボックスに入力された値はリストに存在します。
    Falseコンボボックスに入力された値はリストに存在しません。

リスト以外の値を登録させないコード例

Private Sub CommandButton1_Click()
With ComboBox1
If .MatchFound = False Then
MsgBox "リスト内のデータを入力してください。"
.SetFocus
Else
Dim 最終行 As Integer
最終行 = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row + 1
Cells(最終行, 1).Value = ComboBox1.Value
End If
End With
End Sub

コードの解説

1行目
【Private Sub CommandButton1_Click()】

フォームにコマンドボタンを追加して
コマンドボタンをクリックしたときに発生する
CommandButton【コマンドボタン】コントロールオブジェクトの
Click【クリック】イベントプロシージャーの
コンボボックスで選択または入力された値を
ワークシートに転記するコードの前に記述します。


2行目
【With ComboBox1】

ComboBoxコントロールオブジェクトを表す
オブジェクト名をWithステートメントで指定します。


3行目
【If .MatchFound = False Then】
If文を使用して条件分岐をします。
Withステートメントで指定した
ComboBoxコントロールオブジェクトの
MatchFound【マッチファンド】プロパティを使用して
戻り値がFalseだったとき
つまりコンボボックスに入力されている値が
リストにないときを定義します。


4行目
【MsgBox “リスト内のデータを入力してください。”】

上記の条件が成立したとき
つまり、リストにない値が登録されたとき
MsgBox関数を使用して登録できないことをユーザーに伝えます。


5行目
【.SetFocus】

ComboBoxコントロールオブジェクトの
SetFocus【セットフォーカス】メソッドを使用して
フォーカスをComboBoxコントロールオブジェクトに戻します。


6行目
【Else】

Else【エルズ】ステートメントで
以降に条件が成立しなかった場合
つまり、コンボボックスに入力または選択された値が
リストと一致した場合の処理を記述します。


その他のコンボボックスのプロパティについては
コンボボックスのプロパティ」をご覧ください。
以上で
コンボボックスにリストを設定、値を取得する方法についての
解説を終了します。
ありがとうございます。

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

フォローする

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