コンボボックスって使っていますか?
コンボボックスとは、VBAのユーザーフォームで使えるパーツの一つで、いくつか登録したテキストの中から選択する場合に使用します。
この記事では、コンボボックスについて
- コンボボックスとは
- コンボボックスの呼び出し方
- コンボボックスのリストの初期化
- コンボボックスの値の取得
- コンボボックスのメソッドとプロパティ
など基本的な内容から、応用的な内容についても解説していきます。
今回はコンボボックスについて、わかりやすく解説します!
コンボボックスとは?
コンボボックスとは、VBAのユーザーフォームで使えるパーツの一つで、いくつか登録したテキストの中から選択する場合に使用します。
コンボボックスがテキストボックスとリストボックスから構成されています。
テキストボックスに入力したテキストをリストボックスに追加したり、リストボックスから選択したテキストをテキストボックスに表示したりすることができます。
コンボボックスの呼び出し方
コンボボックスは「ツールボックス」から選択して、フォームにドラッグ&ドロップします。
なお、ユーザーフォームの呼び出し方、使い方などは、こちらで詳しく解説していますので、ぜひ参考にしてください。
コンボボックスのリストの初期化
コンボボックスにリストを登録する方法についてみていきましょう。
AddItemメソッドの使い方
コンボボックスのリストにテキストを追加するには、AddItemメソッドを使います。
AddItemメソッドは以下のように記述します。
AddItem(Item, [Index])
「[ ]」内は省略することができます。
引数Itemは、追加するテキストを指定します。引数Indexは、追加する項目の位置を指定します。省略された場合は、リストの末尾に追加されます。
コンボボックスから追加する方法
「コンボボックス」のテキストボックスから入力して、テキストを登録することができます。
「コマンドボタン」を押すとリストボックスに登録されるようにします。
この場合の処理の例は以下のとおりです。
Private Sub CommandButton1_Click() With ComboBox1 If .Text <> "" Then .AddItem .Text End If End With End Sub
Subプロシージャ「CommandButton1_Click()」は、「コマンドボタン」をダブルクリックすると自動で生成されます。
テキストを登録するために、AddItemメソッドを使用しています。AddItemメソッドの引数には、ComboBox1のTextプロパティで取得した値を指定しています。
起動時に初期化する方法
また、あらかじめフォームが起動する際に、テキストを登録しておくこともできます。
以下のように記述します。
Private Sub UserForm_Initialize() With ComboBox1 .AddItem "北海道" .AddItem "青森" .AddItem "岩手" End With End Sub
Subプロシージャ「UserForm_Initialize()」でフォーム起動時の処理を定義します。
コンボボックスの値の取得
「コンボボックス」のリストの中から何が選ばれたか取得する方法について、みていきましょう。
ListIndexプロパティの使い方
「コンボボックス」のリストの中から何が選ばれたか取得するには、ListIndexプロパティを使います。
ListIndexプロパティは整数値を取得します。リストの最初の項目が選択されているときの値は0で、2番目の項目が選択されているときはの値は1になります。
サンプルコードで確認しましょう。
Private Sub ComboBox1_Change() With ComboBox1 Range("A1").Value = .ListIndex End With End Sub
Subプロシージャ「ComboBox1_Change()」で値を取得する処理を定義します。
Listメソッドの使い方
先ほどは、ListIndexプロパティを使って値を取得する方法についてみてきました。
今度は値ではなく、リストの項目テキストを取得する方法についてみていきましょう。
リストの項目テキストを取得するには、Listメソッドを使います。
List(Index)
引数Indexには、項目のインデックス番号を指定します。
この引数は省略可能で、省略するとリスト全体の項目が文字列配列として返されます。
サンプルコードで確認しましょう。
Private Sub ComboBox1_Change() With ComboBox1 Range("A1").Value = .List(.ListIndex) End With End Sub
コンボボックスのメソッドとプロパティ
コンボボックスのメソッドとプロパティについてみていきましょう。
メソッド一覧
メソッドについては以下のとおりです。
メソッド | 説明 |
---|---|
AddItem [Item][, Index] | リストに項目を追加します。 引数Itemで追加する文字列を指定します。省略すると空白行が追加されます。 引数Indexで追加する位置を指定します。省略すると末尾に追加されます。 |
Clear | リストに追加された全ての項目を削除します。 |
RemoveItem Index | リストの項目を1つ削除します。 引数Indexで項目の位置を指定します。 |
プロパティ一覧
主なプロパティについては以下のとおりです。
プロパティ | 定数(値) | 説明 |
---|---|---|
RowSource | ー | Excelシートのセルに入力された項目をリストに追加 |
ListCount | ー | リストの項目数 |
ListIndex | ー | 選択されている項目のインデックス番号を取得 |
ListRows | ー | ドロップダウンしたときに表示される項目の最大値を指定 項目数がこの値を超えると、スクロールバーが表示 |
ListWidth | ー | ドロップダウンしたときのリストの幅を指定 |
Styles | fmStyleDropDownCombo(0) | 編集領域に値を入力したり、リストから値を選択することが可能(既定値) |
fmStyleDropDownList(2) | リストボックスとして機能 | |
DropButtonStyle | fmDropButtonStylePlain(0) | ドロップボタンのスタイルを指定 |
fmDropButtonStyleArrow(1) | ||
fmDropButtonStyleEllipsis(2) | ||
fmDropButtonStyleReduce(3) |
Clearメソッドでリストを削除
それではClearメソッドを使って、リストを全て削除する方法についてみていきましょう。
Private Sub CommandButton1_Click() With ComboBox1 .Clear End With End Sub
「コマンドボタン」を押すと「コンボボックス」のリストが全て削除されるように記述しています。
まとめ
ここでは、コンボボックスの使い方について説明しました。
Excelのシート入力だけでは入力フォームとして不足と感じる場合は、ユーザーフォームで使いやすい入力フォームを作れるようになると作業時間や入力ミスの削減になります。
コンボボックスも使いこなすことができるように、この記事を何度も参考にして下さいね!