Excel VBA ユーザーフォームにラベルの追加と詳細設定する方法

コントロール作成/操作

ユーザーフォームにラベル(Label)を追加する方法と、詳細設定の方法をご説明します。

ラベルはユーザーフォーム内のサブタイトルや、各コントロールの項目名、注意書きなどの文字列を表示する際に使用します。

そのため使用頻度の高いコントロールかと思います。

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

また、サンプルコードでは基本的な追加と詳細設定から、ループを使用して複数のコントロールの追加や、詳細設定するサンプルコードも記載したいと思います。

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

1.ツールボックスでラベルを追加する

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

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

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

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

ツールボックスの「A」というアイコンがラベルですので、選択します。

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

すると下記図のように、ラベルが追加されます。

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

ラベルを大まかな位置に設置したら、次はプロパティウィンドウで細かい設定をします。

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

プロパティ一覧

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

プロパティ名説明
オブジェクト名コントロールの名前を指定します。
Acceleratorコントロールのアクセラレータキーを指定します。
AutoSizeラベルの文字列に合わせて文字列の表示領域を自動で調整するか指定します。
BackColorラベルの背景色をシステムまたは、カラーパレットで指定します。
BackStyleラベルの背景のスタイルを指定します。
BorderColorラベルの背景枠線の色をシステムまたは、カラーパレットで指定します。
BorderStyleラベルの背景枠線のスタイルを指定します。
Captionラベルに文字列を指定します。
ControlTipTextマウスポインターをラベルの上に置いたとき、表示する文字列を指定します。
Enabled通常の表示と操作が出来るか指定します。
Fontラベルに設定された文字列のフォントの種類やサイズを指定します。
ForeColorラベルに設定された文字列の色を指定します。
Heightラベルの高さを指定します。
HelpConTextID指定したオブジェクトと関連付けるヘルプのコンテキストIDを指定します。
Leftラベルの位置をフォームの左端を0として、ポイント単位で指定します。
MouseIconマウスポインターがラベル上にあるときの、アイコンファイルを指定します。
MousePointerマウスポインターがラベルに移動したとき表示されるポインターの種類を指定します。
Pictureラベルの背景に設定する画像ファイルを指定します。
PicturePositionピクチャのキャプションに対する相対位置を指定します。
SpecialEffectラベルの表面の立体表示を指定します。
TabIndexラベルにフォーカスをあてる順番を指定します。
TabStopTabIndexの有効/無効を指定します。
TextAlignラベルに設定されたキャプションのラベル内の位置を指定します。
Topラベルの位置をフォームの上端を0としてポイント単位で指定します。
Visibleラベルの表示/非表示を切り替えます。
Widthラベルの幅をポイント単位で指定します。
WordWrapラベル内の文字列がラベルの幅を超えたときの折り返しを指定します。
BackStyleの定数一覧

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

定数名説明
fmBackStyleTransparent0背景を透明に指定します。
fmBackStyleOpaque1背景を不透明に指定します。
BorderStyleの定数一覧

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

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

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

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

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

定数名内容
fmPicturePositionLeftTop0ピクチャがキャプションの左側に表示され、上端に配置されます。
fmPicturePositionLeftCenter1ピクチャがキャプションの左側に表示され、中央に配置されます。
fmPicturePositionLeftBottom2ピクチャがキャプションの左側に表示され、下端に配置されます。
fmPicturePositionRightTop3ピクチャがキャプションの右側に表示され、上端に配置されます。
fmPicturePositionRightCenter4ピクチャがキャプションの右側に表示され、中央に配置されます。
fmPicturePositionRightBottom5ピクチャがキャプションの右側に表示され、下端に配置されます。
fmPicturePositionAboveLeft6ピクチャがキャプションの上に表示され、左端に配置されます。
fmPicturePositionAboveCenter7ピクチャがキャプションの上に表示され、中央に配置されます。
fmPicturePositionAboveRight8ピクチャがキャプションの上に表示され、右端に配置されます。
fmPicturePositionBelowLeft9ピクチャがキャプションの下に表示され、左端に配置されます。
fmPicturePositionBelowCenter10ピクチャがキャプションの下に表示され、中央に配置されます。
fmPicturePositionBelowRight11ピクチャがキャプションの下に表示され、右端に配置されます。
fmPicturePositionCenter12コントロールの中央に表示され、水平および垂直方向の中央に配置されます。
TextAlignの定数一覧

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

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

3.VBAでラベルを追加する方法

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

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

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

ラベルのコントロールIDは「Forms.Label.1」です。

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

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

