会社で部品のピッキングなどを行う際に複数チェックボックスを作って
部品を集め終わったらチェックボックスに☑をいれる様なExcelシートを作ったことはありますか?
あれって数個だけならまだしも10個20個…となってくると作るのも大変ですし
チェックボックスの位置を調整するのすごく大変ですよね・・・。
そんな悩みを解決するための今回はVBAでチェックボックスを一括で作成する方法を
紹介します。
◯ 行ごとにチェックを付けたい
◯ 作業完了フラグを管理したい
◯ TRUE / FALSE をセルで扱いたい
こんな感じで管理されたい方は是非参考にしてください。
フォームコントロールのチェックボックスとは?
Excelのチェックボックスには2種類あります。
| 種類 | 特徴 |
|---|---|
| フォームコントロール | 軽い・管理しやすい・実務向き |
| ActiveX | イベントが使えるが不安定になりがち |
👉 大量に作る・状態を判定する用途ならフォームコントロール一択です。
今回やりたいこと
- G列にチェックボックスを表示
- H列に TRUE / FALSE を自動で出力
- 5行目~30行目までまとめて作成
チェックボックスと同じ列でTRUE/FALSE判定をすると見栄えが悪くなってしまうので
違う列(H列)にしてます。
チェックボックスをまとめて作成するVBAコード
Sub チェックボックス一括作成()
Dim ws As Worksheet
Dim r As Long
Dim cb As CheckBox
Set ws = ActiveSheet
' 5行目~20行目に作成
For r = 5 To 30
Set cb = ws.CheckBoxes.Add( _
ws.Cells(r, "G").Left, _
ws.Cells(r, "G").Top, _
ws.Cells(r, "G").Width, _
ws.Cells(r, "G").Height)
With cb
.Caption = "" ' 表示文字なし
.Placement = xlMoveAndSize ' セルと一緒に動く
.LinkedCell = ws.Cells(r, "H").Address ' TRUE/FALSE出力先
.Name = "chk_" & r ' 識別用の名前
End With
Next r
End Sub
このコードを実行するとこんな感じになります。
G列30行目まで同じ均等にチェックボックスが作成され
チェックボックスが☑ならTRUE、チェックが外れたらFALSEと判定されます。

コードのポイント解説
① CheckBoxes.Add で配置をセルに合わせる
ws.Cells(r, "G").Left
ws.Cells(r, "G").Top
→ セルの位置・サイズをそのまま使うことで
ズレないチェックボックスが作れます。
② LinkedCell で TRUE / FALSE を取得
.LinkedCell = ws.Cells(r, "H").Address
- チェックON → TRUE
- チェックOFF → FALSE
③ Placement は必ず設定する
.Placement = xlMoveAndSize
これを入れておくと
- 行の高さ変更
- 行の挿入・削除
をしてもチェックボックスがズレません。
既存のチェックボックスを全削除したい場合
作り直す前に、いったん全部消したいときはこちら。
Sub チェックボックス全削除()
Dim cb As CheckBox
For Each cb In ActiveSheet.CheckBoxes
cb.Delete
Next cb
End Sub
👉
「全削除 → 再作成」 の流れは、実務ではかなり使います。
こんな応用も可能
- チェックが全てONなら「完了」判定
- グループ単位でチェック状況を確認
- チェックONで行の色を変える
このあたりは今後記事を作っていこうと考えてますので今しばらくお待ち下さい。
応用が効いてくれば更に仕事の幅が広がります!
まとめ
- チェックボックスの一括作成はVBAで簡単
- フォームコントロールは実務向き
- LinkedCellを使うと管理が楽
「作業チェック」「進捗管理」をExcelでやっている人には
おすすめです。
一つ一つやることももちろんできますが、仕事の時短の為にこういうテクニックも
使えるようになっていきましょう!
随時更新していきますので是非これからも当ブログをよろしくお願いします。

コメント