残業を減らす!Officeテクニック
Excelのチェックボックスと連動して日付を自動入力するマクロを作成する
2025年6月9日 06:55
以前の記事で、タスク完了時にチェックをONにすると、日付が自動入力されるテクニックを紹介しました。ただ、この方法ではTODAY関数を利用しており、[F2]→[F9]キーと押して値に変換する手間はかかります。
チェックON時に、固定された“本日の日付”を直接入力する方法があれば便利ですよね。「チェックボックスがON(TRUE)であれば、右隣のセルに本日日付を入力する」旨のコードをVBAで記述すれば可能です。今回はコピペで埋め込める簡単なコードを紹介します。
ただし、ファイルを[マクロ有効ブック]として保存する必要があります。また、標準ではVBAのコード(マクロ)は無効化されるため、有効化してから利用します。
VBAエディターにコードを埋め込む
今回入力するVBAのコードは以下の通りです。コピペするだけでそのまま動作しますが、セル範囲は固有値を指定しているので、利用環境に応じて修正してください。コードの詳細は後述します。
なお、[開発]タブは[Excelのオプション]から表示可能です。詳しくは、こちらの記事を参照してください。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cell As Range
Dim dateColOffset As Integer
dateColOffset = 1
If Not Intersect(Target, Me.Range("H2:H100")) Is Nothing Then
Application.EnableEvents = False
For Each cell In Target
If cell.Value = True Then
cell.Offset(0, dateColOffset).Value = Date
Else
cell.Offset(0, dateColOffset).ClearContents
End If
Next cell
Application.EnableEvents = True
End If
End Sub
コードの意味
簡単にコードの意味を解説します。自分の環境に合わせて修正できる箇所を確認しておくといいでしょう。
今回はワークシートに直接埋め込んでいるので、1行目(①)は変更禁止です。上部のプルダウンリストから[Worksheet]と[Change]を選択しても、同様のコードを自動入力できます。ワークシートに変更(Change)された時のコードという意味合いです。
2,3行目の「Dim~」は変数の宣言です(②)。ここでは「dateColOffset」という変数を用意して、オフセット量、つまり、現在のセルを基準にどれだけ“ずらす”のかを指定できるようにしています。4行目で「1」に設定しています。
5行目は「セルH2~H100が変更されているか」を判定します。チェックボックスを用意しているセル範囲に合わせて変更可能です。6行目では、一時的に処理を無効化して無限ループを回避しています。
7行目のFor Each文は、対象(Target:セルH2~H100)のセル分、処理を繰り返す命令です(③)。8行目の「If cell.Value = True Then」は、「セルの値が『True』(チェックON)なら」という条件判定です。
続く「cell.Offset(0, dateColOffset)」は、対象のセルを基準としたオフセット量を指します。4行目で「dateColOffset = 1」としているので、ここでは(0, 1)となります。チェックボックスの右隣のセルということです。8行目の条件を満たしていれば本日日付、満たしていなければ消去(ClearContents)となります。
最後の「Application.EnableEvents = True」で再び処理を有効化して、If文を終わります。
複雑なコードではないので、進捗管理やタスクの記録を効率化したい方におすすめです。環境に合わせてセル範囲やオフセット量を調整して導入してみてください。