· Workpaper Management · 10 min read

All Comments Deleter: Remove Every Review Note Before Sending a Workpaper to the Client

Scans every sheet for cell comments, lists them with counts per sheet, and deletes them all with one confirmation click. The companion to Comment Collector — save notes first, then strip them before sending.

Share:

TL;DR: Before you send a workpaper to the client, you need to remove every internal review note — preparer explanations, reviewer questions, partner sign-offs. Excel has no “delete all comments” command. This macro finds them all, shows you exactly where they are, and strips them in one confirmation click. Run Comment Collector first to save the notes to a report, then run this macro to clean the file.

The Problem

You’re about to send the Henderson Manufacturing workpaper to the client for their review. The numbers are right, the hyperlinks are stripped, the filters are cleared, the conditional formatting is gone. But there’s one thing left: the cell comments.

On the TB sheet, the preparer noted “AR reserve analysis — $89K over 90 days — discuss collectibility with controller.” On Sched-E, the reviewer flagged “COGS up 11% — client’s new supplier contract? Need explanation before sign-off.” On Fixed Assets, the partner wrote “Approved per discussion with client 03/15 — equipment valuation confirmed by third-party appraisal.”

None of this is for the client’s eyes. The preparer’s internal risk assessment, the reviewer’s open questions, the partner’s sign-off process — these are firm work product. They show your thinking, your doubts, your internal process. They do not belong in the file you email to the client.

Excel’s only native way to delete a comment is right-click → Delete Comment, one at a time. For 42 comments across 7 sheets, that’s 42 right-clicks. This macro replaces all of them with one confirmation click.

#Prerequisites & Setup

What you’ll need:

  • Excel 2016+ (desktop)
  • A workbook with cell comments that you want to remove before sending to a client
  • Important: Run Comment Collector first to archive notes as a PDF report. This macro permanently deletes comments — there is no undo

What the macro does:

  • Loops every sheet in ThisWorkbook and counts all cell comments
  • Reports the exact count per sheet in a message box so you can verify before acting
  • Suggests running Comment Collector first as a safety reminder
  • Asks once before deletion — one confirmation, not one per comment
  • Deletes all comments across all sheets using ws.Cells.ClearComments

What the macro does NOT do:

  • It does not collect comments before deleting. Run Comment Collector first
  • It does not remove threaded comments (modern Excel 365’s reply-thread system). Threaded comments use a separate object model and are not in the Comments collection
  • It does not remove cell content. If a cell has both a value and a comment, only the comment is deleted — the cell value remains

Limitations:

  • Works on ThisWorkbook — the workbook containing the macro. Store in Personal Macro Workbook (PERSONAL.XLSB) to run on any open file
  • There is no undo. Once ClearComments runs, the comments are gone permanently. This is by design — the confirmation MsgBox is your safety net
  • Deletion is all-or-nothing per workbook. You cannot selectively keep some comments while deleting others. If you need to preserve certain comments, save a copy of the file first

#The Macro

Option Explicit

Sub DeleteAllComments()
    ' ── All Comments Deleter ──────────────────────────
    ' Scans every sheet for cell comments. Reports the
    ' count and which sheets are affected. One click to
    ' confirm and remove them all.
    '
    ' Destructive. Run Comment Collector first.
    ' Zero configuration. One confirmation. All clear.
    ' ────────────────────────────────────────────────────

    ' ── State management ───────────────────────────────
    Application.ScreenUpdating = False

    ' ── Variables ──────────────────────────────────────
    Dim ws As Worksheet
    Dim total As Long
    Dim sheetCount As Long
    Dim sheetList As String

    ' ── Error handling ─────────────────────────────────
    On Error GoTo CleanUp

    ' ── Step 1: Count comments across all sheets ───────
    total = 0
    sheetCount = 0
    sheetList = ""

    For Each ws In ThisWorkbook.Worksheets
        If ws.Comments.Count > 0 Then
            sheetCount = sheetCount + 1
            sheetList = sheetList & "  • " & ws.Name & _
                        " (" & ws.Comments.Count & ")" & vbCrLf
            total = total + ws.Comments.Count
        End If
    Next ws

    ' ── Step 2: Report findings ────────────────────────
    If total = 0 Then
        MsgBox "No comments found in any sheet.", _
               vbInformation, "All Clear"
        GoTo CleanUp
    End If

    Dim msg As String
    msg = "Found " & total & " comment(s) across " & _
          sheetCount & " sheet(s):" & vbCrLf & vbCrLf & _
          sheetList & vbCrLf & _
          "⚠ Tip: Run Comment Collector first to save" & _
          " notes before deleting." & vbCrLf & vbCrLf & _
          "Delete all comments? This cannot be undone."

    ' ── Step 3: Confirm and delete ─────────────────────
    If MsgBox(msg, vbExclamation + vbYesNo, _
              "Confirm Comment Deletion") = vbNo Then
        MsgBox "No comments were deleted.", _
               vbInformation, "Cancelled"
        GoTo CleanUp
    End If

    For Each ws In ThisWorkbook.Worksheets
        If ws.Comments.Count > 0 Then
            ws.Cells.ClearComments
        End If
    Next ws

    ' ── Step 4: Final report ───────────────────────────
    MsgBox "Deleted " & total & " comment(s) from " & _
           sheetCount & " sheet(s).", vbInformation, "Done"

