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.
plan these126 findings · −23.4 ptsHardcoded constants inside formulasheuristic76 findings−8.0 ptsNumbers 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.825 cellsB10: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 cellsB10: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.825 cellsB6: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.2140 cellsE4: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)-13 cellsF6: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…
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 lookupsheuristic46 findings−6.0 ptsA 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 cellsF4: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)
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)
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 rangeheuristic1 finding−3.8 ptsOne 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 references2 findings−3.0 ptsThis 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 ranges1 finding−2.6 ptsOnly 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.
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):
Cell
Value
Suggested 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!F10mechanical40 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!B10mechanical3 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!B14mechanical3 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!B10assisted5 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!B10assisted5 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!B6assisted5 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!E10assisted40 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!F6assisted3 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!B10assisted
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!B8assisted
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.
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.
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!C8assisted
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!D8assisted
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!E8assisted
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!F8assisted
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!D5assisted
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!A4assisted
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!A5assisted
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!A7assisted
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!A8assisted
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!B3assisted
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!C3assisted
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!E3assisted
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!F3assisted
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!B5assisted
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 Datacritical
14 findings across 3 checks
Error values in cells5
Hardcoded constants inside formulas3
Numbers stored as text in referenced ranges6
Order Bookwarning
80 findings across 2 checks
Fragile lookups40
Hardcoded constants inside formulas40
Income Statementwarning
Hardcoded constants inside formulas14
Sensitivitywarning
12 findings across 3 checks
Circular references1
Fragile lookups3
Hardcoded constants inside formulas8
Cash Flowwarning
Hardcoded constants inside formulas6
Revenue Buildwarning
5 findings across 3 checks
Fragile lookups3
Hardcoded constants inside formulas1
Inconsistent formulas in a range1
Balance Sheetwarning
3 findings across 3 checks
Circular references1
Hardcoded constants inside formulas1
Merged cells inside data/formula ranges1
DCFwarning
4 findings across 2 checks
Hardcoded constants inside formulas2
Overly complex formulas2
WACCwarning
Hardcoded constants inside formulas1
Audit your own workbookThis 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.