Zero-Length String Killer: Clean Up the Invisible Clutter in Every Inherited Workpaper
Finds every cell containing an empty string (the formula result of "") and replaces it with a truly blank cell. Fixes broken pivot tables, restores ISBLANK(), and shrinks the used range — across every visible sheet in one pass.
Table of Contents
TL;DR: Your pivot table shows a “(blank)” group with 47 items inside it. COUNTA says you have 300 rows when you can only see 200. ISBLANK returns FALSE on cells that look completely empty. The culprit: zero-length strings — formula results of "" that look blank but aren’t. This macro finds every one of them across your workbook and clears them to truly empty cells. No more phantom data. No more pivot table clutter. One click.
The Problem
You import the Henderson trial balance into your consolidation workbook and set
up the usual cross-checks. The pivot table summary on the Dashboard tab shows a
mysterious “(blank)” group in the account type field — 47 items that shouldn’t
exist. COUNTA on the TB sheet reports 2,140 filled cells when you can physically
count maybe 1,800. You click what looks like an empty cell and the formula bar
reveals a deserted =IF(A1="","",VLOOKUP(...)) — a formula diligently returning
absolutely nothing, consuming memory, and confusing every Excel function that
checks for emptiness.
You inherited 14 sheets of formulas structured like this. Every
=IF(condition,value,"") where the condition is false leaves behind an invisible
ghost. It looks blank. It prints blank. But ISBLANK says FALSE, COUNTA counts
it, pivot tables group it as “(blank)”, and Ctrl+End jumps past actual data into
a sea of empty strings. Your workbook probably has thousands of these, and you’ll
never find them one cell at a time.
This macro scans every visible sheet, identifies every formula cell whose result
is "", and clears it to a truly empty cell. Nothing is modified except the
zero-length strings. Your formulas that return actual values — text, numbers,
dates, even zeros — are left alone.
#Prerequisites & Setup
What you’ll need:
- Excel 2016+ (desktop)
- A workbook with formulas that sometimes return
""(e.g.,=IF(A1=0,"",A1),=IFERROR(VLOOKUP(...),""),=IF(ISBLANK(B2),"",B2*C2)) - The macro works on every visible sheet automatically — no sheet selection required
What the macro does NOT do:
- It does not modify formulas that return actual values (text, numbers, dates, zeros). Only cells where the formula result is
""are cleared. - It does not clear cells that contain a single space or other whitespace — those are different from zero-length strings.
- It does not touch hidden sheets. The macro skips
xlSheetHiddenandxlSheetVeryHiddensheets.
Limitations:
- Formulas that return
""are permanently converted to empty cells. The formula itself is deleted — not the formula’s result, the entire formula. You cannot undo this. Run Timestamped Backup before using this macro if you need to preserve formulas for future periods. - Cells containing the text value
""(an actual two-character text string of two double quotes) are not affected. The macro checks forLen() = 0, which literal""text would fail. - Only visible sheets are processed. If you have hidden sheets with zero-length strings, they’ll remain.
#The Macro
Option Explicit
Sub KillZeroLengthStrings()
' ── Zero-Length String Killer ──────────────────────
' Finds every formula cell whose result is a zero-
' length string ("") and clears it to a truly empty
' cell. Skips hidden sheets. Reports count per sheet.
'
' Zero-length string: Len(cell.Value) = 0 BUT
' NOT IsEmpty(cell.Value). Only formula results
' of "" match this — true blanks don't.
' ────────────────────────────────────────────────────
' ── State management ───────────────────────────────
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
' ── Variables ──────────────────────────────────────
Dim ws As Worksheet
Dim cell As Range
Dim rngFormulas As Range
Dim count As Long, total As Long, sheetCount As Long
Dim msg As String, sheetReports As String
' ── Error handling ─────────────────────────────────
On Error GoTo CleanUp
total = 0
sheetCount = 0
sheetReports = ""
For Each ws In ThisWorkbook.Worksheets
' Skip hidden and very-hidden sheets
If ws.Visible = xlSheetVisible Then
count = 0
' Find all formula cells on this sheet
' SpecialCells raises an error if no formulas
' exist — suppress it and skip the sheet
On Error Resume Next
Set rngFormulas = ws.Cells.SpecialCells(xlCellTypeFormulas)
On Error GoTo CleanUp
If Not rngFormulas Is Nothing Then
For Each cell In rngFormulas
' The key test: Len = 0 but NOT IsEmpty
' True blank cells pass IsEmpty, zero-
' length strings don't.
If Len(cell.Value) = 0 And _
Not IsEmpty(cell.Value) Then
cell.ClearContents
count = count + 1
End If
Next cell
End If
If count > 0 Then
sheetReports = sheetReports & "'" & ws.Name & _
"' (" & count & "), "
total = total + count
sheetCount = sheetCount + 1
End If
End If
Next ws
' ── Report results ──────────────────────────────────
If total = 0 Then
MsgBox "No zero-length strings found. " & _
"All cells are either populated or truly empty.", _
vbInformation, "Zero-Length Strings"
GoTo CleanUp
End If
sheetReports = Left(sheetReports, Len(sheetReports) - 2)
msg = "Cleared " & total & " zero-length string(s) " & _
"across " & sheetCount & " sheet(s):" & _
vbCrLf & vbCrLf & sheetReports & vbCrLf & vbCrLf & _
"Tip: Run Timestamped Backup first if you need " & _
"to preserve the original formulas."
MsgBox msg, vbInformation, "Zero-Length Strings Cleared"
CleanUp:
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
If Err.Number <> 0 Then
MsgBox "Error " & Err.Number & ": " & Err.Description, _
vbCritical, "Macro Error"
End If
End Sub
#How It Works
#The IsEmpty vs. Len distinction
This is the core of the macro — and the core of the zero-length string problem.
A truly empty cell and a cell containing "" look identical to the human eye,
but Excel sees them as completely different things:
| State | IsEmpty(cell) | Len(cell.Value) | COUNTBLANK | COUNTA | ISBLANK |
|---|---|---|---|---|---|
| Truly empty | True | 0 | Counts it | Ignores it | TRUE |
Contains "" | False | 0 | Ignores it | Counts it | FALSE |
The macro hooks into exactly this distinction. A zero-length string is any cell
where Len(cell.Value) = 0 but IsEmpty(cell.Value) = False. Only formula
results of "" match this test — true blanks fail IsEmpty, and cells with
actual content fail Len() = 0.
If Len(cell.Value) = 0 And Not IsEmpty(cell.Value) Then
cell.ClearContents
End If
This test doesn’t catch literal text strings that happen to look empty (like a
single space " " or a formula returning a space). Those have Len() > 0 and
pass right through. That’s intentional — a space is visible content someone
deliberately placed. Zero-length strings are invisible accidents.
#Why only formula cells are scanned
The macro uses SpecialCells(xlCellTypeFormulas) to restrict the scan to
formula cells:
On Error Resume Next
Set rngFormulas = ws.Cells.SpecialCells(xlCellTypeFormulas)
On Error GoTo CleanUp
A constant cell (one that was typed directly) cannot contain a zero-length
string. If you type ="" into a cell as a constant, Excel stores it as the
two-character text string "" — visible, non-empty. The only way to create a
zero-length string is through a formula: =IF(A1=0,"",A1),
=IFERROR(VLOOKUP(...),""), =IF(condition,value,""). By restricting the scan
to formula cells, we avoid checking every single cell in the workbook and only
look where the problem can actually exist.
For a workbook with 10,000 formula cells and 500,000 constant cells, this cuts the scan time by 98%.
#Hidden sheets are skipped — deliberately
If ws.Visible = xlSheetVisible Then
Hidden sheets often contain lookup tables, rate schedules, and calculation
engines that the preparer deliberately hid. These sheets may have conditional
formulas returning "" that are integral to the workbook’s operation. Clearing
them would break other sheets that depend on those formula results.
Visible sheets are where the user-facing data lives — trial balances, schedules, reconciliations. These are the sheets where zero-length strings cause the pivot table and ISBLANK confusion the macro is designed to fix.
#The report breaks down per-sheet results
The MsgBox at the end isn’t just “Done.” It lists every affected sheet with a count:
Cleared 1,247 zero-length string(s) across 3 sheet(s):
'TB Import' (612), 'State Apport.' (428), 'JE Log' (207)
Tip: Run Timestamped Backup first if you need to preserve
the original formulas.
This per-sheet breakdown tells you exactly where the clutter was concentrated.
If one sheet accounts for 80% of the clears, that’s the sheet with the most
aggressive IF(...,"") pattern — and the one you might want to redesign.
#A deliberate tip, not a nag
The MsgBox includes a gentle reminder:
Tip: Run Timestamped Backup first if you need to preserve the original formulas.
The macro doesn’t force a backup or add a confirmation dialog for every sheet.
A single MsgBox at the end is enough. The user is clearing invisible garbage —
not deleting important data. If they’re uncertain, they should back up first.
If they’re confident the "" formulas serve no purpose (which is almost always
the case in inherited workpapers where the original preparer is gone), they can
run it directly.
#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.