コンボボックスにリストを設定、値を取得する方法
コンボボックスはリストボックスとテキストボックスを組み合わせたようなコントロールで、リストから値を選択することや、値を直接入力することもできます。
ここでは、コンボボックスに項目を設定する方法と選択された項目の値の取得方法について解説します。
コンボボックスのドロップダウンリストの選択肢(項目)を設定する方法は複数ありますが、ここではComboBox【コンボボックス】コントロールオブジェクトのAddItem【アドアイテム】メソッドを使用して設定する方法を説明します。
AddItem【アドアイテム】メソッド
コンボボックスのドロップダウンリストに項目を設定するには、ComboBox【コンボボックス】コントロールオブジェクトの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
ユーザーフォームが開かれる直前に実行されるUserForm【ユーザーフォーム】のInitializue【イニシャライス】イベントプロシージャーにコードを記述します。
2行目【With ComboBox1】
ComboBox【コンボボックス】コントロールオブジェクトを表すオブジェクト名 ComboBox1を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
ユーザーフォームが開かれる直前に実行される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
フォームにコマンドボタンを追加してコマンドボタンをクリックしたときに発生する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
フォームにコマンドボタンを追加してコマンドボタンをクリックしたときに発生するCommandButton【コマンドボタン】コントロールオブジェクトのClick【クリック】イベントプロシージャーのコンボボックスで選択または入力された値をワークシートに転記するコードの前に記述します。
2行目【With ComboBox1】
ComboBox【コンボボックス】コントロールオブジェクトを表すオブジェクト名ComboBox1をWith【ウィズ】ステートメントで指定します。
3行目【If .MatchFound = False Then】
If【イフ】ステートメントを使用して条件分岐をします。With【ウィズ】ステートメントで指定したComboBox【コンボボックス】コントロールオブジェクトのMatchFound【マッチファンド】プロパティを使用して戻り値がFalseだったとき、つまりコンボボックスに入力されている値がリストにないときを定義します。
4行目【MsgBox “リスト内のデータを入力してください。”】
上記の条件が成立したときつまり、リストにない値が登録されたときMsgBox【メッセージボックス】関数を使用して登録できないことをユーザーに伝えます。
5行目【.SetFocus】
With【ウィズ】ステートメントで指定したComboBox【コンボボックス】コントロールオブジェクトのSetFocus【セットフォーカス】メソッドを使用してフォーカスをComboBox【コンボボックス】コントロールオブジェクトに戻します。
6行目【Else】
Else【エルズ】ステートメントで以降に条件が成立しなかった場合、つまりコンボボックスに入力または選択された値がリストと一致した場合の処理を記述します。
その他のコンボボックスのプロパティについては、「コンボボックスのプロパティ」をご覧ください。
以上で、コンボボックスにリストを設定、値を取得する方法についての解説を終了します。
ありがとうございます。