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