Excel VBA ユーザーフォームにリストボックス追加とリスト作成、詳細設定の方法

コントロール作成/操作

ユーザーフォームにリストボックスを追加する方法、リストの作成と詳細設定の方法をご説明します。

リストボックスは複数のテキストを登録し、その中から選択できる機能のコントロールです。

セル範囲をリストに登録したり、1つしか選択できないように指定したり、複数選択可能にしたり、また、選択したリストを取得するなどが可能です。

追加するにはツールボックスから追加する方法と、VBAから追加する方法がありますので、順にご説明します。

その他のコントロールの操作については下記記事をご覧ください。

1.ツールボックスでリストボックスを追加する

まずは、ツールボックスでリストボックスを追加する方法です。

ユーザーフォームの作成がまだの方は、VBE→挿入タブ→ユーザーフォームを選択してUserFormを作成してください。

ツールボックスが表示されていない方は、メニューの実行ボタンや停止ボタンの並びにあるツールボックスボタンをクリックしてください。

もしくは表示タブのツールボックスを選択する事で表示出来ます。

ツールボックスのリストボックスを選択します。

選択したら、ユーザーフォーム上の設置したい位置でユーザーフォームをクリックします。

すると下記図のように、リストボックスが追加されます。

2.プロパティウィンドウで詳細設定する

リストボックスを大まかな位置に設置したら、次はプロパティウィンドウで詳細設定をします。

詳細設定と言ってもプロパティの種類が多すぎますので、一覧で簡単に説明します。

プロパティ一覧

定数の説明があるプロパティは赤字になっています。

プロパティ名説明
オブジェクト名コントロールの名前を指定します。
BackColor背景色をシステムまたは、カラーパレットで指定します。
BorderColor枠線の色をシステムまたは、カラーパレットで指定します。
BorderStyle枠線のスタイルを指定します。
BoundColumn選択されている行の何列目の値をリストボックスの値として格納するか指定します。
ColumnCount表示する列の数を指定します。
ColumnHeads列見出しを表示するか
ColumnWidths複数列ある場合、各列の幅をポイント単位または、指定した単位で指定します。
ControlSourceリンクさせるセルのアドレスを指定します。
ControlTipTextマウスポインターを上に置いたとき、表示する文字列を指定します。
Enabledイベントに対応するか指定します。
Font文字列のフォントの種類やサイズを指定します。
ForeColor文字列の色を指定します。
Height高さを指定します。
IMEMode日本語入力システムの実行モードを指定します。
IntegralHeight表示されるテキストの長さに合わせて、サイズを自動調整するか指定します。
Left位置をフォームの左端を0として、ポイント単位で指定します。
ListStyleリストボックスの表示スタイルを指定します。
Lockedリストボックスが編集できるか指定します。
MatchEntryリストの項目を検索する際の規則を指定します。
MouseIconマウスポインターがリストボックス上にあるときアイコンファイルを指定します。
MousePointerマウスポインターがリストボックスに移動したとき、表示されるポインターの種類を指定します。
MultiSelectリストボックスのリストを複数選択できるようにするか、また選択方法を指定します。
RowSourceリストとしてリンクするセル範囲を指定します。
SpecialEffectリストボックスの表面の立体表示を指定します。
TabIndexリストボックスにフォーカスをあてる順番を指定します。
TabStopTabIndexの有効/無効を指定します。
Text表示する文字列を指定します。
TextAlignテキストボックス部分の文字列の位置を指定します。
TextColumn表示されている複数列の値のTextプロパティに格納する列を指定します。
Top位置をフォームの上端を0としてポイント単位で指定します。
TopIndexリストの先頭に表示される項目を指定します。
Value文字列を指定します。
Visible表示/非表示を切り替えます。
Width幅をポイント単位で指定します。
BorderStyleの定数一覧

fmBorderStyleNone」が既定値となります。

定数名説明
fmBorderStyleNone0枠線を表示に指定します。
fmBorderStyleSingle1枠線を非表示に指定します。
IMEModeの定数一覧

fmIMEModeNoControl」が既定値となります。

定数名説明
fmIMEModeNoControl0IMEのモードを変更しません。
fmIMEModeOn1IMEをオンにします。
fmIMEModeOff2IMEをオフにして英語モードにします。
fmIMEModeDisable3IMEをオフにし、キー操作によってIMEをオンにできません。
fmIMEModeHiragana4全角ひらがなモードでIMEをオンにします。
fmIMEModeKatakana5全角カタカナモードでIMEをオンにします。
fmIMEModeKatakanaHalf6半角カタカナモードでIMEをオンにします。
fmIMEModeAlphaFull7全角英数モードでIMEをオンにします。
fmIMEModeAlpha8半角英数モードでIMEをオンにします。
ListStyle の定数一覧
定数名内容
fmListStylePlain0標準のリストボックスを表示します。
fmListStyleOption1各項目の先頭にオプションボタンが表示されます。
MatchEntryの定数一覧
定数名説明
fmMatchEntryFirstLetter0入力した文字と1文字目が一致する候補を検索します。
fmMatchEntryComplete1入力した文字とすべて一致する項目を検索します。
fmMatchEntryNone2マッチングを行いません。
MousePointerの定数一覧

fmMousePointerDefault」が既定値となります。

