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 ]
設定可能な値は次の通りです。
定数 | 値 | 説明 |
---|---|---|
fmMultiSelectSingle | 0 | 一つの項目だけ選択できます |
fmMultiSelectMulti | 5 | 複数の項目が選択できます。項目をクリックするか Space キーを押すと項目の選択と解除ができます |
fmMultiSelectExtended | 2 | 複数の項目が選択できます。 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
ユーザーフォームを表示すると、リストボックスが表示されます。いずれかの項目をクリックして選択したあと、 Ctrl
キーを押しながら別の項目をクリックすると、複数の項目を同時に選択することができます。
リストボックスで使用するフォントを設定する(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 ListBox1.AddItem "項目" & i Next i ListBox1.Font.Size = 16 ListBox1.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 ListBox1.AddItem "項目" & i Next i ListBox1.ForeColor = RGB(255, 255, 255) ListBox1.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 ListBox1.AddItem "項目" & i Next i ListBox1.Top = 70 ListBox1.Left = 40 End Sub
ユーザーフォームを表示すると、表示されたリストボックスが指定した位置で表示されているのが確認できます。
リストボックスの幅と高さを設定する(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
ユーザーフォームを表示すると、表示されたリストボックスの幅および高さが指定した値に設定されているのが確認できます。
リストボックスの水平方向の配置を設定する(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 ListBox1.AddItem "項目" & i Next i ListBox1.TextAlign = fmTextAlignRight End Sub
ユーザーフォームを表示すると、表示されたリストボックスの水平方向の配置が設定されているのが確認できます。
リストボックスのサイズを自動調整して項目を完全に表示するか設定する(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
ユーザーフォームを表示すると、 2 つのリストボックスが表示されます。このとき左側のリストボックスはサイズの自動調整が行われ(高さが低くなっている)、右側のリストボックスはサイズの自動調整が行われません。
自動調整が行われたリストボックスは表示されている項目がぴったり表示されるようになっていますが、自動調整が行われていないリストボックスは表示されている最後の項目が少し切れて表示されています。
リストボックスのイベント一覧
リストボックスで発生するイベント一覧は次の通りです。
AfterUpdate BeforeDragOver BeforeDropOrPaste BeforeUpdate Change Click DblClick Enter Error Exit KeyDown KeyPress KeyUp MouseDown MouseMove MouseUp
リストボックスの既定のイベントは Click
イベントです。
-- --
Excel のユーザーフォームで設置できるリストボックスを VBA から使用する方法と、リストボックスで設定可能なプロパティおよびイベントの一覧について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
プログラミングや開発環境構築の解説サイトを運営しています。