4.サンプルコード

ラベルを追加するサンプルコード

Caption以外何も指定しないと左上に枠線もない状態で追加されます。

また、ラベルを追加する際にオブジェクト名に、ラベルコントロールと判定できるような名前に指定する事をおすすめします。

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

Sub Sample1()

Dim MyCtrl As Object

With UserForm1

    Set MyCtrl = .Controls.Add("Forms.Label.1", "MyLabel", True)
    
    With MyCtrl
    
        .Caption = "Sample"
        
    End With
    
    .Show vbModeless

End With

End Sub

ラベルの詳細設定をするサンプルコード

Sub Sample2()

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  '枠線
        .BackColor = RGB(128, 128, 128)     '背景色
        .ForeColor = RGB(255, 255, 255)     '文字色
        .Font.Name = "メイリオ"             'テキストのスタイル
        .TextAlign = 2                      'テキストの位置
        .FontSize = 10                      'テキストのサイズ
        .Caption = "Sample"
    End With

    .Show vbModeless

End With

End Sub

ループで複数のラベルを追加するサンプルコード

ループで複数追加する場合には「For Next」でカウントアップしながら、ラベルのオブジェクト名にも番号をカウントアップすることをおすすめします。

追加後に操作する際に、特定が簡単になります。

Sub Sample3()

Dim MyCtrl  As Object
Dim i       As Long

With UserForm1

    For i = 1 To 5
    
        'ラベルの名前に番号を付ける
        Set MyCtrl = .Controls.Add("Forms.Label.1", "MyLabel" & i, True)
        
        With MyCtrl
            .Top = 24 * i                       'Top位置(表示位置を移動する)
            .Left = 18                          'Left位置
            .Height = 20                        '高さ
            .Width = 100                        '幅
            .BorderStyle = fmBorderStyleSingle  '枠線
            .BackColor = RGB(128, 128, 128)     '背景色
            .ForeColor = RGB(255, 255, 255)     '文字色
            .Font.Name = "メイリオ"             'テキストのスタイル
            .TextAlign = 2                      'テキストの位置
            .FontSize = 10                      'テキストのサイズ
            .Caption = "Sample" & i             '表示文字列に番号を付ける
        End With
    
    Next i
    
    .Show vbModeless

End With

End Sub

設置済みラベルを取得して詳細設定するサンプルコード

今回はSample3のコードを使用して追加後に、取得して詳細設定を行います。

追加には「For Next」を使用していますが、取得には「For Each In Next」のループでコントロールを取得しています。

もちろん「For Next」でも取得可能です。

その場合はラベルを取得するには「Controls(“コントロール名”)」で指定します。

Sub Sample4()

Dim MyCtrl  As Object
Dim i       As Long
Dim GetCtrl As Object

With UserForm1
    
    'ラベルを5個追加
    For i = 1 To 5
    
        'ラベルの名前に番号を付ける
        Set MyCtrl = .Controls.Add("Forms.Label.1", "MyLabel" & i, True)
        
        With MyCtrl
            .Caption = "Sample" 'すべてSampleと表示する
        End With
            
    Next i
    
    .Show vbModeless
    
    'ラベルを取得して詳細設定する
    i = 1
    
    For Each GetCtrl In .Controls
        
        With GetCtrl
        
            If InStr(.Name, "MyLabel") <> 0 Then
        
                .Top = 24 * i                       'Top位置(表示位置を移動する)
                .Left = 18                          'Left位置
                .Height = 20                        '高さ
                .Width = 100                        '幅
                .BorderStyle = fmBorderStyleSingle  '枠線
                .BackColor = RGB(128, 128, 128)     '背景色
                .ForeColor = RGB(255, 255, 255)     '文字色
                .Font.Name = "メイリオ"             'テキストのスタイル
                .TextAlign = 2                      'テキストの位置
                .FontSize = 10                      'テキストのサイズ
                .Caption = "Sample" & i             '表示文字列に番号を付ける
                
            End If
            
            i = i + 1
        
        End With
        
    Next

End With

End Sub

サンプルコードのポイントとなる部分の説明です。

回りくどいコードになっているため長くなっていますが、特徴は追加には「For Next」でカウントアップしながらラベルのオブジェクト名を「“MyLabel” & i」と指定しています。

これにより以後VBAで取得する際に、条件分岐で取得が簡単になります。

また、取得する場合に今回は「For Each In Next」でUserForm上のコントロールをすべて取得して、「IF文」で名前に「MyLabel」が含まれている場合のみ詳細設定するように記述しています。

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