VBAでのコンボボックス(ComboBox)の使い方とプロパティおよびイベント

Excel VBA からコンボボックス(ComboBox)コントロールを利用する方法です。コンボボックスは複数の項目をリスト形式で表示し、その中から一つまたは複数の項目を選択する場合に使用されるコントロールです。ここでは Excel のユーザーフォームで設置できるコンボボックスを VBA から使用する方法と、コンボボックスで設定可能なプロパティおよびイベントの一覧について解説します。

(Last modified: )

コンボボックスのプロパティ一覧

ユーザーフォームに設置するコンボボックスで利用可能なプロパティ一覧は次の通りです。

AutoSize
AutoTab
AutoWordSelect
BackColor
BackStyle
BorderColor
BorderStyle
BoundColumn
ColumnCount
ColumnHeads
ColumnWidths
ControlSource
ControlTipText
DragBehavior
DropButtonStyle
Enabled
EnterFieldBehavior
Font
ForeColor
Height
HelpContextID
HideSelection
IMEMode
Left
ListRows
ListStyle
ListWidth
Locked
MatchEntry
MatchRequired
MaxLength
MouseIcon
MousePointer
RowSource
SelectionMargin
ShowDropButtonWidth
SpecialEffect
Style
TabIndex
TabStop
Tag
Text
TextAlign
TextColumn
Top
TopIndex
Value
Visible
Width

コンボボックスの既定のプロパティは Value プロパティです。

いくつかのプロパティについてはこのあと簡単に解説します。

コンボボックスを作成し項目を追加する方法については「VBAを使ったコンボボックスの作成と項目の追加および削除」、コンボボックスで選択されている項目を取得する方法については「VBAを使ってコンボボックスで選択された項目や入力された値を取得する」を参照されてください。

コンボボックスで値の入力を許可するか設定する(Style)

コンボボックスで値の入力を許可するか設定するには Style プロパティを使用します。

オブジェクト.Style [= fmStyle ]

設定可能な値は次の通りです。

定数説明
fmStyleDropDownCombo0値の入力および値の選択ができます。
fmStyleDropDownList2値の選択だけができ直接入力はできません

コンボボックスではあらかじめ追加された項目を選択して値を設定する以外に、直接値を入力することもできます。もし直接入力は禁止し、リストボックスと同じように項目の選択だけを許可したい場合は Style プロパティに fmStyleDropDownList を設定してください。

具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャにコードを記述し、 1 つのコンボボックスは値の入力を許可し、もう 1 つのコンボボックスは値の入力を許可しないように設定しています。

Option Explicit

Private Sub UserForm_Initialize()
    Dim i As Integer
    
    For i = 1 To 5
        ComboBox1.AddItem "項目" & i
        ComboBox2.AddItem "項目" & i
    Next i

    ComboBox1.Style = fmStyleDropDownCombo
    ComboBox2.Style = fmStyleDropDownList
End Sub

コンボボックスで値の入力を許可するか設定する(Style))(1)

コンボボックスで値の入力を許可するか設定する(Style)(2)

ユーザーフォームを表示すると、コンボボックスが表示されます。

コンボボックスで値の入力を許可するか設定する(Style)(3)

上のコンボボックスは追加済みの項目を選択したり、直接値を入力することができます。

コンボボックスで値の入力を許可するか設定する(Style)(4)

コンボボックスで値の入力を許可するか設定する(Style)(5)

コンボボックスで値の入力を許可するか設定する(Style)(6)

下のコンボボックスは追加済みの項目を選択することはできますが、直接値を入力することはできません。

コンボボックスで値の入力を許可するか設定する(Style)(7)

コンボボックスで使用するフォントを設定する(Font)

コンボボックスに表示される文字列のフォントを設定するには Font プロパティに値を設定します。 Font プロパティは Font オブジェクトを返します。 Font オブジェクトのプロパティに対して値を設定していくことでフォントに関する設定を行うことができます。

Font オブジェクトには多くのプロパティが用意されていますが、よく使用されるものは次のプロパティです。

Name           フォント名
Size           フォントサイズ
Bold           太字
Italic         斜体
Underline      下線
Strikethrough  取り消し線

例えばフォント名を設定する場合は次のように記述します。例えば "MS UI Gothic" や "MS 明朝" などを代入します。

オブジェクト.Font.Name = フォント名を表す文字列

フォントサイズを設定する場合は次のように記述します。

オブジェクト.Font.Size = フォントサイズを表す数値

太字、斜体、取り消し線を設定する場合は、対応するプロパティに「True」を設定してください。

オブジェクト.Font.Bold = True
オブジェクト.Font.Italic = True
オブジェクト.Font.Strikethrough = True

下線を設定する場合は、次のいずれかの値を設定してください。

