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

126 findings across 5 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 126 findings · −23.4 pts
Hardcoded constants inside formulas heuristic 76 findings −8.0 pts Numbers typed straight into formulas are invisible assumptions — a 1.21 VAT rate buried inside 40 formulas won't be found or updated when the rate changes, and any missed copy silently keeps computing with the old number. Business constants belong in a labeled input cell or named range.
=R[-4]C*0.82 5 cells B10:F10
  • Cash Flow!B10 Hardcoded number 0.82 buried in formula: =B6*0.82
  • Cash Flow!C10 Hardcoded number 0.82 buried in formula: =C6*0.82
  • Cash Flow!D10 Hardcoded number 0.82 buried in formula: =D6*0.82
  • Cash Flow!E10 Hardcoded number 0.82 buried in formula: =E6*0.82
  • Cash Flow!F10 Hardcoded number 0.82 buried in formula: =F6*0.82
=MAX(0,R[-1]C*0.21) 5 cells B10:F10
  • Income Statement!B10 Hardcoded number 0.21 buried in formula: =MAX(0,B9*0.21)
  • Income Statement!C10 Hardcoded number 0.21 buried in formula: =MAX(0,C9*0.21)
  • Income Statement!D10 Hardcoded number 0.21 buried in formula: =MAX(0,D9*0.21)
  • Income Statement!E10 Hardcoded number 0.21 buried in formula: =MAX(0,E9*0.21)
  • Income Statement!F10 Hardcoded number 0.21 buried in formula: =MAX(0,F9*0.21)
='Cash Flow'!R[4]C*0.82 5 cells B6:F6
  • Income Statement!B6 Hardcoded number 0.82 buried in formula: ='Cash Flow'!B10*0.82
  • Income Statement!C6 Hardcoded number 0.82 buried in formula: ='Cash Flow'!C10*0.82
  • Income Statement!D6 Hardcoded number 0.82 buried in formula: ='Cash Flow'!D10*0.82
  • Income Statement!E6 Hardcoded number 0.82 buried in formula: ='Cash Flow'!E10*0.82
  • Income Statement!F6 Hardcoded number 0.82 buried in formula: ='Cash Flow'!F10*0.82
