アクセス上位ページ
 
最近の更新内容
(2)-d.テキストボックス ⇐ [PREV]
[NEXT] ⇒ (2)-f.リストボックス

Excel VBA ≫ 5.ユーザーフォーム - 各種コントロール解説(2)-e.コンボボックス

コンボボックスのメソッドおよびプロパティ

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

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



このページで説明するコンボボックスのメソッド、および、プロパティは以下のとおりです。 コントロールオブジェクトが異なるだけで前のページで説明した内容と同じプロパティについては説明を割愛させていただきます。 かわりにリンクをまとめてありますのでリンク先をご覧になってください。



リスト項目の追加と削除

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

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


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

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

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

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

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


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

    <Initialize イベント内でのコンボボックスリスト追加例>
    With ComboBox1
        .AddItem "国語"
        .AddItem "数学"
        .AddItem "理科"
        .AddItem "社会"
    End With
    

    <コンボボックスにリスト項目が追加された様子> リストに4項目追加された様子 リストの途中に項目を挿入したい場合は引数 Index にその位置を指定します。 次の例では先頭から2番目の位置(引数 Index は1)に"英語"を追加する例です。

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

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

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

    【構文】
    cbo.Clear   ※引数なし


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

    【構文】
    cbo.RemoveItem Index

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


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

    削除前   削除後
    削除前  ⇒   削除後

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

    これ以降、下図のワークシート"科目リスト"が存在する前提で説明を行います。 説明の前提となるワークシート
    <プロパティウィンドウでの初期値設定例>
    RowSource プロパティにワークシート名とセル範囲を入力します。 RowSourceプロパティにワークシート名とセル範囲を入力 <コードの記述例>
    ComboBox1.RowSource = "科目リスト!A1:A4"
    

    <コンボボックスリスト表示結果> コンボボックスリスト表示結果
    RowSource プロパティでリスト項目を設定した場合、AddItem、Clear、RemoveItem メソッドによる項目の追加および削除は行えません。例えば、AddItem メソッドを使用すると次のようなエラーが発生します。RowSourceプロパティで設定したリストに追加しようとした時のエラー
    RowSource プロパティで設定したリスト項目を変更したい場合は、その参照先であるセルの値を変更する必要があります。 また、必要に応じてセルの参照範囲も変更します。

    <RowSource プロパティで設定したリスト項目に新規項目を追加する例>
    'ワークシートへ新規項目の追加
    With Worksheets("科目リスト")
        .Range("A2").Insert (xlDown)
        .Range("A2").Value = "英語"
    End With
    'セル参照範囲の変更
    ComboBox1.RowSource = "科目リスト!A1:A5"
    

    追加前   追加後
    追加前  ⇒  追加後

リスト項目の数

コンボボックスに追加したリスト項目数は ListCount プロパティで取得可能です。 このプロパティは取得のみ可能で、プロパティウィンドウからは設定できません。
  • ListCount プロパティ
  • <リスト項目数をメッセージボックスに表示する例>
    MsgBox "ListCount = " & ComboBox1.ListCount
    

    コンボボックスのリスト項目   表示結果
    リスト項目が5つある場合  ⇒    リスト項目数の表示結果


選択項目のインデックス

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

このプロパティは値を設定することも可能で、ゼロ以上の数値を設定するとそのインデックスに対応した項目がコンボボックス内に表示されます。 -1 を設定すると未選択状態(コンボボックス内は空欄)になります。 値を設定するときは、当然リスト項目が追加済みである必要があります。 このプロパティはプロパティウィンドウからは設定できません。
  • ListIndex プロパティ
  • <コードの記述例>
    'コンボボックスにリスト先頭項目を表示
    ComboBox1.ListIndex = 0
    '選択されている項目のインデックスを表示
    MsgBox "ListIndex = " & ComboBox1.ListIndex
    

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

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

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

リスト表示最大数

コンボボックスのリストをドロップダウンしたときに表示されるリスト項目の最大値は ListRows プロパティで設定可能です。 リスト内の項目数がこの最大値を超えると、リスト右端にスクロールバーが表示され、スクロールできるようになります。
  • ListRows プロパティ
  • <プロパティウィンドウでの初期値設定例>
    ListRows プロパティに、ゼロより大きい数値を入力します。 ListRows プロパティに、ゼロより大きい数値を入力 <コードの記述例>
    ComboBox1.RowSource = 3
    

    <RowSource = 3 で、リスト項目が4つのリストをドロップダウンした時の表示結果> リスト項目が4つのリストをドロップダウンした時の様子

リストの幅

コンボボックスのリストをドロップダウンしたときのリスト幅は ListWidth プロパティで設定可能です。 リスト1行の中には複数の列(カラム)を設定することが可能ですが、複数カラムの設定は別ページで行いたいと思っています。 以下の例ではリスト1行に1列という前提の説明となっています。
    リスト幅のイメージ
  • ListWidth プロパティ
  • <プロパティウィンドウでの初期値設定例>
    ListWidth プロパティに、リスト幅の長さを単位(pt、cmなど)付きで入力します。 また、列(カラム)が1の場合、リスト幅はカラム幅に等しくなるはずなので、ColumnWidths プロパティにも同じ値を入力してください。 これをしないと、リストに水平スクロールバーが表示されてしまいます。 ListWidthとColumnWidthsプロパティに、長さを入力 <コードの記述例>
    ComboBox1.ListWidth = "40 pt"
    ComboBox1.ColumnWidths = "40 pt"
    

    <リスト幅を40ptに設定したときの表示結果> リスト幅を40ptに設定したときの様子
    リスト幅を狭くする場合、垂直スクロールバーが表示されてリスト項目が隠れてしまわないように注意してください。

コンボボックスのスタイル

コンボボックスのスタイルはStyles プロパティで設定します。 スタイルと言っても、外見がかわるわけではなく、ユーザーからの文字入力を受け付けるかどうかが変わるだけです。
  • Styles プロパティ
  • <プロパティウィンドウでの初期値設定例>
    Styles プロパティの右端をクリックし、ドロップダウンリストから希望のスタイルに対応する定数を設定します。 Stylesプロパティに希望のスタイルに対応する定数を設定 <コードの記述例>
    'ドロップダウンリストとしてのみ使用
    ComboBox1.Style = fmStyleDropDownList
    

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


ドロップボタンのスタイル

ドロップボタンのスタイルはDropButtonStyle プロパティで設定することができます。
  • DropButtonStyle プロパティ
  • <プロパティウィンドウでの初期値設定例>
    DropButtonStyle プロパティの右端をクリックし、ドロップダウンリストから希望のスタイルに対応する定数を設定します。 DropButtonStyleプロパティに、希望のスタイルに対応する定数を設定 <コードの記述例>
    'ドロップボタンのスタイルを表示なしに設定
    ComboBox1.DropButtonStyle = fmDropButtonStylePlain
    

    DropButtonStyle定数一覧
    定数 表示イメージ
    fmDropButtonStylePlain 0 表示なし
    fmDropButtonStyleArrow 1 矢印
    fmDropButtonStyleEllipsis 2 省略記号
    fmDropButtonStyleReduce 3 アンダスコア文字

<サイト内関連リンク> 関連リンクもチェック!!
- コントロール一覧
- 各コントロールに共通のプロパティ
   (Width、Height、BackColor、Enabled、Visible、ControlTipText)
カテゴリ内ページ



Page
Top