はじめに
VBAのユーザーフォームで、部署名や商品カテゴリなど、あらかじめ決められた選択肢の中からユーザーに一つを選んでもらう場合、「コンボボックス」コントロールが非常に便利です。コンボボックスは、クリックすると選択肢がドロップダウン形式で表示されるため、フォームの省スペース化にも繋がります。
この記事では、コンボボックスに選択肢のリストを設定し、ユーザーが選んだ項目を取得するという、一連の基本的な使い方を分かりやすく解説します。
コンボボックスの設定と値の取得サンプルコード
このマクロは、2つの部分で構成されます。
UserForm_Initialize
: フォームが表示される際に、コンボボックスに選択肢のリストを設定し、初期値を表示します。OKButton_Click
: 「OK」ボタンが押されたときに、コンボボックスで選択されている項目の値を取得し、アクティブセルに書き込みます。
ユーザーフォームのコード
' フォームが初期化されるときに実行されるイベント
Private Sub UserForm_Initialize()
With Me.DepartmentComboBox
' .ListプロパティにArray関数で配列を渡し、リスト項目を設定
.List = Array("人事部", "総務部", "営業部", "開発部", "経理部")
' .ListIndexプロパティで、初期選択項目を設定(0はリストの1番目)
.ListIndex = 0
' .Styleプロパティで、ドロップダウンリスト形式(編集不可)に設定
.Style = fmStyleDropDownList
End With
End Sub
' 「OK」ボタン(OKButton)がクリックされたときの処理
Private Sub OKButton_Click()
' .Valueプロパティで選択されている項目の値を取得し、セルに書き込む
ActiveCell.Value = Me.DepartmentComboBox.Value
' フォームを閉じる
Unload Me
End Sub
実行前の準備
- ユーザーフォームを作成します。
- フォーム上に「コンボボックス」と「コマンドボタン」を配置します。
- コンボボックスの
(Name)
をDepartmentComboBox
に、コマンドボタンの(Name)
をOKButton
に変更します。 - フォームのコードモジュールに上記のコードを貼り付け、フォームを表示して使用します。
コード(プロパティ)の解説
.List = Array(...)
コンボボックスに表示する項目のリストを設定します。Array
関数を使って作成した配列を、.List
プロパティに直接代入するのが最も簡単な方法です。
.ListIndex = 0
リストの中で、最初に選択された状態にしておく項目をインデックス番号(0始まり)で指定します。0
を指定すると、リストの1番目の項目(この例では “人事部”)が初期値として表示されます。何も選択させたくない場合は、-1
を設定します。
.Style = fmStyleDropDownList
コンボボックスのスタイルを設定します。
fmStyleDropDownList
: ドロップダウンリスト形式になります。ユーザーはリストからしか選択できず、自由なテキスト入力はできません。選択肢を固定したい場合に最適です。fmStyleDropDownCombo
: ドロップダウンリストに加え、ユーザーが直接テキストを入力することも可能になります(デフォルト)。
ActiveCell.Value = Me.DepartmentComboBox.Value
ユーザーが選択した項目の値を取得するには、.Value
プロパティ(または .Text
プロパティ)を使います。OKButton_Click()
の中で、選択された部署名をアクティブセルに書き込んでいます。
まとめ
今回は、ユーザーフォームのコンボボックスを使って、ドロップダウンリストを作成し、選択された値を取得する基本的な方法を解説しました。
.List
プロパティに配列を代入して、選択肢を設定する。.ListIndex
プロパティで、初期表示する項目を決める。.Style
プロパティで、ユーザーによる自由入力を許可するかどうかを決める。- 選択された値は
.Value
プロパティで取得する。
コンボボックスは、限られたスペースの中で多くの選択肢をユーザーに提示できる、非常に優れたコントロールです。ぜひマスターして、使いやすいフォーム作成に役立ててください。