=RC[-1]*1.21 40 cells E4:E43
  • Order Book!E10 Hardcoded number 1.21 buried in formula: =D10*1.21
  • Order Book!E11 Hardcoded number 1.21 buried in formula: =D11*1.21
  • Order Book!E12 Hardcoded number 1.21 buried in formula: =D12*1.21
  • Order Book!E13 Hardcoded number 1.21 buried in formula: =D13*1.21
  • Order Book!E14 Hardcoded number 1.21 buried in formula: =D14*1.21
  • Order Book!E15 Hardcoded number 1.21 buried in formula: =D15*1.21
  • Order Book!E16 Hardcoded number 1.21 buried in formula: =D16*1.21
  • Order Book!E17 Hardcoded number 1.21 buried in formula: =D17*1.21
  • Order Book!E18 Hardcoded number 1.21 buried in formula: =D18*1.21
  • Order Book!E19 Hardcoded number 1.21 buried in formula: =D19*1.21
  • Order Book!E20 Hardcoded number 1.21 buried in formula: =D20*1.21
  • Order Book!E21 Hardcoded number 1.21 buried in formula: =D21*1.21
  • Order Book!E22 Hardcoded number 1.21 buried in formula: =D22*1.21
  • Order Book!E23 Hardcoded number 1.21 buried in formula: =D23*1.21
  • Order Book!E24 Hardcoded number 1.21 buried in formula: =D24*1.21
  • Order Book!E25 Hardcoded number 1.21 buried in formula: =D25*1.21
  • Order Book!E26 Hardcoded number 1.21 buried in formula: =D26*1.21
  • Order Book!E27 Hardcoded number 1.21 buried in formula: =D27*1.21
  • Order Book!E28 Hardcoded number 1.21 buried in formula: =D28*1.21
  • Order Book!E29 Hardcoded number 1.21 buried in formula: =D29*1.21
  • Order Book!E30 Hardcoded number 1.21 buried in formula: =D30*1.21
  • Order Book!E31 Hardcoded number 1.21 buried in formula: =D31*1.21
  • Order Book!E32 Hardcoded number 1.21 buried in formula: =D32*1.21
  • Order Book!E33 Hardcoded number 1.21 buried in formula: =D33*1.21
  • Order Book!E34 Hardcoded number 1.21 buried in formula: =D34*1.21
  • Order Book!E35 Hardcoded number 1.21 buried in formula: =D35*1.21
  • Order Book!E36 Hardcoded number 1.21 buried in formula: =D36*1.21
  • Order Book!E37 Hardcoded number 1.21 buried in formula: =D37*1.21
  • Order Book!E38 Hardcoded number 1.21 buried in formula: =D38*1.21
  • Order Book!E39 Hardcoded number 1.21 buried in formula: =D39*1.21
  • Order Book!E4 Hardcoded number 1.21 buried in formula: =D4*1.21
  • Order Book!E40 Hardcoded number 1.21 buried in formula: =D40*1.21
  • Order Book!E41 Hardcoded number 1.21 buried in formula: =D41*1.21
  • Order Book!E42 Hardcoded number 1.21 buried in formula: =D42*1.21
  • Order Book!E43 Hardcoded number 1.21 buried in formula: =D43*1.21
  • Order Book!E5 Hardcoded number 1.21 buried in formula: =D5*1.21
  • Order Book!E6 Hardcoded number 1.21 buried in formula: =D6*1.21
  • Order Book!E7 Hardcoded number 1.21 buried in formula: =D7*1.21
  • Order Book!E8 Hardcoded number 1.21 buried in formula: =D8*1.21
  • Order Book!E9 Hardcoded number 1.21 buried in formula: =D9*1.21
=(RC[-1]/RC[-4])^(1/3)-1 3 cells F6:F8
  • Raw Data!F6 Hardcoded number 3 buried in formula: =(E6/B6)^(1/3)-1
  • Raw Data!F7 Hardcoded number 3 buried in formula: =(E7/B7)^(1/3)-1
  • Raw Data!F8 Hardcoded number 3 buried in formula: =(E8/B8)^(1/3)-1
