コンボボックスのメソッド・プロパティ

このページではコンボボックスの主なメソッドおよびプロパティについて解説します。

コンボボックスはドロップダウンリストから項目を選択できるだけでなく、テキストボックスと同様にユーザーから任意の文字列を受け付けることもできるコントロールです。ユーザーからの文字列入力を受け付けずに、単純なドロップダウンリストとして使用することも可能です。

スポンサーリンク

説明済みプロパティ

コントロールオブジェクトが異なるだけで前のページで説明した内容と同じプロパティについては説明を割愛させていただきます。以下のリンク先をご覧になってください。

※説明の中に出てくるコントロールオブジェクトは適宜読み換えてください。

リスト項目の追加と削除

コンボボックスはテキストボックスと同様に Value や Text プロパティを使用して文字列の取得および設定が可能ですが、これらのプロパティに文字列を設定してもリストに追加されるわけではありません。

Valueプロパティに文字列を設定リストには追加されない様子

リストに項目を追加するには AddItem メソッドを使用する方法と、RowSource プロパティにリスト項目が入力されたワークシートのセル範囲を指定する方法があります。AddItem メソッドで追加したリスト項目は Clear メソッドRemoveItem メソッドで削除することが可能です。

AddItem メソッド

AddItem メソッドはリストに項目を追加します。引数 Index を指定することでリストの途中に項目を追加することも可能です。この際、リスト項目の位置がゼロからはじまることに注意してください。

構文
cbo.AddItem [ Item ] [, Index ]

※上記構文中の cbo はコンボボックスオブジェクトのインスタンスを表します(以下、同様)。

引数名 省略 説明
Item リスト項目に追加する文字列を指定します。 省略すると空白行が追加されます。
Index 新しい項目を挿入する位置を示す整数値を指定します。 位置は先頭項目がゼロとなります。 省略すると末尾に追加されます。

AddItem メソッドを使用したリストの追加は、通常ユーザーフォームの初期処理(ユーザーフォームのイベント)で実施します。

コードの記述例1

With ComboBox1
    .AddItem "国語"
    .AddItem "数学"
    .AddItem "理科"
    .AddItem "社会"
End With

表示イメージ1

リストに4項目追加された様子
リストに4項目追加された様子

コードの記述例2

リストの途中に項目を挿入したい場合は引数 Index にその位置を指定します。次の例では先頭から2番目の位置(引数 Index は1)に”英語”を追加する例です。

'リストの上から2番目に挿入
ComboBox1.AddItem "英語", 1

表示イメージ2

項目が挿入された様子
項目が挿入された様子

Clear メソッド

Clear メソッドはリストに追加された項目をすべて削除します。

構文
cbo.Clear   ※引数なし

RemoveItem メソッド

RemoveItem メソッドはリストに追加された項目を1つ削除します。AddItem メソッドと同じく、引数 Index に指定する位置はゼロからはじまります。

構文
cbo.RemoveItem Index
引数名 省略 説明
Index × 削除する項目の位置を示す整数値を指定します。 位置は先頭項目がゼロとなります。 この引数は必ず指定します。

コードの記述例

'リストの上から2番目の項目を削除
ComboBox1.RemoveItem 1

削除前と削除後のイメージ

削除前削除後

RowSource プロパティ

RowSource プロパティを使用すると、ワークシートのセルに入力された項目をリストに追加することができます。

これ以降、下図のワークシート”科目リスト”が存在する前提で説明を行います。

説明の前提となるワークシート
説明の前提となるワークシート

プロパティウィンドウでの設定

RowSource プロパティにワークシート名とセル範囲を入力します。

RowSourceプロパティにワークシート名とセル範囲を入力
RowSourceプロパティにワークシート名とセル範囲を入力

コードの記述例1

ComboBox1.RowSource = "科目リスト!A1:A4"

表示イメージ1

コンボボックスリスト表示結果
コンボボックスリスト表示結果

RowSource プロパティでリスト項目を設定した場合、AddItem、Clear、RemoveItem メソッドによる項目の追加および削除は行えません。例えば、AddItem メソッドを使用すると次のようなエラーが発生します。

RowSourceプロパティで設定したリストに追加しようとした時のエラー
RowSourceプロパティで設定したリストに追加しようとした時のエラー

コードの記述例2

RowSource プロパティで設定したリスト項目を変更したい場合は、その参照先であるセルの値を変更する必要があります。また、必要に応じてセルの参照範囲も変更します。

'ワークシートへ新規項目の追加
With Worksheets("科目リスト")
    .Range("A2").Insert (xlDown)
    .Range("A2").Value = "英語"
End With
'セル参照範囲の変更
ComboBox1.RowSource = "科目リスト!A1:A5"

 セルのInsertメソッド  Withステートメント

リスト変更前後の表示イメージ

追加前追加後

リスト項目の数(ListCount プロパティ)

コンボボックスに追加したリスト項目数は ListCount プロパティで取得可能です。このプロパティは取得のみ可能で、プロパティウィンドウからは設定できません。

コードの記述例

MsgBox "ListCount = " & ComboBox1.ListCount

テスト用コンボボックスの状態

リスト項目が5つある場合
リスト項目が5つある場合

表示結果

リスト項目数の表示結果
リスト項目数の表示結果

