このページではコンボボックスの主なメソッドおよびプロパティについて解説します。
コンボボックスはドロップダウンリストから項目を選択できるだけでなく、テキストボックスと同様にユーザーから任意の文字列を受け付けることもできるコントロールです。ユーザーからの文字列入力を受け付けずに、単純なドロップダウンリストとして使用することも可能です。
説明済みプロパティ
コントロールオブジェクトが異なるだけで前のページで説明した内容と同じプロパティについては説明を割愛させていただきます。以下のリンク先をご覧になってください。
※説明の中に出てくるコントロールオブジェクトは適宜読み換えてください。
リスト項目の追加と削除
コンボボックスはテキストボックスと同様に Value や Text プロパティを使用して文字列の取得および設定が可能ですが、これらのプロパティに文字列を設定してもリストに追加されるわけではありません。
⇒
リストに項目を追加するには AddItem メソッドを使用する方法と、RowSource プロパティにリスト項目が入力されたワークシートのセル範囲を指定する方法があります。AddItem メソッドで追加したリスト項目は Clear メソッドや RemoveItem メソッドで削除することが可能です。
AddItem メソッド
AddItem メソッドはリストに項目を追加します。引数 Index を指定することでリストの途中に項目を追加することも可能です。この際、リスト項目の位置がゼロからはじまることに注意してください。
※上記構文中の cbo はコンボボックスオブジェクトのインスタンスを表します(以下、同様)。
引数名 | 省略 | 説明 |
---|---|---|
Item | ○ | リスト項目に追加する文字列を指定します。 省略すると空白行が追加されます。 |
Index | ○ | 新しい項目を挿入する位置を示す整数値を指定します。 位置は先頭項目がゼロとなります。 省略すると末尾に追加されます。 |
AddItem メソッドを使用したリストの追加は、通常ユーザーフォームの初期処理(ユーザーフォームのイベント)で実施します。
コードの記述例1
With ComboBox1 .AddItem "国語" .AddItem "数学" .AddItem "理科" .AddItem "社会" End With
表示イメージ1
コードの記述例2
リストの途中に項目を挿入したい場合は引数 Index にその位置を指定します。次の例では先頭から2番目の位置(引数 Index は1)に”英語”を追加する例です。
'リストの上から2番目に挿入 ComboBox1.AddItem "英語", 1
表示イメージ2
Clear メソッド
Clear メソッドはリストに追加された項目をすべて削除します。
RemoveItem メソッド
RemoveItem メソッドはリストに追加された項目を1つ削除します。AddItem メソッドと同じく、引数 Index に指定する位置はゼロからはじまります。
引数名 | 省略 | 説明 |
---|---|---|
Index | × | 削除する項目の位置を示す整数値を指定します。 位置は先頭項目がゼロとなります。 この引数は必ず指定します。 |
コードの記述例
'リストの上から2番目の項目を削除
ComboBox1.RemoveItem 1
削除前と削除後のイメージ
⇒
RowSource プロパティ
RowSource プロパティを使用すると、ワークシートのセルに入力された項目をリストに追加することができます。
これ以降、下図のワークシート”科目リスト”が存在する前提で説明を行います。
プロパティウィンドウでの設定
RowSource プロパティにワークシート名とセル範囲を入力します。
コードの記述例1
ComboBox1.RowSource = "科目リスト!A1:A4"
表示イメージ1
RowSource プロパティでリスト項目を設定した場合、AddItem、Clear、RemoveItem メソッドによる項目の追加および削除は行えません。例えば、AddItem メソッドを使用すると次のようなエラーが発生します。
コードの記述例2
RowSource プロパティで設定したリスト項目を変更したい場合は、その参照先であるセルの値を変更する必要があります。また、必要に応じてセルの参照範囲も変更します。
'ワークシートへ新規項目の追加 With Worksheets("科目リスト") .Range("A2").Insert (xlDown) .Range("A2").Value = "英語" End With 'セル参照範囲の変更 ComboBox1.RowSource = "科目リスト!A1:A5"
リスト変更前後の表示イメージ
⇒
リスト項目の数(ListCount プロパティ)
コンボボックスに追加したリスト項目数は ListCount プロパティで取得可能です。このプロパティは取得のみ可能で、プロパティウィンドウからは設定できません。
コードの記述例
MsgBox "ListCount = " & ComboBox1.ListCount
テスト用コンボボックスの状態
表示結果
選択項目のインデックス(ListIndex プロパティ)
コンボボックスのリスト内で現在選択されている項目のインデックスは ListIndex プロパティで取得可能です。リスト内の項目が選択されていない場合は -1 が返ってきます。
このプロパティは値を設定することも可能で、ゼロ以上の数値を設定するとそのインデックスに対応した項目がコンボボックス内に表示されます。-1 を設定すると未選択状態(コンボボックス内は空欄)になります。
注意点として、値を設定するときは当然リスト項目が追加済みである必要があります。また、このプロパティはプロパティウィンドウからは設定できません。
コードの記述例
'コンボボックスにリスト先頭項目を表示 ComboBox1.ListIndex = 0 '選択されている項目のインデックスを表示 MsgBox "ListIndex = " & ComboBox1.ListIndex
表示イメージ
以下の図はコンボボックスリスト内の選択項目をいろいろ変えて、そのときのインデックス値をメッセージボックスで表示させてみた結果です。
- リスト未選択時の場合のインデックス
⇒ - リスト先頭項目選択時の場合のインデックス
⇒ - リスト末尾(4項目目)選択時の場合のインデックス
⇒
リスト表示最大数(ListRows プロパティ)
コンボボックスのリストをドロップダウンしたときに表示されるリスト項目の最大値は ListRows プロパティで設定可能です。リスト内の項目数がこの最大値を超えると、リスト右端にスクロールバーが表示され、スクロールできるようになります。
プロパティウィンドウでの設定
ListRows プロパティに、ゼロより大きい数値を入力します。
コードの記述例
ComboBox1.ListRows = 3
表示イメージ
ListRows = 3 で、リスト項目が4つのリストをドロップダウンした場合にスクロールバーが表示されます。
リストの幅(ListWidth プロパティ)
コンボボックスのリストをドロップダウンしたときのリスト幅は ListWidth プロパティで設定可能です。リスト1行の中には複数の列(カラム)を設定することが可能です。以下の例ではリスト1行に1列という前提の説明となっています。
プロパティウィンドウでの設定
ListWidth プロパティに、リスト幅の長さを単位(pt、cmなど)付きで入力します。また、列(カラム)が1の場合、リスト幅はカラム幅に等しくなるはずなので、ColumnWidths プロパティにも同じ値を入力してください。これをしないと、リストに水平スクロールバーが表示されてしまいます。
コードの記述例
ComboBox1.ListWidth = "40 pt" ComboBox1.ColumnWidths = "40 pt"
表示イメージ
リスト幅を狭くする場合、垂直スクロールバーが表示されてリスト項目が隠れてしまわないように注意してください。
コンボボックスのスタイル(Styles プロパティ)
コンボボックスのスタイルはStyles プロパティで設定します。スタイルと言っても、外見がかわるわけではなく、ユーザーからの文字入力を受け付けるかどうかが変わるだけです。
プロパティウィンドウでの設定
Styles プロパティの右端をクリックし、ドロップダウンリストから希望のスタイルに対応する定数を設定します。
コードの記述例
'ドロップダウンリストとしてのみ使用
ComboBox1.Style = fmStyleDropDownList
定数 | 値 | 内容 |
---|---|---|
fmStyleDropDownCombo | 0 | 選択項目のリストを持つコンボ ボックスとして機能します。 編集領域に値を入力したり、選択項目のリストから値を選択することができます。 |
fmStyleDropDownList | 2 | ドロップダウンリストとして機能します。リストから値を選択しなければなりません。 |
ドロップボタンのスタイル(DropButtonStyle プロパティ)
ドロップボタンのスタイルはDropButtonStyle プロパティで設定することができます。
プロパティウィンドウでの設定
DropButtonStyle プロパティの右端をクリックし、ドロップダウンリストから希望のスタイルに対応する定数を設定します。
コードの記述例
'ドロップボタンのスタイルを表示なしに設定
ComboBox1.DropButtonStyle = fmDropButtonStylePlain
定数 | 値 | 表示イメージ |
---|---|---|
fmDropButtonStylePlain | 0 | |
fmDropButtonStyleArrow | 1 | |
fmDropButtonStyleEllipsis | 2 | |
fmDropButtonStyleReduce | 3 |