CleanUp:
    Application.ScreenUpdating = True

    If Err.Number <> 0 Then
        MsgBox "Error " & Err.Number & ": " & Err.Description, _
               vbCritical, "Macro Error"
    End If
End Sub

#How It Works

#Count first, delete later

The macro runs in two passes — a read-only counting pass and a deletion pass — separated by a confirmation message box. You get a complete inventory of every comment before anything is touched.

For Each ws In ThisWorkbook.Worksheets
    If ws.Comments.Count > 0 Then
        sheetCount = sheetCount + 1
        sheetList = sheetList & "  • " & ws.Name & _
                    " (" & ws.Comments.Count & ")" & vbCrLf
        total = total + ws.Comments.Count
    End If
Next ws

The message box lists every sheet with comments and the count on each. If the Fixed Assets sheet shows 4 comments and you know the partner’s sign-off is there and you want to keep it, you can click No, save the file, strip comments from the other sheets manually, then run the macro to clean up the rest.

This is the same pattern used in Hyperlink Stripper and All Shapes Deleter. Count everything, show the user, get confirmation, then act.

#ws.Cells.ClearComments — one line per sheet

If ws.Comments.Count > 0 Then
    ws.Cells.ClearComments
End If

ClearComments is the most efficient way to delete all comments on a sheet. It clears every comment in one call — no need to loop through each Comment object individually. The guard clause (If count > 0) avoids calling ClearComments on sheets with no comments, which is harmless but unnecessary.

ClearComments was introduced in Excel 2010 and is faster than looping through ws.Comments and calling .Delete on each. For a sheet with 20 comments, the difference is negligible. For a workbook with 200 comments across 10 sheets, ClearComments is noticeably faster.

#The Comment Collector reminder

The confirmation message box includes a tip:

msg = msg & vbCrLf & _
      "⚠ Tip: Run Comment Collector first to save" & _
      " notes before deleting."

This is deliberate. The Comment Collector macro is this macro’s companion — it extracts every comment into a printable report before you delete them. If the user runs this macro without collecting comments first, they lose valuable review history. The reminder in the confirmation dialog gives them a last chance to cancel, run Comment Collector, archive the notes, and then come back.

Note there’s no automated Comment Collector call. Calling one macro from another in Excel requires both macros to be in the same module or available in the same workbook. Since this macro may live in Personal Macro Workbook and Comment Collector may be in a different module, the reminder is safer than a failed cross-reference.

If MsgBox(msg, vbExclamation + vbYesNo, _
          "Confirm Comment Deletion") = vbNo Then

vbExclamation shows a yellow warning icon, not a blue question mark. The yellow icon signals “this action is destructive and cannot be undone.” Comments are permanently deleted — no undo, no recovery (unless you saved the comments first with Comment Collector). The warning icon primes the user to think before clicking Yes.

#No Calculation toggle

This macro doesn’t write to any cells or change any values. It only clears the comment objects from each sheet’s comment collection. No formulas recalculate, no cell values change. Toggling Application.Calculation would add two lines for zero benefit.

Application.ScreenUpdating = False is included because clearing comments triggers a sheet repaint. Without it, Excel redraws each sheet as comments are removed, causing visible blinking across multiple sheets.

#The cancelled path reports nothing happened

If MsgBox(msg, vbExclamation + vbYesNo, ...) = vbNo Then
    MsgBox "No comments were deleted.", _
           vbInformation, "Cancelled"
    GoTo CleanUp
End If

When the user clicks No, a second MsgBox confirms that nothing happened. This is important for trust. If the macro exits silently on cancel, the user might wonder “did it delete them anyway?” The explicit “No comments were deleted” message removes all doubt.

#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.

One macro recipe every two weeks. Unsubscribe anytime.

E

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.

More about me →