Balance Sheet!B10 Hardcoded number 0.25 buried in formula: =B5+B6-MAX(0,B9*0.25)
Cash Flow!B8 Hardcoded number 0.019 buried in formula: ='Revenue Build'!B12*0.019
DCF!B12 Hardcoded numbers 9, 4 buried in formula: =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 Hardcoded numbers 6, 14, 1000, 4, 8 buried in formula: =IF(WACC!$B$10>Assumptions!$B$20,MAX(0,MIN(('Cash Flow'!F12*(1+Assumptions!$B$20))/(WACC!$B$10-Assu…
Income Statement!C8 Hardcoded number 1.02 buried in formula: ='Balance Sheet'!B8*1.02
Income Statement!D8 Hardcoded number 1.04 buried in formula: ='Balance Sheet'!B8*1.04
Income Statement!E8 Hardcoded number 1.06 buried in formula: ='Balance Sheet'!B8*1.06
Income Statement!F8 Hardcoded number 1.08 buried in formula: ='Balance Sheet'!B8*1.08
Revenue Build!D5 Hardcoded number 1.052 buried in formula: =C5*1.052
Sensitivity!A4 Hardcoded number -0.005 buried in formula: =Assumptions!$B$20+-0.005
Sensitivity!A5 Hardcoded number -0.0025 buried in formula: =Assumptions!$B$20+-0.0025
Sensitivity!A7 Hardcoded number 0.0025 buried in formula: =Assumptions!$B$20+0.0025
Sensitivity!A8 Hardcoded number 0.005 buried in formula: =Assumptions!$B$20+0.005
Sensitivity!B3 Hardcoded number -0.01 buried in formula: =WACC!$B$10+-0.01
Sensitivity!C3 Hardcoded number -0.005 buried in formula: =WACC!$B$10+-0.005
Sensitivity!E3 Hardcoded number 0.005 buried in formula: =WACC!$B$10+0.005
Sensitivity!F3 Hardcoded number 0.01 buried in formula: =WACC!$B$10+0.01
WACC!B5 Hardcoded number 0.21 buried in formula: =B4*(1-0.21)
Fragile lookups heuristic 46 findings −6.0 pts A hardcoded column index breaks silently when columns are inserted or deleted — the lookup keeps returning a value, just from the wrong column. Approximate match (the default when the last argument is omitted or TRUE) returns the nearest smaller value on unsorted data, so the model shows plausible but wrong numbers with no error to warn anyone.
=VLOOKUP(RC[-3],'Raw Data'!R24C1:R26C5,4) 40 cells F4:F43
  • Order Book!F10 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C10,'Raw Data'!$A$24:$E$26,4)
  • Order Book!F11 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C11,'Raw Data'!$A$24:$E$26,4)
  • Order Book!F12 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C12,'Raw Data'!$A$24:$E$26,4)
  • Order Book!F13 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C13,'Raw Data'!$A$24:$E$26,4)
  • Order Book!F14 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C14,'Raw Data'!$A$24:$E$26,4)
  • Order Book!F15 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C15,'Raw Data'!$A$24:$E$26,4)
  • Order Book!F16 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C16,'Raw Data'!$A$24:$E$26,4)
  • Order Book!F17 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C17,'Raw Data'!$A$24:$E$26,4)
  • Order Book!F18 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C18,'Raw Data'!$A$24:$E$26,4)
  • Order Book!F19 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C19,'Raw Data'!$A$24:$E$26,4)
  • Order Book!F20 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C20,'Raw Data'!$A$24:$E$26,4)
  • Order Book!F21 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C21,'Raw Data'!$A$24:$E$26,4)
  • Order Book!F22 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C22,'Raw Data'!$A$24:$E$26,4)
  • Order Book!F23 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C23,'Raw Data'!$A$24:$E$26,4)
  • Order Book!F24 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C24,'Raw Data'!$A$24:$E$26,4)
  • Order Book!F25 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C25,'Raw Data'!$A$24:$E$26,4)
  • Order Book!F26 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C26,'Raw Data'!$A$24:$E$26,4)
  • Order Book!F27 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C27,'Raw Data'!$A$24:$E$26,4)
  • Order Book!F28 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C28,'Raw Data'!$A$24:$E$26,4)
  • Order Book!F29 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C29,'Raw Data'!$A$24:$E$26,4)
  • Order Book!F30 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C30,'Raw Data'!$A$24:$E$26,4)
  • Order Book!F31 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C31,'Raw Data'!$A$24:$E$26,4)
  • Order Book!F32 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C32,'Raw Data'!$A$24:$E$26,4)
  • Order Book!F33 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C33,'Raw Data'!$A$24:$E$26,4)
  • Order Book!F34 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C34,'Raw Data'!$A$24:$E$26,4)
  • Order Book!F35 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C35,'Raw Data'!$A$24:$E$26,4)
  • Order Book!F36 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C36,'Raw Data'!$A$24:$E$26,4)
  • Order Book!F37 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C37,'Raw Data'!$A$24:$E$26,4)
  • Order Book!F38 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C38,'Raw Data'!$A$24:$E$26,4)
  • Order Book!F39 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C39,'Raw Data'!$A$24:$E$26,4)
  • Order Book!F4 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C4,'Raw Data'!$A$24:$E$26,4)
  • Order Book!F40 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C40,'Raw Data'!$A$24:$E$26,4)
  • Order Book!F41 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C41,'Raw Data'!$A$24:$E$26,4)
  • Order Book!F42 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C42,'Raw Data'!$A$24:$E$26,4)
  • Order Book!F43 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C43,'Raw Data'!$A$24:$E$26,4)
  • Order Book!F5 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C5,'Raw Data'!$A$24:$E$26,4)
  • Order Book!F6 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C6,'Raw Data'!$A$24:$E$26,4)
  • Order Book!F7 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C7,'Raw Data'!$A$24:$E$26,4)
  • Order Book!F8 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C8,'Raw Data'!$A$24:$E$26,4)
  • Order Book!F9 VLOOKUP uses a hardcoded column index (4) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(C9,'Raw Data'!$A$24:$E$26,4)
