いまさら聞けないExcelの使い方講座

【Excel】「すべてにチェック」のチェックボックスでUXを向上! シンプルなマクロで実現する方法

チェックのON/OFFを一括で切り替えられるチェックボックスを作ってみましょう

「すべてにチェック」のチェックボックスはマクロを利用する

 以前にチェックボックスの作成方法ON/OFFでセルの書式を切り替える方法を紹介しました。項目の集計と書式の自動設定ができれば活用シーンは多いですよね。

 ただ、チェックリストを運用していると「チェックボックスを一括でON/OFFできないか?」といった要望が出てくることもあるでしょう。項目数が多いとなおさらですよね。Webページやアプリなどのチェックリストなどで見かける「すべてにチェック」のチェックボックスです。

 この制御はマクロを利用します。VBAの画面が表示されるので、難しく感じるかも知れませんが、記述する内容は簡単です。チェックのON/OFFと連動する「TRUE」「FALSE」の値をマクロで書き換えるだけです。

 マクロを含むファイルとなるので、[Excel マクロ有効ブック]として保存。ファイルを開く時の警告は、確認のメッセージなので驚かなくて大丈夫です。さっそく作ってみましょう。

チェックボックスにマクロを登録する

 「すべてにチェック」用のチェックボックスを挿入しておいてください。ここでは、セルC15にチェックボックスを配置して、セルD15とリンクしました。ここで作成するマクロは「チェックボックスをクリックしたら」発動させるため、「マクロの記録」は使いません。チェックボックスに直接マクロを登録します。

チェックボックスを右クリックして(①)、[マクロの登録](②)をクリックします
[マクロの登録]ダイアログボックスが表示されました。マクロ名(③)は任意で構いません。[新規作成](④)をクリックします
VBAの画面が表示されました。「Sub ○○_Click()」「End Sub」と入力された(⑤)ウィンドウが開きます。「チェック11」の箇所はチェックボックスの名前によって異なります。自動的に入力された名称を変更しないでください

 あとは「Sub ○○_Click()」「End Sub」の間に以下のコードをコピペすればOKです。よりスマートな記述方法は後ほど紹介します。「If」と「ElseIf」の行に注目してください。「Range("D15").Value」は「セルD15の値」という意味です。「=」で値を比較して「True」なら「If」の下の行から、「False」なら「ElseIf」の下の行から処理します。

If Range("D15").Value = True Then
    Range("D3").Value = True
    Range("D4").Value = True
    Range("D5").Value = True
    Range("D6").Value = True
    Range("D7").Value = True
    Range("D8").Value = True
    Range("D9").Value = True
    Range("D10").Value = True
    Range("D11").Value = True
    Range("D12").Value = True
ElseIf Range("D15").Value = False Then
    Range("D3").Value = False
    Range("D4").Value = False
    Range("D5").Value = False
    Range("D6").Value = False
    Range("D7").Value = False
    Range("D8").Value = False
    Range("D9").Value = False
    Range("D10").Value = False
    Range("D11").Value = False
    Range("D12").Value = False
End If

 例えば「Range("D3").Value = True」は、『セルD3の値として「True」をセットする』という意味です。つまり、セルD15が「True」だったら、セルD3~12に「TRUE」がセットされるわけです。「False」の場合も同様です。

「Sub ○○_Click()」「End Sub」の間にコードをペーストします(⑥)。[上書き保存](⑦)をクリックします
マクロが無効のファイルとして保存するかどうかのメッセージが表示されます。[いいえ](⑧)をクリックします
[名前を付けて保存]ダイアログボックスが表示されました。保存場所は任意で構いません。[ファイルの種類]で[Excel マクロ有効ブック(*.xlsm)](⑨)を選択します。[保存](⑩)をクリックします。VBAの画面は閉じておいてください
チェックボックス(⑪)をクリックして動作を確認します
すべてのチェックボックスがONに切り替わりました

コードを簡略化する

 先ほどコピペしたコードでは、チェックボックスの数だけ「True」「False」の制御を記述する必要があります。コードの内容は理解しやすくても、何十行とコピペするのは面倒ですよね。コードを簡略化しましょう。

 記録済みのマクロは[マクロ]ダイアログボックスから内容を表示できます。[開発]タブを表示しておいてください。

[開発](⑫)タブの[マクロ](⑬)をクリックします
[マクロ]ダイアログボックスが表示されました。先ほど記録したマクロ(⑭)を選択して[編集](⑮)をクリックします
VBAの画面が表示されました。先ほど入力したコードを選択(⑯)して削除します。「Sub ○○_Click()」と「End Sub」の行は残します

 書き換えるコードは以下の通りです。「If」の判定に注目してください。「Cells(15, 4)」はインデックスによる指定方法で、(行, 列)の数値によってセル番地を表します。「(15, 4)」は15行目4列目、つまりセルD15を示します。

Dim i As Long

    If Cells(15, 4) = True Then

        For i = 3 To 12
            Cells(i, 4) = True
        Next i

    Else

        For i = 3 To 12
            Cells(i, 4) = False
        Next i

    End If

 その下の「For~Next」がポイントです。指定した条件(i = 3 To 12)を満たすまで処理を繰り返します。具体的には「i」が「3」から「12」まで処理を繰り返します。

 「i」はこのマクロで使う変数です。「Dim i As Long」で宣言しています。「Dim」と「As Long」は決まり文句だと考えてください。

 繰り返す処理は「Cells(i, 4) = True」ですから、例えば「i」が「3」の時は「Cells(3, 4) = True」となり、「Cells(3, 4)」(セルD3)に「True」をセットします。「4」「5」「6」……と「12」になるまで、セル番地をずらしながら「True」をセットします。

 チェックボックスの位置にあわせて、(行, 列)のインデックスと、条件「For i = (開始行) To (終了行)」を書き換えるだけです。

 「Else」以降は『「True」ではない時』の処理。ここではチェックボックスに連動する「True」「False」しか見ていないので、『「True」ではない時』つまり『「False」の時』の処理になります。

「Sub ○○_Click()」「End Sub」の間にコードをペースト(⑰)して[上書き保存](⑱)をクリックします。VBAの画面は閉じておいてください
チェックボックス(⑲)をクリックして動作を確認します
すべてのチェックボックスがOFFに切り替わりました

動作の意味を考えればマクロも簡単

 はじめてマクロを作る人でも意外と簡単だと思われたのではないでしょうか。ご自身で作成したファイルを使って、セル番地をずらして試してみてください。なお、マクロを含むファイルは開いた時に警告が表示されます。悪意のあるマクロを実行しないようにするセキュリティ機能なので、上記で作成したファイルなら「有効化」して問題ありません。

マクロを含むファイルを開くと、セキュリティの警告が表示されます。問題なければ[コンテンツの有効化](⑳)をクリックしてください