Sample report Acme Industries — fictional company. Real analysis. Audit your own workbook

5 critical — critical findings — start with Raw Data

11 sheet(s) · 679 cells · 289 formulas · audited in 0.13s

5 critical 126 warnings 8 info

Executive summary

This workbook scores 59.7 out of 100 (grade D), reflecting meaningful structural and data-quality issues across its 11 sheets and 289 formula cells. The most serious concern is five critical error values sitting as static content in the Raw Data sheet — these are not live formula errors but hardcoded error states, almost certainly the result of a paste operation that overwrote underlying calculations. Until they are resolved, any formula downstream that references those cells will either inherit the error or silently ignore it.

Two circular references are present and both carry the intentional_iterative flag, meaning the model relies on Excel's iterative calculation setting being enabled. This is a portability risk: the model will behave incorrectly or refuse to calculate on any machine where iterative calculation is turned off, including many shared or locked-down environments. Beyond that, 76 instances of hardcoded constants embedded in formulas and 46 fragile VLOOKUP constructs (using hardcoded column indices and approximate matching) were flagged as worth reviewing; these are heuristic findings and may include some false positives, but the volume suggests systematic practices that could cause silent errors if the workbook is extended.

Lower-severity items include one inconsistent formula in a range, one merged cell inside a data or formula range, six numbers stored as text in referenced ranges, and two overly complex formulas. These are warnings or informational findings and do not individually threaten model integrity, but they add friction to auditing and maintenance. Collectively, the combination of static error values, iterative-dependency risk, and a high density of fragile lookups warrants a structured remediation pass before this workbook is used for decision-making.

Top fixes

Replace static error values in Raw Data

B12B13C12D13E14

Locate the original source data or calculations for these cells on the Raw Data sheet. The errors appear to have been pasted in as static values rather than retained as live formulas. Restore the underlying formulas or supply correct data values, then verify that all downstream references recalculate cleanly.

Address iterative circular references and document the dependency

Balance Sheet!B10Sensitivity!B10

Because these circular references require iterative calculation to be enabled, add a prominent workbook-level note documenting this requirement. Evaluate whether the circular logic can be restructured to remove the dependency; if not, ensure all users and any automated processes that open this file have iterative calculation switched on to avoid silent miscalculation.

Harden fragile VLOOKUP formulas in Order Book

F10F11F12

These VLOOKUPs use a hardcoded column index and approximate matching, making them worth reviewing for correctness. Replace them with INDEX/MATCH (or XLOOKUP if available) using exact-match mode, which eliminates the column-index brittleness and prevents silently wrong results from unsorted lookup tables. Audit the remaining flagged lookups across the workbook for the same pattern.

Generated from the findings above only — the AI never reads your workbook. Heuristic findings are candidates to review, not verdicts.

Score deductions

CheckSeverityFindingsPoints
Error values in cells critical 5 −15.0
Hardcoded constants inside formulas warning 76 −8.0
Fragile lookups warning 46 −6.0
Inconsistent formulas in a range warning 1 −3.8
Circular references warning 2 −3.0
Merged cells inside data/formula ranges warning 1 −2.6
Numbers stored as text in referenced ranges info 6 −1.1
Overly complex formulas info 2 −0.9

8 findings across 2 checks (severity filter active) — worst first. Chips filter by severity.

5 critical 126 warnings 8 info Critical only

Critical

fix these first 0 findings · −0 pts

Hidden by the filter — show everything.

Warnings

plan these 0 findings · −0 pts

Hidden by the filter — show everything.

Info

good to know 8 notes · −2.0 pts
Numbers stored as text in referenced ranges heuristic 6 · −1.1 pts

Functions like SUM and AVERAGE silently skip text, so a number stored as text contributes nothing to the totals that read it. The total still looks plausible — it is simply missing rows — making this a classic source of invisible understatement.