定数説明
xlUnderlineStyleDouble-4119二重下線
xlUnderlineStyleDoubleAccounting5二重下線(会計)
xlUnderlineStyleNone-4142下線なし
xlUnderlineStyleSingle2一重下線
xlUnderlineStyleSingleAccounting4一重下線(会計)
オブジェクト.Font.Underline = xlUnderlineStyleSingle

具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャにコードを記述し、コンボボックスのフォントサイズや書式を設定しています。

Option Explicit

Private Sub UserForm_Initialize()
    Dim i As Integer
    
    For i = 1 To 5
        ComboBox1.AddItem "項目" & i
    Next i

    ComboBox1.Font.Size = 16
    ComboBox1.Font.Bold = True
End Sub

コンボボックスで使用するフォントを設定する(Font)(1)

コンボボックスで使用するフォントを設定する(Font)(2)

ユーザーフォームを表示すると、表示されたコンボボックスに指定したフォントの設定が行われているのが確認できます。

コンボボックスで使用するフォントを設定する(Font)(3)

コンボボックスの文字色と背景色を設定する(ForeColor,BackColor)

コンボボックスで表示される文字列の文字色を設定するには ForeColor プロパティを使用します。コンボボックスの背景色を設定するには BackColor プロパティを使用します。

オブジェクト.ForeColor [= Long ]
オブジェクト.BackColor [= Long ]

対象のオブジェクトの ForeColor プロパティ、または BackColor プロパティに対して色を表す長整数型の値を代入します。値は Windows のシステムカラーを表す値や定数、または青緑赤の値を使った色を表す値を代入します。なお背景色を設定する場合は背景が不透明になっている必要があります。

具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャにコードを記述し、コンボボックスの文字色および背景色を設定しています。

Option Explicit

Private Sub UserForm_Initialize()
    Dim i As Integer
    
    For i = 1 To 5
        ComboBox1.AddItem "項目" & i
    Next i

    ComboBox1.ForeColor = RGB(255, 255, 255)
    ComboBox1.BackColor = RGB(63, 100, 127)
End Sub

コンボボックスの文字色と背景色を設定する(ForeColor,BackColor)(1)

コンボボックスの文字色と背景色を設定する(ForeColor,BackColor)(2)

ユーザーフォームを表示すると、表示されたコンボボックスに文字色および背景色の設定が行われているのが確認できます。

コンボボックスの文字色と背景色を設定する(ForeColor,BackColor)(3)

コンボボックスの表示位置を設定する(Top,Left)

コンボボックスが表示される位置を設定するには Top プロパティと Left プロパティに値を設定します。

オブジェクト.Top [= Single ]
オブジェクト.Left [= Single ]

Top プロパティにはユーザーフォームの上端からコンボボックスの上端までの距離、 Left プロパティにはユーザーフォームの左端からコンボボックスの左端までの距離をそれぞれ単精度浮動小数点型の数値で代入します。単位はポイントです。

具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャにコードを記述し、コンボボックスの位置を設定しています。

Option Explicit

Private Sub UserForm_Initialize()
    Dim i As Integer
    
    For i = 1 To 5
        ComboBox1.AddItem "項目" & i
    Next i

    ComboBox1.Top = 70
    ComboBox1.Left = 40
End Sub

コンボボックスの表示位置を設定する(Top,Left)(1)

コンボボックスの表示位置を設定する(Top,Left)(2)

ユーザーフォームを表示すると、表示されたコンボボックスが指定した位置で表示されているのが確認できます。

コンボボックスの表示位置を設定する(Top,Left)(3)

コンボボックスの幅と高さを設定する(Width,Height)

コンボボックスの幅と高さを設定するには幅については Width プロパティ、高さについては Height プロパティに値を設定します。

オブジェクト.Width [= Single ]
オブジェクト.Height [= Single ]

幅および高さをあらわす単精度浮動小数点型の数値を代入してください。単位はポイントです。

具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャにコードを記述し、コンボボックスの幅と高さを設定しています。

Option Explicit

Private Sub UserForm_Initialize()
    Dim i As Integer
    
    ComboBox1.Width = 180
    ComboBox1.Height = 30
    
    For i = 1 To 5
        ComboBox1.AddItem "項目" & i
    Next i
End Sub

コンボボックスの幅と高さを設定する(Width,Height)(1)

コンボボックスの幅と高さを設定する(Width,Height)(2)

ユーザーフォームを表示すると、表示されたコンボボックスの幅および高さが指定した値に設定されているのが確認できます。

コンボボックスの幅と高さを設定する(Width,Height)(3)

コンボボックスの水平方向の配置を設定する(TextAlign)

コンボボックスに表示した文字列の水平方向の配置を設定するには TextAlign プロパティに値を設定します。

オブジェクト.TextAlign [= fmTextAlign ]

代入可能な値は次の通りです。

定数説明
fmTextAlignLeft1左揃え
fmTextAlignCenter2中央揃え
fmTextAlignRight3右揃え

