Excel VBA ユーザーフォーム上のコントロールの数と名前と種類を取得する

コントロール作成/操作

ユーザーフォーム上に設置されているコントロールをすべて取得する方法についてご説明します。

コントロールの数が多い場合や、同じ種類のコントロールをまとめて操作したい場合に、一つ一つコントロールを指定して操作していては大変ですので、まとめて取得する方法知っておくと非常に便利です。

コントロールの名前、種類、設置されているコントロールの数など取得するサンプルコードも記載します。

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

1.コントロールの取得方法

コントロールを取得するには「Controls」コレクションを使用します。

指定したユーザーフォーム上のコントロールをすべて取得するには「For Each In Next」でループして取得します。

もちろんコントロールの数を取得する事で「For Next」のループでも可能です。

コントロールの数を取得する

コントロールの数を取得するには「Count」プロパティで取得します。

次のように記述します。

Controls.Count

コントロールの名前を取得する

コントロールの名前を取得するには「Name」プロパティで取得が可能です。

次のように記述します。

Control.Name

コントロールの種類を取得する

コントロールの種類を取得するには「TypeName」関数を使用します。

次のように記述します。

TypeName(Control)

2.サンプルコード

ユーザーフォーム上のコントロールをすべて取得するサンプルコードです。

今回はラベル5個、テキストボックス5個、コンボボックス1個、リストボックス1個、コマンドボタン2個の以下のようなユーザーフォームを用意しました。

名前を取得するサンプルコード

Sub Sample1()

Dim MyCtrl As Object
Dim MyStr  As String

With UserForm1

    For Each MyCtrl In .Controls 'ユーザーフォーム上のコントロールをループ
    
        MyStr = MyStr & MyCtrl.Name & vbCrLf 'コントロールの名前を変数に格納
    
    Next
    
    MsgBox MyStr
    
End With

End Sub

種類を取得するサンプルコード

Sub Sample2()

Dim MyCtrl As Object
Dim MyStr  As String

With UserForm1

    For Each MyCtrl In .Controls 'ユーザーフォーム上のコントロールをループ
    
        MyStr = MyStr & TypeName(MyCtrl) & vbCrLf 'コントロールの種類を変数に格納
    
    Next
    
    MsgBox MyStr
    
End With

End Sub

For Nextでループして取得する方法

For Nextでループする場合は、コントロールの数を取得してループする必要があります。

コントロール数は「Controls.Count」で取得します。

Sub Sample3()

Dim MyCtrl As Object
Dim MyStr  As String
Dim i      As Long

With UserForm1

    For i = 0 To .Controls.Count - 1 'ユーザーフォーム上のコントロール数分をループ
        
        'コントロールの「名前/種類」を変数に格納
        MyStr = MyStr & .Controls(i).Name & " / " & TypeName(.Controls(i)) & vbCrLf
    
    Next i
    
    MsgBox MyStr
    
End With

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