【エクセルVBA】ActiveXコントロールのチェックボックスを操作してみよう!

excel,checkbox,vba,eyecatch皆様こんにちは、ノグチです。

前回記事では、ActiveXコントロールのチェックボックスをご紹介しました。

【エクセル】ActiveXコントロールのチェックボックスを使ってみよう!
エクセルにある、フォームコントロールのチェックボックスとActiveXコントロールのチェックボックスのうち、ActiveXコントロールのチェックボックスをご紹介しています。フォームコントロールに比べてフォントやテキストの配置などの項目を変更することができるので、より細かいカスタマイズができますよ!

記事の中で、「チェックボックスをカスタムしたいなら、ActiveXコントロールのチェックボックスがいいかも」とお伝えしました。

そこで今回は、ActiveXコントロールのチェックボックスをVBAで操作する方法をご紹介していきたいと思います。

スポンサーリンク

OLEオブジェクトを取得する

基本的な記述方法

まず最初に、チェックボックスを操作するためのオブジェクト取得からいきましょう。

ActiveXコントロールのチェックボックスは、OLEオブジェクトを取得することで操作することができます。

基本的な記述方法はこちら。

Worksheetオブジェクト.OLEObjects(オブジェクト名またはインデックス番号)
例えば、今開いているシートの、「CheckBox123」という名前のチェックボックスのオブジェクトを取得したい場合は、
ActiveSheet.OLEObjects("CheckBox123")

という風に記述することになります。

オブジェクト名で記述することもできる

ActiveXコントロールのチェックボックスは、コントロールのオブジェクト名を直接コード内に記述してオブジェクトを取得することもできますよ。

コントロールの名前は、デザインモード状態でコントロールをクリックするとシート左上に現れる名前で把握することができす。

チェックボックス,名前,シート

または、デザインモード状態でコントロールを右クリック>プロパティでプロパティシートを開いたとき、一番上にある項目「(オブジェクト名)」という項目の値からでもコントロール名がわかります。
チェックボックス,プロパティシート

例えば、「ChekBox123」というコントロールのオブジェクトを取得したければ、上でご紹介した基本の記述方法のOLEオブジェクト部分をこのオブジェクト名に置き換えればOKです。

例えばこんな風に。

ActiveSheet.CheckBox123

この方法ならシンプルですし、コードが分かりやすくなりますね。

チェックボックスをVBAで操作する

Valueプロパティでチェックボックスの値を取得する

では、チェックボックスのオブジェクトが取得できたところで、色々な操作をしてみましょう。

まずは基本的なところで、チェックボックスのON/OFFの値を取得してみます。

チェックボックスの値は、ONならばTrueOFFならばFalseがセットされています。

こちらの「CheckBox123」というチェックボックスの値を、Valueプロパティで取得してみましょう。

コードはこちらです。

Sub Test_CheckBox123()

With ActiveSheet
    MsgBox .CheckBox123.Value
End With

End Sub

「CheckBox123」というチェックボックスの値を、メッセージで表示させるコードです。

このコードを実行すると…
チェックボックス,メッセージ
この通り、チェックボックスがONになっているので、「True」の値を返してくれていますね。

チェックボックスのON/OFFを操作する

お次は、VBAでチェックボックスのON/OFFを操作してみましょう。

ここでもValueプロパティを使います。

Sub Test_CheckBox123()

With ActiveSheet
     .CheckBox123.Value = False
End With

End Sub

ONになっているチェックボックスを、OFFに切り替えるコードです。

このコードを実行すると…

チェックボックス,OFF

この通り、チェックボックスがOFFになります。

チェックボックスをONにしたい場合は、上のコードの「False」を「True」に置き換えるだけでOKです。

BackColorプロパティでチェックが付いたら背景色を変える

続いて、チェックボックスがONになったら、チェックボックスの背景色を変えてみましょう。

チェックボックスの背景色は、BackColorプロパティで設定することができます。

例えば、チェックボックスがONの場合に背景色を水色にしたい場合、こんなコードになります。

Sub Change_BackColor()
    With ActiveSheet.CheckBox123
        If .Value = True Then
            .BackColor = &HFFFF00
        End If
    End With
End Sub

イベントプロシージャと組み合わせて背景色を変える

前回の記事で、ActiveXコントロールのチェックボックスは、チェックボックスのイベントプロシージャをVBEで自動作成させることができることはすでにご紹介しました。

このイベントプロシージャの中に、チェックボックスの背景色を変えるコードを差し込めば、チェックボックスをON/OFF操作した瞬間に背景色を変える処理を実行させることができます。

例えばこんな感じです。

Private Sub CheckBox123_Click()

    With ActiveSheet.CheckBox123
        If .Value = True Then
            .BackColor = &HFFFF00
        Else
            .BackColor = &HFFFFFF
        End If
    End With

End Sub

チェックボックスをクリックしたとき、チェックボックスの値がONだったら背景色を水色に、OFFだったら白色に変える、というコードです。

チェックボックスがOFFの状態で、チェックボックスをクリックしてみると…

エクセル,checkbox,イベント,on

このとおり、チェックボックスがONになったので、背景色が青色になりました。

そして再度チェックボックスをクリックすると…

エクセル,checkbox,off

今度はチェックボックスがOFFになり、背景色も白色に戻りました。

このように、チェックボックスを操作した時に実行させたい処理は、イベントプロシージャに組み込んでしまえば、チェックボックスを操作した瞬間に処理をさせられるので便利ですよ。

最後に

今回は、ActiveXコントロールのチェックボックスをVBAで操作する方法をご紹介しました。

ただチェックON/OFFだけでなく、今回例に挙げたような、チェックボックスの背景色をチェック結果によって変えてあげれば、入力者に分り易いですし、エクセルの使い勝手を向上させられるかもしれませんね。

それでは、最後までお読みいただきありがとうございました!

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