左揃えにする場合は fmTextAlignLeft 、中央揃えにする場合は fmTextAlignCenter 、右揃えにする場合は fmTextAlignRightを代入してください。

具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャにコードを記述し、コンボボックスの水平方向の揃え方を設定しています。

Option Explicit

Private Sub UserForm_Initialize()
    Dim i As Integer
        
    For i = 1 To 5
        ComboBox1.AddItem "項目" & i
    Next i

    ComboBox1.TextAlign = fmTextAlignRight
End Sub

コンボボックスの水平方向の配置を設定する(TextAlign)(1)

コンボボックスの水平方向の配置を設定する(TextAlign)(2)

ユーザーフォームを表示すると、表示されたコンボボックスの水平方向の配置が設定されているのが確認できます。

コンボボックスの水平方向の配置を設定する(TextAlign)(3)

コンボボックスを展開したときの最大行数を設定する(ListRows)

コンボボックスをクリックして展開表示したときに、最大いくつの行数を一度に表示するかを設定するには ListRows プロパティに値を設定します。

オブジェクト.ListRows [= Long ]

一度に表示する最大桁数を Long 型の整数で指定します。デフォルトの値は 8 となっています。例えばデフォルトのままで 8 を超える行数の項目をコンボボックスに追加している場合は、スクロールバーが表示されます。

具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャにコードを記述し、コンボボックスの最大行数を設定しています。

Option Explicit

Private Sub UserForm_Initialize()
    Dim i As Integer
        
    For i = 1 To 20
        ComboBox1.AddItem "項目" & i
        ComboBox2.AddItem "項目" & i
    Next i

    ComboBox2.ListRows = 15
End Sub

コンボボックスを展開したときの最大行数を設定する(ListRows)(1)

コンボボックスを展開したときの最大行数を設定する(ListRows)(2)

ユーザーフォームを表示すると、 2 つのコンボボックスが表示されます。上のコンボボックスは最大行数がデフォルトのままの 8 となっています。追加されている項目数は 8 よりも多いためスクロールバーが表示されます。

コンボボックスを展開したときの最大行数を設定する(ListRows)(3)

コンボボックスを展開したときの最大行数を設定する(ListRows)(4)

下のコンボボックスは最大行数が 15 となっているので、コンボボックスを展開したときにより多くの項目が表示されます。

コンボボックスを展開したときの最大行数を設定する(ListRows)(5)

コンボボックスのIMEモードを設定する(IMEMode)

コンボボックスで直接値を入力できるエリアにフォーカスが移動したときに、日本語入力方式(IME)を指定したモードに変更するには IMEMode プロパティに値を設定します。

オブジェクト.IMEMode [= fmIMEMode ]

設定可能な値には次の種類があります。

定数説明
fmIMEModeNoControl0IME を制御しない
fmIMEModeOn1IMEをオンにする
fmIMEModeOff2IMEをオフにする(英語モード)
fmIMEModeDisable3IMEをオフにする(キーボードでIMEをオンにできない)
fmIMEModeHiragana4全角ひらがなモードでIMEをオンにする
fmIMEModeKatakana5全角カタカナモードでIMEをオンにする
fmIMEModeKatakanaHalf6半角カタカナモードでIMEをオンにする
fmIMEModeAlphaFull7全角英数字モードでIMEをオンにする
fmIMEModeAlpha8半角英数字モードでIMEをオンにする
fmIMEModeHangulFull9全角ハングルモードでIMEをオンにする
fmIMEModeHangul10半角ハングルモードでIMEをオンにする

具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャにコードを記述し、コンボボックスの IME モードを「全角ひらがなモード」に設定しています。

Option Explicit

Private Sub UserForm_Initialize()
    ComboBox1.IMEMode = fmIMEModeHiragana
End Sub

コンボボックスのIMEモードを設定する(IMEMode)(1)

コンボボックスのIMEモードを設定する(IMEMode)(2)

ユーザーフォームを表示し、表示されたコンボボックスにフォーカスを移すと、 IME が「全角ひらがなモード」に設定されることが確認できます。

コンボボックスのIMEモードを設定する(IMEMode)(3)

コンボボックスのIMEモードを設定する(IMEMode)(4)

コンボボックスのイベント一覧

コンボボックスで発生するイベント一覧は次の通りです。

AfterUpdate
BeforeDragOver
BeforeDropOrPaste
BeforeUpdate
Change
Click
DblClick
DropButtonClick
Enter
Error
Exit
KeyDown
KeyPress
KeyUp
MouseDown
MouseMove
MouseUp

コンボボックスの既定のイベントは Change イベントです。

-- --

Excel のユーザーフォームで設置できるコンボボックスを VBA から使用する方法と、コンボボックスで設定可能なプロパティおよびイベントの一覧について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。