定数名内容
fmMousePointerDefault0標準ポインター
fmMousePointerArrow1矢印
fmMousePointerCross2十字ポインター
fmMousePointerIBeam3Iビーム
fmMousePointerSizeNESW6右上と左下を指し示す両端矢印
fmMousePointerSizeNS7上と下を指し示す両端矢印
fmMousePointerSizeNWSE8左上と右下を指し示す両端矢印
fmMousePointerSizeWE9左と右を指し示す両端矢印
fmMousePointerUpArrow10上向き矢印
fmMousePointerHourglass11砂時計
fmMousePointerNoDrop12ドラッグされているオブジェクトに重なった不可シンボル無効なターゲット。
fmMousePointerAppStarting13矢印と砂時計
fmMousePointerHelp14矢印と疑問符
fmMousePointerSizeAll15サイズ変更カーソル (上下左右を指し示す矢印)
fmMousePointerCustom99MouseIcon プロパティで指定されたアイコンを使用します。
MultiSelectの定数一覧

fmMultiSelectSingle」が既定値となります。

定数名説明
fmMultiSelectSingle0複数選択できません。
fmMultiSelectMulti1複数選択できます。
fmMultiSelectExtended2複数選択可能でCtrlキーかShiftキーを押しながら選択します。
TextAlignの定数一覧

fmTextAlignLeft」が既定値となります。

定数名位置
fmTextAlignLeft1左揃え
fmTextAlignCenter2中央揃え
fmTextAlignRight3右揃え

3.VBAでリストボックスを追加する方法

VBAでコントロールの追加は次のように記述します。

Set Object = UserForm1.Controls.Add("Forms.ListBox.1","コントロールの名前","オブジェクトの表示")

コントロールオブジェクトに「Addメソッド」で追加して操作します。

リストボックスのコントロールIDは「Forms.ListBox.1」です。

コントロールの種類とコントロールの名前、オブジェクトの表示をTrue、Falseで指定します。

オブジェクトの表示」は省略可能で、省略した場合は既定値がTrueになります。

4.サンプルコード

リストボックスを追加するサンプルコード

何も指定しないと左上にデフォルト設定の状態で追加されます。

また、リストボックスを追加する際にオブジェクト名に、リストボックスと判定できるような名前に指定する事をおすすめします。

追加後にVBAでコントロールを特定する際に簡単になります。

Sub Sample1()

Dim MyCtrl As Object

With UserForm1

    Set MyCtrl = .Controls.Add("Forms.ListBox.1", "MyList", True)
    
    .Show vbModeless

End With

End Sub

リストボックスにリストを追加する

リストボックスにリストを追加する場合は、「AddItem」で追加します。

追加する対象が直接、セル、配列と変わっても基本的には同じです。

テキストの長さがリストの幅を超えるとデフォルト設定では水平方向にスクロールバーが表示されます。

また、リストの数がリストボックスの高さを超えた場合は垂直方向にスクロールバーが表示されます。

直接リストを追加する

スクロールバーを表示させないようにリストの幅を「.Width = 100」で調節しています。

Sub Sample2()

Dim MyCtrl As Object

With UserForm1

    Set MyCtrl = .Controls.Add("Forms.ListBox.1", "MyList", True)
    
    With MyCtrl
    
        .AddItem "りんご"
        .AddItem "みかん"
        .AddItem "ぶどう"
        .AddItem "スイカ"
        
        .Width = 100 'リストの幅を調節
        
    End With
    
    .Show vbModeless

End With

End Sub
セルの値をリストに追加する
Sub Sample3()

Dim MyCtrl As Object
Dim i      As Long

With UserForm1

    Set MyCtrl = .Controls.Add("Forms.ListBox.1", "MyList", True)
    
    With MyCtrl
        
        For i = 1 To 4
        
            .AddItem Cells(i, 1).Value
        
        Next i
        
        .Width = 100 'リストの幅を調節
    
    End With
    
    .Show vbModeless

End With

End Sub
配列の値をリストに追加する

1次元の配列を作成して、リストボックスのリストにループで追加します。

Sub Sample4()

Dim MyCtrl      As Object
Dim i           As Long
Dim MyArray()   As Variant

ReDim MyArray(0 To 3)
MyArray(0) = "りんご"
MyArray(1) = "みかん"
MyArray(2) = "ぶどう"
MyArray(3) = "スイカ"

With UserForm1

    Set MyCtrl = .Controls.Add("Forms.ListBox.1", "MyList", True)
    
    With MyCtrl
        
        For i = 0 To 3
        
            .AddItem MyArray(i)
        
        Next i
        
        .Width = 100 'リストの幅を調節
    
    End With
    
    .Show vbModeless

End With

End Sub

リストボックスの詳細設定をするサンプルコード

.MultiSelect = fmMultiSelectExtended」でCtrlもしくはShiftを押しながら複数選択可能に設定しています。

Sub Sample5()

Dim MyCtrl      As Object
Dim i           As Long
Dim MyArray()   As Variant

ReDim MyArray(0 To 3)
MyArray(0) = "りんご"
MyArray(1) = "みかん"
MyArray(2) = "ぶどう"
MyArray(3) = "スイカ"

With UserForm1

    Set MyCtrl = .Controls.Add("Forms.ListBox.1", "MyList", True)
    
    With MyCtrl
        .Top = 24                           'Top位置
        .Left = 18                          'Left位置
        .Height = 100                        '高さ
        .Width = 100                        '幅
        .BorderStyle = fmBorderStyleSingle  '枠線
        .ForeColor = RGB(0, 0, 0)           '文字色
        .Font.Name = "メイリオ"             'テキストのスタイル
        .TextAlign = 2                      'テキストの位置
        .FontSize = 10                      'テキストのサイズ
        .IMEMode = fmIMEModeHiragana        'IMEをひらがなに指定する
        .MultiSelect = fmMultiSelectExtended '複数選択可能
        .TabIndex = 1
        
        For i = 0 To 3 'リスト追加
        
            .AddItem MyArray(i)
        
        Next i
        
    End With

    .Show vbModeless

End With

End Sub
タイトルとURLをコピーしました