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
