【ExcelVBA】マクロでセルにActiveXのチェックボックスを配置するには

この記事では、マクロでセルにActiveXのチェックボックスを配置する方法についてご説明します。

【動画】マクロでセルにActiveXのチェックボックスを配置する実際の動き

本題に入る前に、まずは次の動画をご覧ください。


チェックボックスを配置する位置をあらかじめ取得しておき、新しいActiveXのチェックボックスを追加します。

新しいActiveXのチェックボックスを追加するには、OLEObjects.Addメソッドを実行します。

今回のサンプルでは複数設置しているので、ActiveXのチェックボックスの名前が重複しないよう「cbx」という名前にカウンタの値をつなげて名前を一意にしています。

ちなみにActiveXのチェックボックスとは下の画像にあるチェックボックスです。(フォームコントロールのチェックボックスではないです)

マクロ作成の流れ

STEP.1
チェックボックスを配置する上端位置と左端位置、幅と高さをOLEObjects.Addメソッドの引数に設定してチェックボックスを配置する
チェックボックスを配置する上端位置と左端位置、幅と高さをOLEObjects.Addメソッドの引数に設定してチェックボックスを配置します。

コードの例

Option Explicit

Sub test()

    Dim cell    As Range        'セル用変数
    Dim chkBox  As OLEObject    'OLEオブジェクト用変数
    Dim cnt     As Long         'カウンタ用変数
    Dim rng     As Range        'Rangeオブジェクト格納用変数
        
    Const cbxHeight As Long = 10    'チェックボックスの高さの設定
    Const cbxWidth As Long = 15     'チェックボックスの幅の設定
    
  'カウンタの変数を初期化する
    cnt = 0
    
    'チェックボックスを設置するセルの範囲を取得する
    Set rng = Worksheets("data").Range("A1:A10")
    
    For Each cell In rng
    
        'チェックボックスを生成して配置する
        Set chkBox = Worksheets("data").OLEObjects.Add(ClassType:="Forms.CheckBox.1", _
                                                Left:=7, _
                                                Top:=cell.Top + (cell.Height - cbxHeight) / 1.8, _
                                                Width:=cbxWidth, _
                                                Height:=cbxHeight)
                                                
        'チェックボックスのキャプションを空にする
        chkBox.Object.Caption = ""
        
        'カウンタの値を一つ増やす
        cnt = cnt + 1
        
        'チェックボックスに名前を付ける(重複しないよう項番も付与する)
        chkBox.Name = "cbx" & cnt

    Next cell
    
    Set chkBox = Nothing
    
End Sub

注目すべきコード①

最初に見て頂きたいのは10行目と11行目です。

    Const cbxHeight As Long = 10    'チェックボックスの高さの設定
    Const cbxWidth As Long = 15     'チェックボックスの幅の設定

コードの説明

以上のコードは、チェックボックスの縦幅と横幅に設定する値を定数に設定しているコードです。

注目すべきコード②

次に見て頂きたいのは17行目です。

    'チェックボックスを設置するセルの範囲を取得する
    Set rng = Worksheets("data").Range("A1:A10")

コードの説明

今回のサンプルでは、A1のセルからA10のセルまで合計10のセルにチェックボックスを設置するためRange(“A1:A10”)としています。

注目すべきコード③

次に見て頂きたいのは17行目です。

    For Each cell In rng

コードの説明

以上のコードは、チェックボックスをセルに一つ一つ繰り返し設置するFor文のコードです。

注目すべきコード②」で説明した、A1のセルからA10のセルまでの範囲に対して繰り返し処理を行うためのFor文です。

変数cellには、A1のセルからA10のセルが一つ一つ取得されて格納されます。

注目すべきコード④

次に見て頂きたいのは22行目から26行目です。

        'チェックボックスを生成して配置する
        Set chkBox = Worksheets("data").OLEObjects.Add(ClassType:="Forms.CheckBox.1", _
                                                Left:=7, _
                                                Top:=cell.Top + (cell.Height - cbxHeight) / 1.8, _
                                                Width:=cbxWidth, _
                                                Height:=cbxHeight)

コードの説明

以上のコードは、ActiveXのチェックボックスを生成して配置する処理のコードです。

ActiveXのチェックボックスを生成して配置するのにOLEObjects.Addメソッドを使います。

OLEObjects.Addメソッドの引数に、生成したいActiveXの上端位置と左端位置、そして幅と高さを設定して実行するとActiveXのチェックボックスがシート上に生成されて配置されます。

なお今回のサンプルでは、チェックボックスの上端位置は、配置するセルの上端から真ん中に設定しています。

また、また、チェックボックスの左端位置は7で設定しています(この値はお好みの値で設定してください)。

注目すべきコード⑥

次に見て頂きたいのは29行目から35行目です。

        'チェックボックスのキャプションを空にする
        chkBox.Object.Caption = ""
        
        'カウンタの値を一つ増やす
        cnt = cnt + 1
        
        'チェックボックスに名前を付ける(重複しないよう項番も付与する)
        chkBox.Name = "cbx" & cnt

コードの説明

以上のコードは、配置されたチェックボックスのキャプションと名前の設定を行っている処理のコードです。

コードの詳細

29行目では、チェックボックスのキャプションをブランクにしています。

今回のサンプルでは□だけの表示にしたいのでキャプションは何も設定しないようCaptionプロパティにブランクを設定しています。

35行目では、チェックボックスに名前を付けています。

今回のサンプルでは複数設置しているので、ActiveXのチェックボックスの名前が重複しないよう「cbx」という名前にカウンタの値をつなげて名前を一意にしています。

動作確認

マクロ実行前

以下のシートにチェックボックスを配置します。セルの高さはバラバラに設定しています。

マクロ実行後

A1のセルからA10のセルまで10個ActiveXのチェックボックスが設置されました。

なお、ActiveXのチェックボックスはセルの真ん中の縦位置に設置されています。

懸念事項

今回紹介したサンプルのコードを実行するのにあたり一つ懸念事項があります。

それは、多くのActiveXのチェックボックスを設置しようとすると完了までにかなり時間がかかってしまうことです。

ちなみに私のパソコンで1000個ActiveXのチェックボックスを設置してみたら50秒かかりました。

数千、数万という数をもし設置したい場合はお使いの環境によってかなり完了までに待たされる可能性があります。

なので、ActiveXのチェックボックスの数が多すぎると完了までに時間がかかってしまうことを念頭に処理を行って頂ければ幸いです。

最後に

本記事では、マクロでセルにActiveXのチェックボックスを配置する方法についてご説明しました。

いちいち手動でActiveXのチェックボックスをセルに設置するのが面倒だと感じている場合は本記事が参考になるかもしれません。

マクロから一括でチェックボックスを設置しているコードのサンプルを参考にしてみてくださいね。

ちなみにマクロでフォームコントロールのチェックボックスを設置したい場合は次の記事で説明しています。

【ExcelVBA】マクロでセルにフォームコントロールのチェックボックスを配置するには

プログラミングのスキルを習得するなら

プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。

プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。

→ TechAcademyの「1週間 無料体験」はこちら