Excel VBA ユーザーフォームにコントロールを追加する方法

コントロール作成/操作

ExcelVBAのユーザーフォームにコントロールを追加する方法をご説明します。

本記事では、詳細は割愛し各コントロールの簡単な追加方法の説明となります。

コントロールと言っても、ラベル、テキストボックス、チェックボックス、リストボックス、コンボボックス、コマンドボタンとたくさんあります。

追加方法には、ツールボックスで追加する方法とVBAで追加する方法があります。

また、それぞれのコントロールの用途も併せてご説明します。

その他のユーザーフォームの操作については、下記記事をご覧ください。

1.コントロールの種類と用途

コントロールには種類がたくさんあります。

ユーザーフォームもですが、コントロールも追加したら今後VBAで操作する事も想定して特定しやすい名前に変更する事をおすすめします。

コントロールの種類と、それぞれの用途についてご説明します。

コントロール名説明
ラベル項目名や、説明などの文字列を挿入する場合に使用します。
テキストボックス文字列や数値を入力、表示する場合に使用します。
また、入力、表示されている値の変更が可能です。
コンボボックスリスト機能を持ったテキストボックスです。
登録されたリストを選択して表示したり、入力された値をリストに登録が可能です。
リストボックスリストとなる文字列を表示する場合に使用します。
表示されたリストは、設定次第で1つから複数まで選択可能です。
チェックボックス複数の項目を選択してもらう場合や、有/無などの切り替えなどにも使用します。
オプションボタン複数の項目から1つの項目を選択してもらう場合に使用します。
フレームと併用することでグールプ化が可能です。
トグルボタンON/OFFなどの切り替えを明確にする時に使用します。
一度クリックすると凹んだ状態を維持し、再度クリックすると元に戻ります。
フレーム複数のコントロールを視覚的にグループ化する場合に使用します。
オプションボタンと併用すると、フレーム内のオプションボタンは1つしか

選択出来ません。
コマンドボタンクリックされた時に組み込まれたマクロを実行する場合に使用します。
タブストリップ同一の項目を複数のタブで共有する場合に使用します。
タブ毎に異なる項目を使用する場合はマルチページを使用します。
マルチページタブ毎に異なる項目を使用する場合に使用します。
同一の項目を複数のタブで共有する場合にはタブストリップを使用します。
スクロールバー垂直方向、水平方向にフォームの表示を移動する場合に使用します。
スピンボタン単体で使用せずテキストボックスなどと併用します。
◀︎▶︎をクリックされた場合に表示されている文字列や数値、日付を
変更するプログラムを実行するときに使用します。
イメージ画像を表示する場合に使用します。

2.ツールボックスで追加する方法

ツールボックスを使用して各コントロールを追加する方法です。

ツールボックスの表示方法

ツールボックスは次の図の赤線ように、実行ボタンや停止ボタンが並ぶメニュー内にあります。

もしくは、表示メニューから選択出来ます。

コントロールの追加方法

各コントロールを追加する基本操作は、ツールボックスで追加したいコントロールを選択し、ユーザーフォーム上で追加したい位置でクリックします。

次の図はラベルを追加しました。

3.VBAでコントロールを追加する方法

次はVBAでコントロールを追加する方法です。

ツールボックスでは追加したいコントロールを選択して、ユーザーフォーム上でクリックするだけでしたが、VBAではそれぞれのコントロールIDを指定して追加する事になります。

コントロールの追加

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

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

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

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

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

コントロールの種類一覧

コントロールの種類を指定する場合に以下一覧のコントロールIDで指定します。

すべてを覚えるのは大変ですので、都度確認して設定すると良いと思います。

コントロール名コントロールID
コマンドボタンForms.CommandButton.1
テキストボックスForms.TextBox.1
ラベルForms.Label.1
コンボボックスForms.ComboBox.1
リストボックスForms.ListBox.1
チェックボックスForms.CheckBox.1
オプションボタンForms.OptionButton.1
イメージForms.Image.1
トグルボタンForms.ToggleButton.1
フレームForms.Frame.1
スクロールバーForms.ScrollBar.1
スピンボタンForms.SpinButton.1
タブストリップForms.TabStrip.1
マルチページForms.MultiPage.1

