コントロールの状態をチェックする


UserForm上にたくさんのチェックボックスを配置したとします。[OK]ボタンをクリックしたときに、どの項目がオンになっているかを調べるときは、コントロールをひとつずつチェックするのではなく、すべてのコントロールを返すControlsコレクションを使いましょう。たとえば次のようなケースです。

コマンドボタンをクリックしたときに、どのチェックボックスがオンになっているかを調べるには次のようにします。

Private Sub CommandButton1_Click()
    Dim c, buf As String
    For Each c In Controls
        If Left(c.Name, 8) = "CheckBox" Then
            If c.Value Then buf = buf & c.Caption & vbCrLf
        End If
    Next c
    MsgBox buf & "がオンです"
End Sub

Controlsコレクションは、フォーム上に配置されているすべてのコントロールを返します。上記の場合は、5つのチェックボックスと1つのコマンドボタンです。コントロールを配置すると、一般的には「CheckBox1」や「CommandButton1」のような名前がつけられますので、その名前(Nameプロパティ)を調べることで、それが何のコントロールかを判断できます。

たかがこれしきのことをするのに、クラスを使って疑似コントロール配列を作るまでもありません。

もし、コントロールの名前を、標準の「CheckBox1」や「OptionButton1」から変更していたら、次のようにすればいいです。

Private Sub CommandButton1_Click()
    Dim c, buf As String
    For Each c In Controls
        If TypeName(c) = "CheckBox" Then
            If c.Value Then buf = buf & c.Caption & vbCrLf
        End If
    Next c
    MsgBox buf & "がオンです"
End Sub