Softex CelwareTech Blog
Excel VBA2026-05-14

ユーザーフォームにラベルを動的追加するExcel VBA汎用プロシージャ

UserForm上にMSForms.Labelを追加し、位置・サイズ・表示テキストをまとめて設定するExcel VBA汎用プロシージャを解説します。

Excel VBA汎用プロシージャUserFormMSFormsラベル

概要

MakeLabelOnUserFormは、UserForm上にMSFormsのラベルを動的に追加するためのExcel VBA汎用関数です。

高さ、幅、上位置、左位置、表示テキスト、フォントサイズ、コントロール名を引数で渡すと、Controls.Add("Forms.Label.1")でラベルを追加し、設定済みのMSForms.Labelを返します。

使う場面

  • 入力項目数が変わるフォームで、ラベルをコードから生成したい
  • 同じようなラベル作成処理を何行も書かず、1行の呼び出しにまとめたい
  • フォームの表示内容をデータや設定に応じて動的に変えたい
  • ラベルの位置、サイズ、表示テキスト、フォントサイズを一括で指定したい

処理イメージ図

MakeLabelOnUserFormのラベル追加イメージ

使用例

UserForm_Initializeなどで呼び出すと、フォーム表示時にラベルを動的に配置できます。

使用例
vba
Private Sub UserForm_Initialize()
    Dim NewLabel As MSForms.Label

    Set NewLabel = MakeLabelOnUserForm( _
        Me, 18, 120, 20, 10, "受付日", 10, "lblReceptionDate")
End Sub

コピー可能な実装コード

MakeLabelOnUserForm.bas
vba
' === 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はフォーム内で重複しない名前にします。既存コントロールと同じ名前を指定するとエラーの原因になります。
  • TopLeftはフォーム上の位置です。セル位置ではありません。
  • Captionに表示する文字列はText引数で渡します。長い文字列を入れる場合は、ラベルの幅も合わせて調整します。
  • この関数はラベル作成だけを担当します。色、配置、フォント種類などを統一したい場合は、別の共通関数として分けると扱いやすくなります。

まとめ

MakeLabelOnUserFormを使うと、VBAUserFormでラベルを動的に生成する処理を短く書けます。

入力項目を自動生成するフォームや、設定に応じて表示内容が変わるフォームを作るときに、再利用しやすい汎用プロシージャです。

この技術で業務改善しませんか?

Excel VBA・GAS・Webアプリで業務の自動化ツールを開発しています。 「こんなことできる?」というご相談だけでもお気軽にどうぞ。

無料相談はこちら →