4.VBAでコントロールを追加するサンプルコード

いくつか使用頻度の高いコントロールとプロパティ操作のサンプルコードを記載します。

基本的にはコントロールIDを変更する程度ですが、コントロールによって操作できるプロパティが異なりますのでご注意ください。

テキストボックス

Sub Sample1()

Dim MyCtrl As Object

With UserForm1

    Set MyCtrl = .Controls.Add("Forms.TextBox.1", "MyText", True)
    
    With MyCtrl
        .Top = 24               'Top位置
        .Left = 18              'Left位置
        .Height = 20            '高さ
        .Width = 100            '幅
        .Font.Name = "メイリオ" 'テキストのスタイル
        .TextAlign = 2          'テキストの位置
        .FontSize = 10          'テキストのサイズ
    End With

    .Show vbModeless

End With

End Sub

コマンドボタン

Sub Sample2()

Dim MyCtrl As Object

With UserForm1

    Set MyCtrl = .Controls.Add("Forms.CommandButton.1", "MyCommand", True)
    
    With MyCtrl
        .Top = 24               'Top位置
        .Left = 18              'Left位置
        .Height = 20            '高さ
        .Width = 100            '幅
        .Font.Name = "メイリオ" 'テキストのスタイル
        .FontSize = 10          'テキストのサイズ
        .Caption = "Sample"
    End With

    .Show vbModeless

End With

End Sub

ラベル

Sub Sample3()

Dim MyCtrl As Object

With UserForm1

    Set MyCtrl = .Controls.Add("Forms.Label.1", "MyLabel", True)
    
    With MyCtrl
        .Top = 24                           'Top位置
        .Left = 18                          'Left位置
        .Height = 20                        '高さ
        .Width = 100                        '幅
        .BorderStyle = fmBorderStyleSingle  '枠線
        .Font.Name = "メイリオ"             'テキストのスタイル
        .TextAlign = 2                      'テキストの位置
        .FontSize = 10                      'テキストのサイズ
        .Caption = "Sample"
    End With

    .Show vbModeless

End With

End Sub

コンボボックス

Sub Sample4()

Dim MyCtrl As Object

With UserForm1

    Set MyCtrl = .Controls.Add("Forms.ComboBox.1", "MyCombo", True)
    
    With MyCtrl
        .Top = 24                           'Top位置
        .Left = 18                          'Left位置
        .Height = 20                        '高さ
        .Width = 100                        '幅
        .Font.Name = "メイリオ"             'テキストのスタイル
        .TextAlign = 2                      'テキストの位置
        .FontSize = 10                      'テキストのサイズ
        
        .AddItem "ACB"
        .AddItem "DEF"
        .AddItem "GHI"
        
    End With

    .Show vbModeless

End With

End Sub

フレームとその中にオプションボタン

フレームを追加して、そのフレーム内にオプションボタンを追加しています。

それぞれオブジェクトが階層となっています。

また、フレームやオプションボタンはCaptionを使用する事で項目名を表示する事が可能です。

Sub Sample5()

Dim MyCtrl  As Object
Dim MyCtrl2 As Object

With UserForm1

    Set MyCtrl = .Controls.Add("Forms.Frame.1", "MyFrame", True)
    
    'フレームの追加
    With MyCtrl
        .Top = 24                           'Top位置
        .Left = 18                          'Left位置
        .Height = 50                        '高さ
        .Width = 100                        '幅
        .Caption = "フレーム"               'フレームのタイトル
        
        'フレーム内にオプションボタンを追加
        Set MyCtrl2 = .Controls.Add("Forms.OptionButton.1", "MyOption", True)
        
        With MyCtrl2
        
            .Top = 24                       'Top位置
            .Left = 18                      'Left位置
            .Height = 20                    '高さ
            .Width = 50                     '幅
            .Caption = "オプション"         'オプションの項目名
        End With
        
    End With

    .Show vbModeless

End With

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