【エクセルVBA】チェックボックスをセルに連動させる方法

VBA

※本サイトはアフィリエイト広告を利用しています。

チェックを入れるとセルの値が変わるチェックボックスは手動でも作成ができるのですが、連動するセルを1つずつ設定すると手間がとてもかかります。
というわけで今回は、セルに連動するチェックボックスを自動で作るためのコードの紹介です。

チェックボックスを設置する

「開発」タブ→「挿入」→「チェックボックス」を選択します。

チェックボックスを設置したい場所にカーソルを合わせて、範囲を指定して設置します。

文字は要らないので消しましょう。
文字のところをクリックすると編集できるようになるので、文字を削除します。
ついでに枠のサイズを変更したり、セルの中に納まるようにチェックボックスの位置を移動させます。

セルに連動するようにVBAコードを設定

チェックボックスを右クリックして、「マクロの登録」を選択します。

登録するマクロ名を適宜変更して、「新規作成」をクリックします。

VBEが開くので、下記のコードをコピペします。
※ Sub (設定したマクロ名) と End Subの間にコピペしてください

ActiveSheet.Shapes(Application.Caller).TopLeftCell.Offset(0, 1).Value _
= Not ActiveSheet.Shapes(Application.Caller).TopLeftCell.Offset(0, 1).Value

作成したチェックボックスを複製

これで、右隣のセルに連動したチェックボックスが作成できました。
作成したチェックボックスをコピペすることで、隣のセルに連動するチェックボックスを量産することができます。

コードの解説

長いコードなので、分解して解説していきます。
まず、それぞれのパーツの意味は次の通り。

ActiveSheet実行した時にアクティブであるシート
Shapes(Application.Caller):このコードを呼び出した図形
TopLeftCell:図形の左上が位置するセル
Offset(0, 1):指定したセルからどれだけズレるかの設定。括弧内の数字が、行・列の移動数を表していて、この場合だと行はそのままで列が1増えるので右隣のセルを指します
Value:セルの値

それぞれを繋ぎ合わせると、
ActiveSheet.Shapes(Application.Caller).TopLeftCell.Offset(0, 1).Value

「アクティブなシートの中で、コードを呼び出したセルの中にある図形の左上が位置しているセルの右隣のセルの値」
という意味になります。
簡単に言うと、「チェックボックスがあるセルの右隣のセルの値」ですね。

この長い文字列が、イコールを挟んで2回出てきます。長すぎてパッと見て理解しずらいですね^^;
わかりやすくするために、長ったらしいコードを簡単にして説明します。


はいここで問題です。このコードはどういう意味でしょう?
Cells(2,3).value = Cells(2,3).value + 1
これは、Cells(2,3)にCells(2,3)に1を足した値を代入するというコードですね。

では、これは?
ActiveSheet.Shapes(Application.Caller).TopLeftCell.Offset(0, 1).Value = Not ActiveSheet.Shapes(Application.Caller).TopLeftCell.Offset(0, 1).Value
一気に難しくなりましたね^^;

ActiveSheet.Shapes(Application.Caller).TopLeftCell.Offset(0, 1)は「チェックボックスがあるセルの右隣のセル」のことでしたね。
では「チェックボックスがあるセルの右隣のセル」を仮にCells(2,3)だとして置き換えてみましょう。
Cells(2,3).Value = Not Cells(2,3).Value

だいぶスッキリしました。
Cells(2,3)の値に何かをして、Cells(2,3)に代入していることがわかります。
ここで、Notが何かというと、「反対の値」という意味です。
チェックボックスの例でいうと、TRUEだったらFALSE、FALSEだったらTRUEが反対の値になります。
つまり、Cells(2,3)がTUREだったらFALSEに、FALSEだったらTRUEに変えてねということですね。

Cells(2,3)というのは仮の話なので、正確に言うと
「チェックボックスがあるセルの右隣のセル」がTUREだったらFALSEに、FALSEだったらTRUEに変えてね
ということですね。
このコードはチェックボックスをクリックした時に呼び出されるので、チェックボックスをクリックするたびに連動するセルのTRUE/FALSEが切り替わるという仕組みです。

動画

YouTubeでも解説の動画を出しています。
動画の方がわかりやすいと思いますので、是非こちらも見てみてください!

セル連動のチェックボックス

まとめ

今回はセルに連動するチェックボックスをVBAで作成する方法を解説しました。手動で作ろうとすると、リンクするセルを1個ずつ設定しなければいけないのでなかなか厄介なんですよね…。
このコードを使って、作業の時短をぜひしてみてください(^^)/

お問い合わせ、お仕事のご依頼などがありましたら下記のお問い合わせフォームからご連絡ください。
お問い合わせフォーム
VBAの作成であれば50,000円ほどから、自分で使うVBAの書き方で詰まっている方のお手伝いであれば10,000円ほどから承ります。

VBA VBA_Tips
スポンサーリンク
スポンサーリンク
りこをフォローする
エクセルVBAの寺子屋

コメント

タイトルとURLをコピーしました