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

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

(Last modified: )

リストボックスのプロパティ一覧

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

BackColor
BorderColor
BorderStyle
BoundColumn
ColumnCount
ColumnHeads
ColumnWidths
ControlSource
ControlTipText
Enabled
Font
ForeColor
Height
HelpContextID
IMEMode
IntegralHeight
Left
ListStyle
Locked
MatchEntry
MouseIcon
MousePointer
MultiSelect
RowSource
SpecialEffect
TabIndex
TabStop
Tag
Text
TextAlign
TextColumn
Top
TopIndex
Value
Visible
Width

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

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

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

リストボックスで複数の項目を選択できるように設定する(MultiSelect)

リストボックスで複数の項目を同時に選択できるようにするには MultiSelect プロパティを使用します。

オブジェクト.MultiSelect [= fmMultiSelect ]

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

定数説明
fmMultiSelectSingle0一つの項目だけ選択できます
fmMultiSelectMulti5複数の項目が選択できます。項目をクリックするか Space キーを押すと項目の選択と解除ができます
fmMultiSelectExtended2複数の項目が選択できます。 Shift キーを押しながらクリックして連続した範囲の項目を選択したり、 Ctrl キーを押しながらクリックして複数の項目の選択と解除ができます

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

Option Explicit

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

    ListBox1.MultiSelect = fmMultiSelectExtended
End Sub

リストボックスで複数の項目を選択できるように設定する(MultiSelect)(1)

リストボックスで複数の項目を選択できるように設定する(MultiSelect)(2)

ユーザーフォームを表示すると、リストボックスが表示されます。いずれかの項目をクリックして選択したあと、 Ctrl キーを押しながら別の項目をクリックすると、複数の項目を同時に選択することができます。

リストボックスで複数の項目を選択できるように設定する(MultiSelect)(3)

リストボックスで複数の項目を選択できるように設定する(MultiSelect)(4)

リストボックスで使用するフォントを設定する(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
        ListBox1.AddItem "項目" & i
    Next i

    ListBox1.Font.Size = 16
    ListBox1.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
        ListBox1.AddItem "項目" & i
    Next i

    ListBox1.ForeColor = RGB(255, 255, 255)
    ListBox1.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
        ListBox1.AddItem "項目" & i
    Next i

    ListBox1.Top = 70
    ListBox1.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
    
    ListBox1.Width = 100
    ListBox1.Height = 100
    
    For i = 1 To 5
        ListBox1.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
        ListBox1.AddItem "項目" & i
    Next i

    ListBox1.TextAlign = fmTextAlignRight
End Sub

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

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

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

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

リストボックスのサイズを自動調整して項目を完全に表示するか設定する(IntegralHeight)

リストボックスのサイズを自動調整して、リストの最後の項目を完全な状態で表示するかどうか設定するには IntegralHeight プロパティに値を設定します。

オブジェクト.IntegralHeight [= Boolean ]

「True」を設定した場合は項目が完全に表示されるようにリストのサイズを自動調整します。「False」を設定した場合はリストのサイズを自動調整しません。デフォルトの値は「True」です。

リストボックスのサイズが自動で変更されてしまうと問題がある場合に「False」を設定してください。

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

Option Explicit

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

    ListBox1.TextAlign = fmTextAlignRight
End Sub

リストボックスのサイズを自動調整して項目を完全に表示するか設定する(IntegralHeight)(1)

リストボックスのサイズを自動調整して項目を完全に表示するか設定する(IntegralHeight)(2)

ユーザーフォームを表示すると、 2 つのリストボックスが表示されます。このとき左側のリストボックスはサイズの自動調整が行われ(高さが低くなっている)、右側のリストボックスはサイズの自動調整が行われません。

リストボックスのサイズを自動調整して項目を完全に表示するか設定する(IntegralHeight)(3)

自動調整が行われたリストボックスは表示されている項目がぴったり表示されるようになっていますが、自動調整が行われていないリストボックスは表示されている最後の項目が少し切れて表示されています。

リストボックスのサイズを自動調整して項目を完全に表示するか設定する(IntegralHeight)(4)

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

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

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

リストボックスの既定のイベントは Click イベントです。

-- --

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

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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