VBA コンボボックス Valueプロパティを設定 できません

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

VBA コンボボックス Valueプロパティを設定 できません
各種コントロール

2022.07.09 2014.05.10

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

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

説明済みプロパティ

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

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

  • 共通プロパティ
    • 高さ・幅の設定(Width、Height プロパティ)
    • 背景色の設定(BackColor プロパティ)
    • 有効状態の設定(Enabled プロパティ)
    • 可視状態の設定(Visible プロパティ)
    • コントロールチップの表示(ControlTipText プロパティ)
  • ラベル
    • フォント・色(Font、ForeColor プロパティ)
    • 枠線(BorderStyle、SpecialEffect プロパティ)
    • 文字列の配置(AutoSize、TextAlign プロパティ)
  • テキストボックス
    • テキストボックス内の文字列(Value、Text プロパティ)
    • IMEモード(IMEMode プロパティ)
    • 最大文字数(MaxLength プロパティ)
    • セレクションマージン(SelectionMargin プロパティ)

リスト項目の追加と削除

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

VBA コンボボックス Valueプロパティを設定 できません
VBA コンボボックス 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

VBA コンボボックス Valueプロパティを設定 できません
リストに4項目追加された様子

コードの記述例2

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

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

表示イメージ2

VBA コンボボックス Valueプロパティを設定 できません
項目が挿入された様子

Clear メソッド

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

RemoveItem メソッド

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

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

コードの記述例

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

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

VBA コンボボックス Valueプロパティを設定 できません
VBA コンボボックス Valueプロパティを設定 できません

RowSource プロパティ

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

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

VBA コンボボックス Valueプロパティを設定 できません
説明の前提となるワークシート

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

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

VBA コンボボックス Valueプロパティを設定 できません
RowSourceプロパティにワークシート名とセル範囲を入力

コードの記述例1

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

表示イメージ1

VBA コンボボックス Valueプロパティを設定 できません
コンボボックスリスト表示結果

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

VBA コンボボックス Valueプロパティを設定 できません
RowSourceプロパティで設定したリストに追加しようとした時のエラー

コードの記述例2

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

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

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

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

VBA コンボボックス Valueプロパティを設定 できません
VBA コンボボックス Valueプロパティを設定 できません

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

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

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

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

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

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

コードの記述例

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

表示イメージ

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

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

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

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

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

VBA コンボボックス Valueプロパティを設定 できません
ListRows プロパティに、ゼロより大きい数値を入力

コードの記述例

ComboBox1.ListRows = 3

表示イメージ

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

VBA コンボボックス Valueプロパティを設定 できません

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

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

VBA コンボボックス Valueプロパティを設定 できません
リスト幅のイメージ

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

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

VBA コンボボックス Valueプロパティを設定 できません
ListWidthとColumnWidthsプロパティに、長さを入力

コードの記述例

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

表示イメージ

VBA コンボボックス Valueプロパティを設定 できません
リスト幅を40ptに設定したときの様子

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

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

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

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

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

VBA コンボボックス Valueプロパティを設定 できません
Stylesプロパティに希望のスタイルに対応する定数を設定

コードの記述例

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

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

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

 各コントロールの概要

VBA ListIndexの初期値は?

構文:オブジェクト.ListIndex = num このプロパティの既定は「-1」で、この-1は「未選択の状態」なので指定する番号は「0→先頭」「1→2番目」「2→3番目」…となっており、本サンプルは2番目の文字列「エレクトロニカ」を既定にするので「1」を指定しています。

コンボボックスのプルダウン表示は?

設置したコンボボックスを右クリックし、[コントロールの書式設定]を選択します。 [コントロール]タブで入力範囲を「F2:F8」、リンクするセルを「A5」としました。 ドロップダウンリストの行数は「8」としました。 コンボボックスの[▼]ボタンをクリックすると、ドロップダウンリストが表示されます。

VBA リストボックス 選択されているかどうか?

ListIndex【リストインデックス】プロパティ ListIndex【リストインデックス】が返す値はリストの先頭行を「0」として、上から順番に数え行番号です。 リスト選択されていないときは「-1」を返すのでこれを利用すると項目が選択されているかどうかを調べることができます。 値の取得と設定ができます。