Excelで作るチェックリスト ~クリックで色を反転するVBA~

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の左にある直角二等辺三角形をクリックして、シート全体を選びます。すると、

反転モードをONにしました

反転モードをONにしました

という表示が示されます。

チェック中のリスト

チェック中のリスト

以降、A列をクリックするたびにセルの色が反転されます。
(厳密には、A列の1セルが選ばれるとそのセルの色が反転するので、上下左右キーで選択しても色が変わります)

反転モードをOFFにしました

反転モードをOFFにしました

再度、シート全体を選ぶと無効モードに戻ります。

まとめ

Excelでチェックリストを作りました。セルをクリックすると色が反転します。

リスト編集中に不要な動作をさせないよう、モードの切り替え機能も持たせました。

現在の設定では、A列しか色を反転しません。別の列を対象列にしたい場合には、「If Split(Target.Address, “$”)(1) <> “A” Then Exit Sub」の行を変更してください。

ちなみに、本ブログのメンテナンスは、このチェックリストを使うことで無事に完了しました。

コメント

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