=VLOOKUP(RC[-1],'Raw Data'!R24C1:R26C5,3) 3 cells B9:B11
  • Revenue Build!B10 VLOOKUP uses a hardcoded column index (3) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(A10,'Raw Data'!$A$24:$E$26,3)
  • Revenue Build!B11 VLOOKUP uses a hardcoded column index (3) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(A11,'Raw Data'!$A$24:$E$26,3)
  • Revenue Build!B9 VLOOKUP uses a hardcoded column index (3) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(A9,'Raw Data'!$A$24:$E$26,3)
=VLOOKUP(R[-8]C,R15C8:R19C9,2) 3 cells B14, D14, F14
  • Sensitivity!B14 VLOOKUP uses a hardcoded column index (2) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(B6,$H$15:$I$19,2)
  • Sensitivity!D14 VLOOKUP uses a hardcoded column index (2) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(D6,$H$15:$I$19,2)
  • Sensitivity!F14 VLOOKUP uses a hardcoded column index (2) that will point at the wrong column if columns are inserted or deleted; and approximate matching (the exact-match flag is missing or TRUE), which returns silently wrong values from unsorted data: =VLOOKUP(F6,$H$15:$I$19,2)
Inconsistent formulas in a range heuristic 1 finding −3.8 pts One cell that differs from an otherwise-uniform row or column of formulas is the classic copy/paste error: a dragged formula was overwritten, mis-anchored, or replaced with a hardcoded value. The result is a number that looks plausible but is computed differently from every neighbour, and totals built on the run silently inherit the mistake.
Revenue Build!D5 Formula breaks the pattern of B5:F5 — 3 of 5 neighbours share the same structure; this cell differs: =C5*1.052
Circular references 2 findings −3.0 pts This workbook enables Excel's iterative calculation, so these loops are probably intentional (models that converge on a value, like circular cost-of-capital adjustments). The risk is portability: on any machine with default Excel settings the model shows zeros or stale values with no warning, and other spreadsheet tools may not converge it at all.
Balance Sheet!B10 Circular reference between 8 cells: Balance Sheet!B10 → Balance Sheet!B8 → Balance Sheet!B9 → Cash Flow!B12 → Cash Flow!B5 → Income Statement!B10 → Income Statement!B8 → Income Statement!B9 → Balance Sheet!B10 (iterative calculation is enabled — likely intentional)
Sensitivity!B10 Formula in Sensitivity!B10 refers to a range that includes its own cell: =SUM(B4:B10) (iterative calculation is enabled — likely intentional)
Merged cells inside data/formula ranges 1 finding −2.6 pts Only the top-left cell of a merged block holds a value — the rest are blank. Aggregations like SUM or AVERAGE over merged data silently read those blanks and understate results, and sorting or filtering the range breaks or scrambles the data.
Balance Sheet!B3:D3 Merged cells B3:D3 sit inside a range other formulas read (e.g. Balance Sheet!B14: =SUM(B3:B12)). Only the top-left cell holds a value; the rest are read as blanks.

Info

good to know 0 notes · −0 pts

Hidden by the filter — show everything.

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.