いまさら聞けないExcelの使い方講座
【Excel】「すべてにチェック」のチェックボックスでUXを向上! シンプルなマクロで実現する方法
2022年9月28日 06:55
「すべてにチェック」のチェックボックスはマクロを利用する
以前にチェックボックスの作成方法とON/OFFでセルの書式を切り替える方法を紹介しました。項目の集計と書式の自動設定ができれば活用シーンは多いですよね。
ただ、チェックリストを運用していると「チェックボックスを一括でON/OFFできないか?」といった要望が出てくることもあるでしょう。項目数が多いとなおさらですよね。Webページやアプリなどのチェックリストなどで見かける「すべてにチェック」のチェックボックスです。
この制御はマクロを利用します。VBAの画面が表示されるので、難しく感じるかも知れませんが、記述する内容は簡単です。チェックのON/OFFと連動する「TRUE」「FALSE」の値をマクロで書き換えるだけです。
マクロを含むファイルとなるので、[Excel マクロ有効ブック]として保存。ファイルを開く時の警告は、確認のメッセージなので驚かなくて大丈夫です。さっそく作ってみましょう。
チェックボックスにマクロを登録する
「すべてにチェック」用のチェックボックスを挿入しておいてください。ここでは、セルC15にチェックボックスを配置して、セルD15とリンクしました。ここで作成するマクロは「チェックボックスをクリックしたら」発動させるため、「マクロの記録」は使いません。チェックボックスに直接マクロを登録します。
あとは「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」の場合も同様です。
コードを簡略化する
先ほどコピペしたコードでは、チェックボックスの数だけ「True」「False」の制御を記述する必要があります。コードの内容は理解しやすくても、何十行とコピペするのは面倒ですよね。コードを簡略化しましょう。
記録済みのマクロは[マクロ]ダイアログボックスから内容を表示できます。[開発]タブを表示しておいてください。
書き換えるコードは以下の通りです。「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」の時』の処理になります。