選択項目のインデックス(ListIndex プロパティ)

コンボボックスのリスト内で現在選択されている項目のインデックスは ListIndex プロパティで取得可能です。リスト内の項目が選択されていない場合は -1 が返ってきます。

このプロパティは値を設定することも可能で、ゼロ以上の数値を設定するとそのインデックスに対応した項目がコンボボックス内に表示されます。-1 を設定すると未選択状態(コンボボックス内は空欄)になります。

注意点として、値を設定するときは当然リスト項目が追加済みである必要があります。また、このプロパティはプロパティウィンドウからは設定できません。

コードの記述例

'コンボボックスにリスト先頭項目を表示
ComboBox1.ListIndex = 0
'選択されている項目のインデックスを表示
MsgBox "ListIndex = " & ComboBox1.ListIndex

表示イメージ

以下の図はコンボボックスリスト内の選択項目をいろいろ変えて、そのときのインデックス値をメッセージボックスで表示させてみた結果です。

  • リスト未選択時の場合のインデックス
    リスト未選択  ⇒  リスト未選択時のインデックス表示結果
  • リスト先頭項目選択時の場合のインデックス
    リスト先頭を選択  ⇒  リスト先頭項目選択時のときのインデックス表示結果
  • リスト末尾(4項目目)選択時の場合のインデックス
    リスト末尾を選択  ⇒  リスト末尾選択のときのインデックス表示結果

リスト表示最大数(ListRows プロパティ)

コンボボックスのリストをドロップダウンしたときに表示されるリスト項目の最大値は ListRows プロパティで設定可能です。リスト内の項目数がこの最大値を超えると、リスト右端にスクロールバーが表示され、スクロールできるようになります。

プロパティウィンドウでの設定

ListRows プロパティに、ゼロより大きい数値を入力します。

ListRows プロパティに、ゼロより大きい数値を入力
ListRows プロパティに、ゼロより大きい数値を入力

コードの記述例

ComboBox1.ListRows = 3

表示イメージ

ListRows = 3 で、リスト項目が4つのリストをドロップダウンした場合にスクロールバーが表示されます。

リスト項目が4つのリストをドロップダウンした時の様子

リストの幅(ListWidth プロパティ)

コンボボックスのリストをドロップダウンしたときのリスト幅は ListWidth プロパティで設定可能です。リスト1行の中には複数の列(カラム)を設定することが可能です。以下の例ではリスト1行に1列という前提の説明となっています。

リスト幅のイメージ
リスト幅のイメージ

プロパティウィンドウでの設定

ListWidth プロパティに、リスト幅の長さを単位(pt、cmなど)付きで入力します。また、列(カラム)が1の場合、リスト幅はカラム幅に等しくなるはずなので、ColumnWidths プロパティにも同じ値を入力してください。これをしないと、リストに水平スクロールバーが表示されてしまいます。

ListWidthとColumnWidthsプロパティに、長さを入力
ListWidthとColumnWidthsプロパティに、長さを入力

コードの記述例

ComboBox1.ListWidth = "40 pt"
ComboBox1.ColumnWidths = "40 pt"

表示イメージ

リスト幅を40ptに設定したときの様子
リスト幅を40ptに設定したときの様子

リスト幅を狭くする場合、垂直スクロールバーが表示されてリスト項目が隠れてしまわないように注意してください。

コンボボックスのスタイル(Styles プロパティ)

コンボボックスのスタイルはStyles プロパティで設定します。スタイルと言っても、外見がかわるわけではなく、ユーザーからの文字入力を受け付けるかどうかが変わるだけです。

プロパティウィンドウでの設定

Styles プロパティの右端をクリックし、ドロップダウンリストから希望のスタイルに対応する定数を設定します。

Stylesプロパティに希望のスタイルに対応する定数を設定
Stylesプロパティに希望のスタイルに対応する定数を設定

コードの記述例

'ドロップダウンリストとしてのみ使用
ComboBox1.Style = fmStyleDropDownList
DropButtonStyle定数一覧
定数 内容
fmStyleDropDownCombo 0 選択項目のリストを持つコンボ ボックスとして機能します。 編集領域に値を入力したり、選択項目のリストから値を選択することができます。
fmStyleDropDownList 2 ドロップダウンリストとして機能します。リストから値を選択しなければなりません。

ドロップボタンのスタイル(DropButtonStyle プロパティ)

ドロップボタンのスタイルはDropButtonStyle プロパティで設定することができます。

プロパティウィンドウでの設定

DropButtonStyle プロパティの右端をクリックし、ドロップダウンリストから希望のスタイルに対応する定数を設定します。

DropButtonStyleプロパティに、希望のスタイルに対応する定数を設定
DropButtonStyleプロパティに、希望のスタイルに対応する定数を設定

コードの記述例

'ドロップボタンのスタイルを表示なしに設定
ComboBox1.DropButtonStyle = fmDropButtonStylePlain
DropButtonStyle定数一覧
定数 表示イメージ
fmDropButtonStylePlain 0 表示なし
fmDropButtonStyleArrow 1 矢印
fmDropButtonStyleEllipsis 2 省略記号
fmDropButtonStyleReduce 3 アンダスコア文字

 各コントロールの概要

タイトルとURLをコピーしました