概要
MakeLabelOnUserFormは、UserForm上にMSFormsのラベルを動的に追加するためのExcel VBA汎用関数です。
高さ、幅、上位置、左位置、表示テキスト、フォントサイズ、コントロール名を引数で渡すと、Controls.Add("Forms.Label.1")でラベルを追加し、設定済みのMSForms.Labelを返します。
使う場面
- 入力項目数が変わるフォームで、ラベルをコードから生成したい
- 同じようなラベル作成処理を何行も書かず、1行の呼び出しにまとめたい
- フォームの表示内容をデータや設定に応じて動的に変えたい
- ラベルの位置、サイズ、表示テキスト、フォントサイズを一括で指定したい
処理イメージ図

使用例
UserForm_Initializeなどで呼び出すと、フォーム表示時にラベルを動的に配置できます。
Private Sub UserForm_Initialize()
Dim NewLabel As MSForms.Label
Set NewLabel = MakeLabelOnUserForm( _
Me, 18, 120, 20, 10, "受付日", 10, "lblReceptionDate")
End Subコピー可能な実装コード
' === Module: ModUserForm ===
Public Function MakeLabelOnUserForm(ByRef TargetForm As UserForm, _
ByRef Height As Double, _
ByRef Width As Double, _
ByRef Top As Double, _
ByRef Left As Double, _
ByRef Text As String, _
ByRef FontSize As Double, _
ByRef ControlName As String) _
As MSForms.Label
'ユーザーフォームにラベルを1つ設置する。
'1行でラベルのテキスト(Caption)、位置、サイズ、フォントサイズを設定できるようにする
'参考:https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/add-method-microsoft-forms
'20260420
'引数
'TargetForm ・・・対象のユーザーフォーム
'Height ・・・ラベルの高さ
'Width ・・・ラベルの幅
'Top ・・・ラベルの上位置
'Left ・・・ラベルの下位置
'Text ・・・ラベルのテキスト
'Fontsize ・・・ラベルのフォントサイズ
'ControlName・・・ラベルのコントロール名
Dim Output As MSForms.Label '追加するラベル
Set Output = TargetForm.Controls.Add("Forms.Label.1") 'ラベルの追加
With Output
.Name = ControlName
.Top = Top
.Left = Left
.Height = Height
.Width = Width
.Font.size = FontSize
.Caption = Text
End With
Set MakeLabelOnUserForm = Output
End Function初心者向けコード解説
TargetForm As UserFormは、ラベルを追加する対象のフォームです。使用例のようにフォーム自身から呼ぶ場合は、Meを渡します。
戻り値はMSForms.Labelです。作成したラベルを呼び出し元で受け取れるため、あとから色や罫線などを追加設定することもできます。
TargetForm.Controls.Add("Forms.Label.1")が、実際にラベルを追加している行です。MSFormsでは、フォーム上の部品をControlsコレクションとして扱います。
With Outputの中では、作成したラベルに対して.Name、.Top、.Left、.Height、.Width、.Font.Size、.Captionをまとめて設定しています。
Set MakeLabelOnUserForm = Outputでは、作成済みのラベルを関数の戻り値として返しています。オブジェクトを返すため、Setが必要です。
注意点
ControlNameはフォーム内で重複しない名前にします。既存コントロールと同じ名前を指定するとエラーの原因になります。TopとLeftはフォーム上の位置です。セル位置ではありません。Captionに表示する文字列はText引数で渡します。長い文字列を入れる場合は、ラベルの幅も合わせて調整します。- この関数はラベル作成だけを担当します。色、配置、フォント種類などを統一したい場合は、別の共通関数として分けると扱いやすくなります。
まとめ
MakeLabelOnUserFormを使うと、VBAのUserFormでラベルを動的に生成する処理を短く書けます。
入力項目を自動生成するフォームや、設定に応じて表示内容が変わるフォームを作るときに、再利用しやすい汎用プロシージャです。
