Excelのセルをクリックすると色が反転するVBA(マクロ)を作りました。
チェックリストが欲しい!
PC作業中にチェックリストが欲しくなったことがありませんか?
僕は、この度、欲しくなりました。
本ブログのメンテナンスにおいて、カテゴリごとに作業する必要があり、その進み度合いを知るためです。
スマホには、優れたチェックリストのアプリがあります。でも、僕は、フリック入力が不得意なんです。リストを作るだけで疲れてしまいます。
そこで、Excelでチェックリストを自作することにしました。これなら、場合によっては、コピー&ペーストでリストが作れてしまいます。
クリックしたらセルの色が反転する仕様とする
具体的にどんなチェックリストを作りましょうか?
フォームやActive Xのチェックボックスコントロールを使えば、見栄えの良いチェックリストが作れます。でも、結構面倒です。特に、項目数が変わる場合なんて考えたくありません。
そこで、クリックしたらセルの色が反転する(背景色とフォント色が入れ替わる)、単純な仕様にしました。
ただ、リストを作っている間に、思わずクリックしてしまい、意図に反して色が反転するのもストレスですよね。そこで、チェック有効モードと無効モードを作ることにしました。
モードは、全セルを選択したときに切り替わるようにします。
チェックリストのVBAコード
VBAを使ったことのない方は、先ず、こちらの記事で簡単な使い方をご覧ください。
VBAのコードを以下に示します。
このコードは、Worksheet_SelectionChangeというイベントを使うので、シートに対して設定する必要があります。すなわち、Sheet1にチェックリストを作るのであれば、プロジェクトエクスプローラで、「Sheet1 (Sheet1)」をダブルクリックし、開いたエディタにコピー&ペーストして下さい。
保存するときの拡張子名は、「.xlsm」としてください。
なお、Excelのバージョンによっては、CLngLngのところで、「コンパイルエラー:SubまたはFunctionが定義されていません」というエラーが出てしまいます。その際は、「CLngLng(“&H1”)」を「1」、「CLngLng(“&H400000000”)」を「17179869184」に変更してみてください。
'-----------------------------------------------------------------------
' Summary: クリックするとセルの色が反転する
' Input : Target: 選択されたセル
' Comment: シート全体を選択すると反転/非反転が切り換わる
'-----------------------------------------------------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Static blnReverseMode As Boolean ' 反転/非反転モード決定フラグ
Dim lngColor As Long ' 色の一時保持用変数
' 選択されたセルの数を調べる
Select Case Target.CountLarge
' セルを一つ選んだ場合は何もせずにSelect文を抜ける
Case CLngLng("&H1")
' 全選択された場合
Case CLngLng("&H400000000")
' 反転/非反転モード決定フラグを反転する
blnReverseMode = Not blnReverseMode
' 変更後のモードを表示する
Call MsgBox("反転モードを" & IIf(blnReverseMode, _
"ON", "OFF") & "にしました")
' そのまま終了
Exit Sub
' セル1つを選択又は全選択以外の場合
Case Else
' そのまま終了
Exit Sub
End Select
' 非反転モードの場合はそのまま終了
If blnReverseMode = False Then Exit Sub
' 反転モードの場合で、A列以外を選んだ場合はそのまま終了
If Split(Target.Address, "$")(1) <> "A" Then Exit Sub
' 背景色とフォントの色を入れ替える
lngColor = Target.Interior.Color
Target.Interior.Color = Target.Font.Color
' 背景色が白の場合は塗りつぶしなしにする
If Target.Interior.Color = vbWhite Then _
Target.Interior.Pattern = xlNone
Target.Font.Color = lngColor
End Sub
チェックリストの使い方
チェックの無効/有効モードは、StaticのBoolean変数である「blnReverseMode」で管理しています。
Boolean変数の初期値はFalseなので、初めは無効モードになっています。
この状態で、A列にリストを作ります。
白と黒では、色を反転したときに、なんとなく縁起が悪いような気がします。青字にするなど、色を変えておくといいでしょう。
次に、列名Aの左にある直角二等辺三角形をクリックして、シート全体を選びます。すると、
という表示が示されます。
以降、A列をクリックするたびにセルの色が反転されます。
(厳密には、A列の1セルが選ばれるとそのセルの色が反転するので、上下左右キーで選択しても色が変わります)
再度、シート全体を選ぶと無効モードに戻ります。
まとめ
Excelでチェックリストを作りました。セルをクリックすると色が反転します。
リスト編集中に不要な動作をさせないよう、モードの切り替え機能も持たせました。
現在の設定では、A列しか色を反転しません。別の列を対象列にしたい場合には、「If Split(Target.Address, “$”)(1) <> “A” Then Exit Sub」の行を変更してください。
ちなみに、本ブログのメンテナンスは、このチェックリストを使うことで無事に完了しました。
コメント