スケジュール管理で大失敗してない!?セルを点滅させるVBAで確認漏れを0にする方法

 

重要な期日や未処理項目を手作業で目で追って確認していませんか?

 

VBAを使えば、見落としやすいセルを自動で点滅させ、確認作業をボタン1クリックで完了させることができます。

今日から「あ、確認し忘れた」という失敗とはおさらばです。

 

広告

セルを点滅させる必要があるエクセル作業とは

結論からいうと、

エクセルで管理しているスケジュールや未処理項目の見落としは、セルを点滅させることで限りなくゼロに近づける

ことができます。

 

人間の視覚的な注意を強制的に引きつけ、「毎日同じ画面を見ているうちに目が慣れてしまい気づかないまま見逃してしまう!」という問題を解決。

 

 

たとえば、納品期日が3日後に迫っているのにセルが普通の赤色のまま。

毎朝同じ色を見ていると「今日もいつもの赤色だ」と脳が慣れてしまい、気づいた時には手遅れだった、という状況が生まれます。

 

しかし、セルが赤と黒で点滅していればどうでしょうか?点滅項目が嫌でも目に入ってくるはずです。

 

マクロ開発の依頼の中でも「スケジュール管理の見落とし防止」は特に相談が多いテーマで、「条件付き書式だけでは対応しきれない」という声をよく聞きます。

VBAを使えば、期日が迫ったセルや未処理のセルを自動で点滅させ、画面を開いた瞬間に誰でも重要項目に気づける仕組みを作ることが可能です。

 

セルを点滅させる仕組みを理解しよう

セルの点滅は、ExcelのVBAが持っている「タイマー機能」を利用して実現します。

 

具体的には、Application.OnTime というメソッドを使って「一定時間後にこの処理を実行する」という命令を繰り返すことで、セルの背景色を交互に切り替える動作を作り出します。

点滅しているように見えるのは、「色あり → 色なし → 色あり → 色なし」という切り替えを数秒おきに繰り返しているためです。

エクセルのシートが開かれている間、このタイマーが動き続け、条件を満たすセルだけを自動で点滅させます。

 

この仕組みは難しく聞こえるかもしれませんが、コード自体はシンプルで、プログラミング未経験の方でも理解できる構造になっています。

 

実際のVBAコードと動作の解説

実際に動作するセル点滅VBAのサンプルコードを見ていきましょう。

今回は「今日から3日以内に期日が迫っているセルを点滅させる」という内容を想定します。

スケジュール管理表のD列に期日が入力されている前提です。

 

vba'点滅状態を管理する変数
Dim blinkOn As Boolean
Dim blinkTimer As Date

'--------------------------------------------
'点滅をスタートさせるプロシージャ
'--------------------------------------------
Sub 点滅開始()
blinkOn = True
Call 点滅処理
End Sub

'--------------------------------------------
'点滅を止めるプロシージャ
'--------------------------------------------
Sub 点滅停止()
blinkOn = False
'タイマーをキャンセル
On Error Resume Next
Application.OnTime blinkTimer, "点滅処理", , False
On Error GoTo 0

'点滅していたセルの色をリセット
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
Set ws = ThisWorkbook.Worksheets("スケジュール管理")
lastRow = ws.Cells(ws.Rows.Count, "D").End(xlUp).Row

For i = 2 To lastRow
If ws.Cells(i, "D").Value <> "" Then
ws.Cells(i, "D").Interior.ColorIndex = xlNone
End If
Next i
End Sub

'--------------------------------------------
'点滅処理の本体(繰り返し呼び出される)
'--------------------------------------------
Sub 点滅処理()
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
Dim 期日 As Date
Dim 今日 As Date

Set ws = ThisWorkbook.Worksheets("スケジュール管理")
lastRow = ws.Cells(ws.Rows.Count, "D").End(xlUp).Row
今日 = Date

'D列の期日を上から順番にチェック
For i = 2 To lastRow
If ws.Cells(i, "D").Value <> "" Then
期日 = ws.Cells(i, "D").Value

'今日から3日以内に期日が迫っている場合に点滅対象とする
If 期日 - 今日 <= 3 And 期日 >= 今日 Then
If blinkOn Then
'点滅オン:セルを赤色に
ws.Cells(i, "D").Interior.Color = RGB(255, 0, 0)
Else
'点滅オフ:セルの色を消す
ws.Cells(i, "D").Interior.ColorIndex = xlNone
End If
End If
End If
Next i

'点滅の状態を反転させる
blinkOn = Not blinkOn

'blinkOnがTrueの間は0.5秒後に再度この処理を呼び出す
If blinkOn Or Not blinkOn Then
blinkTimer = Now + TimeValue("00:00:01")
Application.OnTime blinkTimer, "点滅処理"
End If
End Sub

'--------------------------------------------
'ファイルを閉じるときに点滅を自動停止
'--------------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call 点滅停止
End Sub

 

このコードをVBAエディタに貼り付けて「点滅開始」を実行すると、期日が3日以内に迫っているD列のセルが赤く点滅を始めます。

VBAコードの動作を順番に解説

まず、コードの最初にある Dim blinkOn As Boolean と Dim blinkTimer As Date の2行は、モジュールレベルの変数宣言です。

blinkOn は点滅の「オン・オフ」状態を管理するスイッチ、blinkTimer は次の点滅処理が実行される時刻を記録しておくための入れ物です。

Sub 点滅開始() を実行すると、まず blinkOn = True でスイッチをオンにし、続けて 点滅処理 プロシージャを呼び出します。

Sub 点滅処理() の中では、スケジュール管理シートのD列を上から順番にチェックしていきます。

 

For i = 2 To lastRow というループ処理で、2行目から最終行まで1行ずつ確認していきます。