Raw Data!B19 The value "1,240" is stored as text, not as a number, inside a range read by formulas such as Raw Data!B20.
Raw Data!C19 The value "1,255" is stored as text, not as a number, inside a range read by formulas such as Raw Data!B20.
Raw Data!D19 The value "1,283" is stored as text, not as a number, inside a range read by formulas such as Raw Data!B20.
Raw Data!E19 The value "1,310" is stored as text, not as a number, inside a range read by formulas such as Raw Data!B20.
Raw Data!F19 The value "1,342" is stored as text, not as a number, inside a range read by formulas such as Raw Data!B20.
Raw Data!G19 The value "1,371" is stored as text, not as a number, inside a range read by formulas such as Raw Data!B20.
Overly complex formulas 2 · −0.9 pts

Formulas nobody can read are formulas nobody can verify — deeply nested or very long formulas hide mistakes during review and break silently when edited. They are prime candidates for refactoring into helper cells or named ranges (LAMBDA/LET).

DCF!B12 Formula is nested 7 functions deep (limit 5): =ROUND(MAX(0,SUM(B6:F6)+IF(ISNUMBER(B9),B9,MIN(ABS(SUM(B6:F6)),MAX(0,AVERAGE(B6:F6))*ROUND(MIN(9,CO…
DCF!B8 Formula is nested 7 functions deep (limit 5) and 228 characters long (limit 200): =IF(WACC!$B$10>Assumptions!$B$20,MAX(0,MIN(('Cash Flow'!F12*(1+Assumptions!$B$20))/(WACC!$B$10-Assu…

Fix pack Pro

Pro feature — shown in full here so you can see exactly what you'd get. On your own reports the checklist below is part of Pro.

122 paste-ready corrections (46 mechanical, 76 assisted) — prepared from this audit's findings. Your workbook is never modified; each fix is a formula you paste yourself.

Create these input cells first

The extraction fixes below reference labeled assumption cells — add a sheet named Assumptions and enter each value once (label in column A, value in column B):

CellValueSuggested label
Assumptions!$B$1 0.25 Assumption 1 (was 0.25)
Assumptions!$B$2 0.82 Assumption 2 (was 0.82)
Assumptions!$B$3 0.019 Assumption 3 (was 0.019)
Assumptions!$B$4 9 Assumption 4 (was 9)
Assumptions!$B$5 4 Assumption 5 (was 4)
Assumptions!$B$6 6 Assumption 6 (was 6)
Assumptions!$B$7 14 Assumption 7 (was 14)
Assumptions!$B$8 1000 Assumption 8 (was 1000)
Assumptions!$B$9 8 Assumption 9 (was 8)
Assumptions!$B$10 0.21 Assumption 10 (was 0.21)
Assumptions!$B$11 1.02 Assumption 11 (was 1.02)
Assumptions!$B$12 1.04 Assumption 12 (was 1.04)
Assumptions!$B$13 1.06 Assumption 13 (was 1.06)
Assumptions!$B$14 1.08 Assumption 14 (was 1.08)
Assumptions!$B$15 1.21 Assumption 15 (was 1.21)
Assumptions!$B$16 3 Assumption 16 (was 3)
Assumptions!$B$17 1.052 Assumption 17 (was 1.052)
Assumptions!$B$18 -0.005 Assumption 18 (was -0.005)
Assumptions!$B$19 -0.0025 Assumption 19 (was -0.0025)
Assumptions!$B$20 0.0025 Assumption 20 (was 0.0025)
Assumptions!$B$21 0.005 Assumption 21 (was 0.005)
Assumptions!$B$22 -0.01 Assumption 22 (was -0.01)
Assumptions!$B$23 0.01 Assumption 23 (was 0.01)

The checklist

Order Book!F10 mechanical 40 cells share this pattern

before =VLOOKUP(C10,'Raw Data'!$A$24:$E$26,4)

after =VLOOKUP(C10,'Raw Data'!$A$24:$E$26,4,FALSE)

Adds the exact-match flag (FALSE) to 1 lookup so unsorted data returns errors instead of silently wrong values. The hardcoded column index still needs review — it will drift if columns are inserted.

Fill down: apply the same correction across F4:F43 — the pattern is identical in all 40 cells (adjust relative references as Excel does).

Revenue Build!B10 mechanical 3 cells share this pattern

before =VLOOKUP(A10,'Raw Data'!$A$24:$E$26,3)

after =VLOOKUP(A10,'Raw Data'!$A$24:$E$26,3,FALSE)

Adds the exact-match flag (FALSE) to 1 lookup so unsorted data returns errors instead of silently wrong values. The hardcoded column index still needs review — it will drift if columns are inserted.

Fill down: apply the same correction across B9:B11 — the pattern is identical in all 3 cells (adjust relative references as Excel does).

Sensitivity!B14 mechanical 3 cells share this pattern

before =VLOOKUP(B6,$H$15:$I$19,2)

after =VLOOKUP(B6,$H$15:$I$19,2,FALSE)

Adds the exact-match flag (FALSE) to 1 lookup so unsorted data returns errors instead of silently wrong values. The hardcoded column index still needs review — it will drift if columns are inserted.

Fill down: apply the same correction across B14, D14, F14 — the pattern is identical in all 3 cells (adjust relative references as Excel does).

Cash Flow!B10 assisted 5 cells share this pattern

before =B6*0.82

after =B6*Assumptions!$B$2

Replaces the buried constant (0.82 → Assumptions!$B$2) with a labeled input cell you create once on an 'Assumptions' sheet — one place to see and update it.

Fill down: apply the same correction across B10:F10 — the pattern is identical in all 5 cells (adjust relative references as Excel does).

Income Statement!B10 assisted 5 cells share this pattern

before =MAX(0,B9*0.21)

after =MAX(0,B9*Assumptions!$B$10)

Replaces the buried constant (0.21 → Assumptions!$B$10) with a labeled input cell you create once on an 'Assumptions' sheet — one place to see and update it.

Fill down: apply the same correction across B10:F10 — the pattern is identical in all 5 cells (adjust relative references as Excel does).

Income Statement!B6 assisted 5 cells share this pattern

before ='Cash Flow'!B10*0.82

after ='Cash Flow'!B10*Assumptions!$B$2

Replaces the buried constant (0.82 → Assumptions!$B$2) with a labeled input cell you create once on an 'Assumptions' sheet — one place to see and update it.

Fill down: apply the same correction across B6:F6 — the pattern is identical in all 5 cells (adjust relative references as Excel does).

Order Book!E10 assisted 40 cells share this pattern

before =D10*1.21

after =D10*Assumptions!$B$15

Replaces the buried constant (1.21 → Assumptions!$B$15) with a labeled input cell you create once on an 'Assumptions' sheet — one place to see and update it.

Fill down: apply the same correction across E4:E43 — the pattern is identical in all 40 cells (adjust relative references as Excel does).

Raw Data!F6 assisted 3 cells share this pattern

before =(E6/B6)^(1/3)-1

after =(E6/B6)^(1/Assumptions!$B$16)-1

Replaces the buried constant (3 → Assumptions!$B$16) with a labeled input cell you create once on an 'Assumptions' sheet — one place to see and update it.

Fill down: apply the same correction across F6:F8 — the pattern is identical in all 3 cells (adjust relative references as Excel does).

Balance Sheet!B10 assisted

before =B5+B6-MAX(0,B9*0.25)

after =B5+B6-MAX(0,B9*Assumptions!$B$1)

Replaces the buried constant (0.25 → Assumptions!$B$1) with a labeled input cell you create once on an 'Assumptions' sheet — one place to see and update it.

Cash Flow!B8 assisted

before ='Revenue Build'!B12*0.019

after ='Revenue Build'!B12*Assumptions!$B$3

Replaces the buried constant (0.019 → Assumptions!$B$3) with a labeled input cell you create once on an 'Assumptions' sheet — one place to see and update it.

DCF!B12 assisted

before =ROUND(MAX(0,SUM(B6:F6)+IF(ISNUMBER(B9),B9,MIN(ABS(SUM(B6:F6)),MAX(0,AVERAGE(B6:F6))*ROUND(MIN(9,COUNT(B6:F6)+4),0)))),0)

after =ROUND(MAX(0,SUM(B6:F6)+IF(ISNUMBER(B9),B9,MIN(ABS(SUM(B6:F6)),MAX(0,AVERAGE(B6:F6))*ROUND(MIN(Assumptions!$B$4,COUNT(B6:F6)+Assumptions!$B$5),0)))),0)

Replaces the buried constants (9 → Assumptions!$B$4, 4 → Assumptions!$B$5) with a labeled input cell you create once on an 'Assumptions' sheet — one place to see and update it.

DCF!B8 assisted

before =IF(WACC!$B$10>Assumptions!$B$20,MAX(0,MIN(('Cash Flow'!F12*(1+Assumptions!$B$20))/(WACC!$B$10-Assumptions!$B$20),SUM('Cash Flow'!B12:F12)*ROUND(MAX(6,MIN(14,AVERAGE('Cash Flow'!B12:F12)/1000)),0)*4)),SUM('Cash Flow'!B12:F12)*8)

after =IF(WACC!$B$10>Assumptions!$B$20,MAX(0,MIN(('Cash Flow'!F12*(1+Assumptions!$B$20))/(WACC!$B$10-Assumptions!$B$20),SUM('Cash Flow'!B12:F12)*ROUND(MAX(Assumptions!$B$6,MIN(Assumptions!$B$7,AVERAGE('Cash Flow'!B12:F12)/Assumptions!$B$8)),0)*Assumptions!$B$5)),SUM('Cash Flow'!B12:F12)*Assumptions!$B$9)

Replaces the buried constants (4 → Assumptions!$B$5, 6 → Assumptions!$B$6, 14 → Assumptions!$B$7, 1000 → Assumptions!$B$8, 8 → Assumptions!$B$9) with a labeled input cell you create once on an 'Assumptions' sheet — one place to see and update it.

Income Statement!C8 assisted

before ='Balance Sheet'!B8*1.02

after ='Balance Sheet'!B8*Assumptions!$B$11

Replaces the buried constant (1.02 → Assumptions!$B$11) with a labeled input cell you create once on an 'Assumptions' sheet — one place to see and update it.

Income Statement!D8 assisted

before ='Balance Sheet'!B8*1.04

after ='Balance Sheet'!B8*Assumptions!$B$12

Replaces the buried constant (1.04 → Assumptions!$B$12) with a labeled input cell you create once on an 'Assumptions' sheet — one place to see and update it.

Income Statement!E8 assisted

before ='Balance Sheet'!B8*1.06

after ='Balance Sheet'!B8*Assumptions!$B$13

Replaces the buried constant (1.06 → Assumptions!$B$13) with a labeled input cell you create once on an 'Assumptions' sheet — one place to see and update it.

Income Statement!F8 assisted

before ='Balance Sheet'!B8*1.08

after ='Balance Sheet'!B8*Assumptions!$B$14

Replaces the buried constant (1.08 → Assumptions!$B$14) with a labeled input cell you create once on an 'Assumptions' sheet — one place to see and update it.

Revenue Build!D5 assisted

before =C5*1.052

after =C5*Assumptions!$B$17

Replaces the buried constant (1.052 → Assumptions!$B$17) with a labeled input cell you create once on an 'Assumptions' sheet — one place to see and update it.

Sensitivity!A4 assisted

before =Assumptions!$B$20+-0.005

after =Assumptions!$B$20+Assumptions!$B$18

Replaces the buried constant (-0.005 → Assumptions!$B$18) with a labeled input cell you create once on an 'Assumptions' sheet — one place to see and update it.

Sensitivity!A5 assisted

before =Assumptions!$B$20+-0.0025

after =Assumptions!$B$20+Assumptions!$B$19

Replaces the buried constant (-0.0025 → Assumptions!$B$19) with a labeled input cell you create once on an 'Assumptions' sheet — one place to see and update it.

Sensitivity!A7 assisted

before =Assumptions!$B$20+0.0025

after =Assumptions!$B$20+Assumptions!$B$20

Replaces the buried constant (0.0025 → Assumptions!$B$20) with a labeled input cell you create once on an 'Assumptions' sheet — one place to see and update it.

Sensitivity!A8 assisted

before =Assumptions!$B$20+0.005

after =Assumptions!$B$20+Assumptions!$B$21

Replaces the buried constant (0.005 → Assumptions!$B$21) with a labeled input cell you create once on an 'Assumptions' sheet — one place to see and update it.

Sensitivity!B3 assisted

before =WACC!$B$10+-0.01

after =WACC!$B$10+Assumptions!$B$22

Replaces the buried constant (-0.01 → Assumptions!$B$22) with a labeled input cell you create once on an 'Assumptions' sheet — one place to see and update it.

Sensitivity!C3 assisted

before =WACC!$B$10+-0.005

after =WACC!$B$10+Assumptions!$B$18

Replaces the buried constant (-0.005 → Assumptions!$B$18) with a labeled input cell you create once on an 'Assumptions' sheet — one place to see and update it.

Sensitivity!E3 assisted

before =WACC!$B$10+0.005

after =WACC!$B$10+Assumptions!$B$21

Replaces the buried constant (0.005 → Assumptions!$B$21) with a labeled input cell you create once on an 'Assumptions' sheet — one place to see and update it.

Sensitivity!F3 assisted

before =WACC!$B$10+0.01

after =WACC!$B$10+Assumptions!$B$23

Replaces the buried constant (0.01 → Assumptions!$B$23) with a labeled input cell you create once on an 'Assumptions' sheet — one place to see and update it.

WACC!B5 assisted

before =B4*(1-0.21)

after =B4*(1-Assumptions!$B$10)

Replaces the buried constant (0.21 → Assumptions!$B$10) with a labeled input cell you create once on an 'Assumptions' sheet — one place to see and update it.

What we won't auto-fix — and why

  • 2 × circular_refs — Breaking a reference loop is a modeling decision — which link to cut changes what the model means, so no automated edit is safe.
  • 2 × complex_formulas — Splitting a long formula into steps is a restructuring exercise; an automated split would pick arbitrary boundaries.
  • 5 × error_values — An error value marks a calculation that already failed or data pasted over a formula. Wrapping it in IFERROR would hide the failure, not repair it — the source calculation needs fixing.
  • 1 × inconsistent_formulas — A formula that differs from its neighbours is either a silent copy error or a deliberate override; picking for you would be a guess, not a fix.
  • 1 × merged_cells — Unmerging moves values between cells and changes what ranges cover — a layout change you should make with the sheet open.
  • 6 × numbers_as_text — Text that looks numeric may be a code (an account number, a SKU) where '007' must stay text — converting blindly corrupts those.

Your workbook is never modified — fixes are prepared for you to paste, because rewriting .xlsx files corrupts charts, pivots, and macros.

Findings by sheet, worst first. Sheets with no findings aren't listed; workbook-level findings get their own card.

Raw Data critical

14 findings across 3 checks

  • Error values in cells 5
  • Hardcoded constants inside formulas 3
  • Numbers stored as text in referenced ranges 6
Order Book warning

80 findings across 2 checks

  • Fragile lookups 40
  • Hardcoded constants inside formulas 40
Income Statement warning
  • Hardcoded constants inside formulas 14
Sensitivity warning

12 findings across 3 checks

  • Circular references 1
  • Fragile lookups 3
  • Hardcoded constants inside formulas 8
Cash Flow warning
  • Hardcoded constants inside formulas 6
Revenue Build warning

5 findings across 3 checks

  • Fragile lookups 3
  • Hardcoded constants inside formulas 1
  • Inconsistent formulas in a range 1
Balance Sheet warning

3 findings across 3 checks

  • Circular references 1
  • Hardcoded constants inside formulas 1
  • Merged cells inside data/formula ranges 1
DCF warning

4 findings across 2 checks

  • Hardcoded constants inside formulas 2
  • Overly complex formulas 2
WACC warning
  • Hardcoded constants inside formulas 1
Audit your own workbook This sample never expires and is identical for every visitor. Your own report is private to you — findings expire automatically unless you save them.

Everything above was produced by the real analysis pipeline from the sample workbook — the same checks, scoring, summary, and fix pack your file gets.