wrote :: 2005.05.15

トップページ > Excel > VBA > コントロールの状態をチェックする

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

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プロパティ)を調べることで、それが何のコントロールかを判断できます。






たかがこれしきのことをするのに、クラスを使って疑似コントロール配列を作るまでもありません。
もしチェックボックスのコントロール名が「CheckBox」で始まっていなかったら?そしたら判定できません。だから、判定したいコントロールの名前は、Controlsコレクションで取得することを前提にして、あらかじめ統一しておくんです。先頭に「chk」という識別文字をつけるだけでもいいでしょう。「chk住所」「chk氏名」みたいにね。それくらいの手間は惜しまないでくださいな。


[目次]に戻る