If 期日 – 今日 <= 3 And 期日 >= 今日 Then という条件式が、点滅対象かどうかを判定する核心部分です。

「期日まで3日以内かつ期日がまだ過ぎていない」というセルだけが点滅の対象になります。

 

If blinkOn Then の部分で、現在のスイッチ状態を確認します。

blinkOn がTrueのときはセルを赤色 RGB(255, 0, 0) に変え、Falseのときはセルの色を消す xlNone という処理が交互に繰り返されます。

これが「点滅」に見える仕組みです。

 

実行結果がこちら

セル点滅マクロを実行

 

 

ループ処理が終わると blinkOn = Not blinkOn で状態を反転させ、Application.OnTime blinkTimer, “点滅処理" で1秒後に再度この処理を呼び出すよう予約します。

この「呼び出し → 処理 → 1秒後にまた呼び出し」というサイクルが続く限り、点滅が続きます。

 

Sub 点滅停止() を実行すると、タイマーをキャンセルして点滅を止め、点滅していたセルの色をすべてリセットします。

Private Sub Workbook_BeforeClose(Cancel As Boolean) はファイルを閉じる直前に自動実行される特殊なプロシージャです。

ファイルを閉じる際に点滅を止めておかないと、エクセルが閉じた後もタイマーが動き続けてしまうトラブルが起きる可能性があります。

この処理を入れておくことで、ファイルを閉じると同時に点滅が自動停止されます。

 

応用編|期日超過・未処理・完了で色を変えて点滅させる方法

先ほどのコードは「期日が3日以内」の1パターンのみでしたが、実際の業務ではもう少し細かく状態を分けたいことがあります。

 

たとえば「期日超過は赤く点滅」「期日3日前はオレンジで点滅」「未処理は黄色で点滅」というように、状況に応じて点滅の色を変えることも可能です。

サンプルとして、E列に「処理状況」(未処理・処理中・完了のいずれかを入力)が入力されており、「未処理」かつ「期日が今日以前」のセルを赤く点滅させる応用コードを紹介します。

Sub 点滅処理_応用()
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
Dim 期日 As Date
Dim 今日 As Date
Dim 状態 As String

Set ws = ThisWorkbook.Worksheets("スケジュール管理")
lastRow = ws.Cells(ws.Rows.Count, "D").End(xlUp).Row
今日 = Date

For i = 2 To lastRow
'期日と処理状況を取得
If ws.Cells(i, "D").Value <> "" Then
期日 = ws.Cells(i, "D").Value
状態 = ws.Cells(i, "E").Value

'条件1:期日超過かつ未処理 → 赤で点滅
If 期日 < 今日 And 状態 = "未処理" Then
If blinkOn Then
ws.Cells(i, "D").Interior.Color = RGB(255, 0, 0)
Else
ws.Cells(i, "D").Interior.ColorIndex = xlNone
End If

'条件2:期日3日以内かつ未処理 → オレンジで点滅
ElseIf 期日 - 今日 <= 3 And 期日 >= 今日 And 状態 = "未処理" Then
If blinkOn Then
ws.Cells(i, "D").Interior.Color = RGB(255, 165, 0)
Else
ws.Cells(i, "D").Interior.ColorIndex = xlNone
End If

'条件3:完了済みはセルの色をリセット
ElseIf 状態 = "完了" Then
ws.Cells(i, "D").Interior.ColorIndex = xlNone
End If
End If
Next i

blinkOn = Not blinkOn
blinkTimer = Now + TimeValue("00:00:01")
Application.OnTime blinkTimer, "点滅処理_応用"
End Sub

 

このコードでは ElseIf を使って複数の条件を順番に判定しています。

 

最初の If で「期日超過かつ未処理」を確認し、当てはまればセルを赤に点滅。

当てはまらなければ次の ElseIf で「3日以内かつ未処理」を確認し、オレンジに点滅。

さらに「完了」の場合はどのような状態であってもセルの色をリセットする、という3段階の判定です。

 

このように条件を追加していくだけで、業務の状況に合わせた細かい点滅ルールを設定することができます。

また、点滅させるセルの列は ws.Cells(i, “D") の “D" の部分を変えるだけで自由に変更可能です。

 

関連記事「別シートにテキストを自動転記」では、シートを指定するVBA、転記VBAが設定されたエクセルファイルをダウンロードすることができます。

 

まとめ ~ セルを点滅させるVBAは確認漏れの防止に役立つ ~

エクセルのスケジュール管理や未処理項目の見落としを防ぐには、セルを静的な色で目立たせるだけでは限界があります。

VBAの Application.OnTime を使えば、セルを動的に点滅させることが可能で、画面を開いた瞬間に誰でも重要項目に気づける仕組みを作ることができます。

今回紹介したコードは基本形としてそのまま使えますが、点滅させるセルの列・条件・色はすべて自由にカスタマイズ可能です。

 

「3日以内に期日が迫ったら点滅」「未処理かつ期日超過で赤点滅」というように、業務フローに合わせた条件を追加することで、スケジュール管理の精度をぐっと高めることができます。

 

note記事「スケジュール管理で大失敗してない!?セルを点滅させるVBAで確認作業を0秒で完了させる方法」では、本記事で紹介しているサンプルよりも簡単な例を使ってコードを解説、そしてセルを点滅させるVBAが設定されたエクセルファイルをダウンロードすることが可能です。

 

もし「自分の業務に合わせた複雑なチェック処理を実装したい」「既存のマクロを改良したい」といったご要望がありましたら、マメBlogのエクセルマクロ開発依頼にご相談ください。

 

業務内容に合わせたオーダーメイドマクロを設定させていただきます。
最後まで読んでいただきありがとうございました。エクセルVBAを使って面倒なルーティーン作業を自動化しちゃいましょう。