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 ]
設定可能な値は次の通りです。
定数 | 値 | 説明 |
---|---|---|
fmStyleDropDownCombo | 0 | 値の入力および値の選択ができます。 |
fmStyleDropDownList | 2 | 値の選択だけができ直接入力はできません |
コンボボックスではあらかじめ追加された項目を選択して値を設定する以外に、直接値を入力することもできます。もし直接入力は禁止し、リストボックスと同じように項目の選択だけを許可したい場合は 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
ユーザーフォームを表示すると、コンボボックスが表示されます。
上のコンボボックスは追加済みの項目を選択したり、直接値を入力することができます。
下のコンボボックスは追加済みの項目を選択することはできますが、直接値を入力することはできません。
コンボボックスで使用するフォントを設定する(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 | 二重下線 |
xlUnderlineStyleDoubleAccounting | 5 | 二重下線(会計) |
xlUnderlineStyleNone | -4142 | 下線なし |
xlUnderlineStyleSingle | 2 | 一重下線 |
xlUnderlineStyleSingleAccounting | 4 | 一重下線(会計) |
オブジェクト.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
ユーザーフォームを表示すると、表示されたコンボボックスに指定したフォントの設定が行われているのが確認できます。
コンボボックスの文字色と背景色を設定する(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
ユーザーフォームを表示すると、表示されたコンボボックスに文字色および背景色の設定が行われているのが確認できます。
コンボボックスの表示位置を設定する(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
ユーザーフォームを表示すると、表示されたコンボボックスが指定した位置で表示されているのが確認できます。
コンボボックスの幅と高さを設定する(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
ユーザーフォームを表示すると、表示されたコンボボックスの幅および高さが指定した値に設定されているのが確認できます。
コンボボックスの水平方向の配置を設定する(TextAlign)
コンボボックスに表示した文字列の水平方向の配置を設定するには TextAlign
プロパティに値を設定します。
オブジェクト.TextAlign [= fmTextAlign ]
代入可能な値は次の通りです。
定数 | 値 | 説明 |
---|---|---|
fmTextAlignLeft | 1 | 左揃え |
fmTextAlignCenter | 2 | 中央揃え |
fmTextAlignRight | 3 | 右揃え |
左揃えにする場合は 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
ユーザーフォームを表示すると、表示されたコンボボックスの水平方向の配置が設定されているのが確認できます。
コンボボックスを展開したときの最大行数を設定する(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
ユーザーフォームを表示すると、 2 つのコンボボックスが表示されます。上のコンボボックスは最大行数がデフォルトのままの 8 となっています。追加されている項目数は 8 よりも多いためスクロールバーが表示されます。
下のコンボボックスは最大行数が 15 となっているので、コンボボックスを展開したときにより多くの項目が表示されます。
コンボボックスのIMEモードを設定する(IMEMode)
コンボボックスで直接値を入力できるエリアにフォーカスが移動したときに、日本語入力方式(IME)を指定したモードに変更するには IMEMode
プロパティに値を設定します。
オブジェクト.IMEMode [= fmIMEMode ]
設定可能な値には次の種類があります。
定数 | 値 | 説明 |
---|---|---|
fmIMEModeNoControl | 0 | IME を制御しない |
fmIMEModeOn | 1 | IMEをオンにする |
fmIMEModeOff | 2 | IMEをオフにする(英語モード) |
fmIMEModeDisable | 3 | IMEをオフにする(キーボードでIMEをオンにできない) |
fmIMEModeHiragana | 4 | 全角ひらがなモードでIMEをオンにする |
fmIMEModeKatakana | 5 | 全角カタカナモードでIMEをオンにする |
fmIMEModeKatakanaHalf | 6 | 半角カタカナモードでIMEをオンにする |
fmIMEModeAlphaFull | 7 | 全角英数字モードでIMEをオンにする |
fmIMEModeAlpha | 8 | 半角英数字モードでIMEをオンにする |
fmIMEModeHangulFull | 9 | 全角ハングルモードでIMEをオンにする |
fmIMEModeHangul | 10 | 半角ハングルモードでIMEをオンにする |
具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize
イベントに対するイベントプロシージャにコードを記述し、コンボボックスの IME モードを「全角ひらがなモード」に設定しています。
Option Explicit Private Sub UserForm_Initialize() ComboBox1.IMEMode = fmIMEModeHiragana End Sub
ユーザーフォームを表示し、表示されたコンボボックスにフォーカスを移すと、 IME が「全角ひらがなモード」に設定されることが確認できます。
コンボボックスのイベント一覧
コンボボックスで発生するイベント一覧は次の通りです。
AfterUpdate BeforeDragOver BeforeDropOrPaste BeforeUpdate Change Click DblClick DropButtonClick Enter Error Exit KeyDown KeyPress KeyUp MouseDown MouseMove MouseUp
コンボボックスの既定のイベントは Change
イベントです。
-- --
Excel のユーザーフォームで設置できるコンボボックスを VBA から使用する方法と、コンボボックスで設定可能なプロパティおよびイベントの一覧について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。