Bulk Date Updater: Change the Period-End Date Across Every Sheet at Once
One macro that sets the period-end date on the first sheet and links every other sheet to it with a formula. Change one cell, update forty tabs.
Table of Contents
TL;DR: This macro plants the period-end date on the first sheet, then links every other sheet that already has a date to it with a formula. Cover pages and summaries are left alone. Change one cell, all date-bearing tabs follow.
The Problem
You’ve built a 40-tab workpaper file for a quarterly review client. Every sheet uses A3 for the period-end date — it feeds into headers, lookup formulas, and cross-references. The quarter just changed. Now you need to update A3 on every single sheet. Worse, if the date changes again mid-review, you’re doing it twice.
This macro makes the first sheet the single source of truth and links every other sheet to it with a formula. Change A3 on sheet one, and every tab follows instantly. No VBA required for the second update.
#Prerequisites & Setup
What you’ll need:
- Excel 2016+ (desktop)
- A workbook where A3 on every sheet (or most sheets) contains a date
- Dates stored as actual Excel dates, not text strings that look like dates
Limitations:
- Only checks cell A3 — change
TARGET_CELLin the code if your workpapers use a different cell - Does not skip hidden or protected sheets — unprotect or unhide those first
- The sheet you’re on when you run the macro becomes the master — navigate there first
HasDateLikestrips common prefixes (FY:, YE:, PE:, etc.) and tests the remainder. If your firm uses an unusual prefix, add it to theprefixesarray in the helper function.
#The Macro
Option Explicit
Sub BulkUpdatePeriodEnd()
' ── Bulk Date Updater ──────────────────────────────
' Makes the current sheet the master: sets its
' period-end date, then links every other sheet's
' target cell to it — but ONLY on sheets that
' already contain a date. The HasDateLike helper
' also catches prefixed text like "FY: 12/31/26".
'
' Change the constants below to customize.
' ────────────────────────────────────────────────────
Const NEW_DATE As Date = #12/31/2026#
Const TARGET_CELL As String = "A3"
Dim ws As Worksheet
Dim firstSheetName As String
Dim changed As Long
Dim skipped As Long
changed = 0
skipped = 0
firstSheetName = ActiveSheet.Name
For Each ws In ThisWorkbook.Worksheets
If ws.Name = firstSheetName Then
' Master sheet: always gets the date
ws.Range(TARGET_CELL).Value = NEW_DATE
ws.Range(TARGET_CELL).NumberFormat = """YE: ""mm/dd/yyyy"
changed = changed + 1
ElseIf IsDate(ws.Range(TARGET_CELL).Value) Or _
HasDateLike(CStr(ws.Range(TARGET_CELL).Value & "")) Then
' Date-bearing sheet: link to master
ws.Range(TARGET_CELL).Formula = "='" & firstSheetName & "'!" & TARGET_CELL
ws.Range(TARGET_CELL).NumberFormat = """YE: ""mm/dd/yyyy"
changed = changed + 1
Else
' No date found — skip
skipped = skipped + 1
End If
Next ws
MsgBox changed & " sheet(s) linked to " _
& Format(NEW_DATE, "mm/dd/yyyy") & "." & vbCrLf & _
skipped & " sheet(s) skipped (no date found).", _
vbInformation, "Done"
End Sub
' ── Helper: strip common prefixes and test what's left ──
Private Function HasDateLike(val As String) As Boolean
Dim s As String
s = val
' Strip common prefixes (case-insensitive)
Dim prefixes As Variant
Dim p As Variant
prefixes = Array("FY:", "YE:", "PE:", "Q/E:", "QE:", _
"As of", "Period End:", "Period-End:", _
"Year End:", "Year-End:", "Quarter End:")
For Each p In prefixes
If LCase(Left(s, Len(p))) = LCase(p) Then
s = Trim(Mid(s, Len(p) + 1))
Exit For
End If
Next p
' Test what remains
HasDateLike = IsDate(s)
End Function
#How It Works
#First sheet is the master, rest are mirrors
Whatever sheet you’re on when you run the macro becomes the master — it always
gets the actual date value. Every other sheet that already has a date gets a
formula like ='TB'!A3 pointing back to it. Change the master once and every
linked tab updates instantly, no macro needed.
#Only touches sheets that already have a date
The IsDate check catches proper Excel dates and serial numbers. But what if
someone wrote "FY: 12/31/26" as plain text? The HasDateLike helper strips
common prefixes — "FY:", "YE:", "PE:", "As of", etc. — and tests
what remains with IsDate. No regex, no external objects, works on every
Excel install.
ElseIf IsDate(ws.Range(TARGET_CELL).Value) Or _
HasDateLike(CStr(ws.Range(TARGET_CELL).Value & "")) Then
ws.Range(TARGET_CELL).Value = NEW_DATE ' master: real date
Else
ws.Range(TARGET_CELL).Formula = "='" & firstSheetName & "'!" & TARGET_CELL ' mirrors: formula link
End If
#The “YE: ” prefix is just a number format
The NumberFormat line wraps the date in a custom format string:
ws.Range(TARGET_CELL).NumberFormat = """YE: ""mm/dd/yyyy"
This displays 12/31/2026 as YE: 12/31/2026 in the cell, but the underlying
value is still a proper Excel date (serial number). Formulas that reference A3
for date math — EOMONTH, DAYS, fiscal-period lookups — all work without
needing to strip the prefix. It’s pure presentation.
#Why a message box at the end
Silent macros are dangerous. The message box tells you exactly what happened —
7 sheet(s) linked, 3 skipped — so you can spot-check before moving on. If you
expected 10 links and got 7, something’s off.
#Before you run: save first (or work on a copy)
VBA has no undo button. Once this macro writes to every sheet, there’s no Ctrl+Z. The standard approach in tax shops:
- Save the workbook right before running — one click, total safety net
- Work on a copy if you’re testing —
File → Save Asa duplicate first - Close other workbooks so
ActiveSheetdoesn’t accidentally target the wrong file - Check the message box count matches your expectations — if you have
8 workpaper tabs and the message says
6 linked, 2 skipped, investigate the two skipped ones before you close it
Some developers build an undo system by storing old values in a dictionary before making changes, but for a macro this small, a save-then-run habit is simpler and just as safe.
#Adapt It
Get the next macro in your inbox
One copy-paste-ready macro recipe every two weeks. No spam, no VBA theory — just automation that saves you time.
Excel Macro Guy
Excel enthusiast · married to an accountant
I love Excel. My wife is an accountant. Every busy season, I watch her wrestle with workpapers and think "a macro could do that in half a second." So I build them. She tests them on real client data. What survives gets published here.