
動画でExcelVBA チェックボックスをマクロで一括作成、一括リンクセルを作成する
Excel塾のマクロ講座 動画編 39回「マクロ講座チェックボックスをマクロで一括作成、一括リンクセルを作成する、フォームコントロールのチェックボックスを詳しく解説」です。
チェックボックスはアンケートや集計に便利な機能です。
ただ使うまでの準備が大変です。
そしてチェックを入れるだけでなく、カンタンに集計したりしたいわけですが、それにはリンクセルを設定しなければならないわけです。
しかし、それも結構面倒です。
今回の講義では、チェックボックスを必要な個数カンタンに作れ、リンクセルを設定するマクロを作成します。
サンプルは国内旅行の持ち物のチェックリストです。
持ち物を忘れないようにバッグに入れたかどうかをチェックする、チェックリストを作成したいと思います。
隣の B 列にチェックボックスを作成していきます。

チェックボックスを作成するには、この 開発タブにあるコントロールグループから挿入ボタンを押して
作成することができます。
上はフォームコントロール、 下はアクティブXコントロールというものです。

さてはじめに復習を兼ねて、チェックボックスを手動で作成してみましょう。しかしただつくるのではなく、記録のマクロを利用して、どのようなコードが使われるのかを確認します。

B2セルにチェックボックスを作成し、C 2セルにはリンクさせました。

どんなコードが記録されたか見てみましょう。
ActiveSheet.CheckBoxes.Add
の後ろの数値は、まず、左からの距離、上からの距離そして幅と高さが入っています。
この数値を指定することで好きな位置にチェックボックスを配置することができます。

そしてチェックボックスに自動的に入れられたテキストを消しました。
Selection.Characters.Text = ""

Selection.Cut
これは右クリックからの切り取りのことで、チェックボックスを削除しました。

再びチェックボックスを作成しています。
この時は Selection.Characters.Text = "check 23と"
に入っている文字列 check 23というのは消さないでおきました。
With Selection 以降は、
チェックボックスを右クリックして設定できる項目、コントロールの祖初期設定のコントロールタブのところです。

LinkedCellは必要なので使いましょう。またDisplay3DShadingも残しておきましょう。
すると、不要な部分をのこしたマクロのコードは、このようにシンプルになりました。

チェックボックスとリンクしたセルを作成できました。実際には、チェックボックスの位置が悪くて、手動で訂正しています。

これで一番問題なのはチェックボックスを設定するときの位置だということがわかったわけですけれども、その位置をどのように決めたら良いかというところが難しい点です。
ActiveSheet.CheckBoxes.Addに必要なのは、位置情報です。
シート上で規則的に並んでいるのはセルですから、
セルの左上の位置や右上の位置を取得することはできます。
そういったセル位置を利用することにしましょう。

もともとチェックリストですから、指定したセルに一個ずつチェックボックスを入れていきたいので、
その対象となるセルの上からの距離、そして左からの距離、セルの幅、セルの高さを使います。
cTop = Cells(i, 2).Top cLeft = Cells(i, 2).Left cwidth = Cells(i, 2).Width cheight = Cells(i, 2).Height ActiveSheet.CheckBoxes.Add(cLeft, cTop, cwidth, cheight).Select
with 文を使って、選択したチェックボックスに、リンクドセルを隣のセルに対して設定します。
With Selection
.LinkedCell = Cells(i, 2).Offset(0, 1).Address
End With
全体のコードはこのようになります。
サンプルでは2行目から21行目まで B 列に対してチェックボックスを作成し、その隣オフセット01のセルに対してリンクしたセルを設定しています。
Sub Makeチェックボックス()
Dim cTop As Double, cLeft As Double, cwidth As Double, cheight As Double
Dim i As Long
For i = 2 To 21
With Cells(i, 2)
cTop = Cells(i, 2).Top
cLeft = Cells(i, 2).Left
cwidth = Cells(i, 2).Width
cheight = Cells(i, 2).Height
ActiveSheet.CheckBoxes.Add(cLeft, cTop, cwidth, cheight).Select
Selection.Characters.Text = ""
With Selection
.Value = xlOn
.LinkedCell = Cells(i, 2).Offset(0, 1).Address
End With
End With
Next i
End Sub
With Selection に対して、
.Value = xlOn でコードを書いているので、全てのチェックボックスが TRUE になっています。

フォームコントロールのチェックボックスのチェックを一括ではずすマクロです。
Sub フォームチェックボックスをチェック解除() ActiveSheet.CheckBoxes.Value = False End Sub
フォームコントロールのチェックボックスのチェックを一括で入力するマクロです。
Sub フォームチェックボックス全部チェック() ActiveSheet.CheckBoxes.Value = True End Sub
チェックボックスを全部削除して、作り直したいとかいうこともあるかもしれません。
あるいは練習に一括削除したいということもあるかもしれません。
こちらのコードはシート上のチェックボックスをまとめて削除するマクロです。
Sub フォームチェックボックス一括削除1()
Dim checkbox As checkbox
For Each checkbox In ActiveSheet.CheckBoxes
checkbox.Delete
Next
End Sub
Sub フォームチェックボックス全部削除2() ActiveSheet.CheckBoxes.Delete End Sub
今までチェックボックスはチェックするのにはとてもいいんだけれども、作成するのが、面倒だということで、なかなか使用に踏み切れなかった方も、 簡単にチェックボックスとリンクしたセルを必要な数をすぐ作れますのでぜひお試しください。