How to map every input cell that feeds into a target excel formula cell
- Step 1Open the Cell Dependency Map tool — Load the tool page. Because it is Pro-gated, sign in on a Pro tier or higher first — the Free tier returns "Cell Dependency Map requires Pro tier."
- Step 2Drop your XLSX workbook — Drag the
.xlsxfile onto the upload area. Only XLSX is accepted. The file is parsed locally with SheetJS and is never uploaded. - Step 3Enter the target cell — Type the address you want to audit into Target cell, e.g.
B12. The box auto-uppercases as you type and$signs are ignored, sob12,B12, and$B$12all resolve the same. - Step 4Set the sheet (optional) — If the target is not on the first tab, type the exact tab name into Sheet name. Leave it blank to use the first sheet in the workbook.
- Step 5Run the trace — Process the workbook. The tool walks precedents recursively to a depth of 8, printing one line per cell in an indented tree.
- Step 6Read and export the tree — Each formula line shows the formula verbatim; leaves are tagged
(hardcoded)or(empty); re-visited cells show(already traced ↑). Copy the text report into your audit notes or review tool.
Every control the tool actually exposes
The whole UI is two text boxes — there is no depth slider, no chart toggle, no export-format picker, no range expansion. Anything not in this table does not exist in the tool.
| Field | Type | Required | Default | What it does |
|---|---|---|---|---|
| Target cell | Text box (auto-uppercased) | Yes | (none) | The cell whose precedents you trace, e.g. B12. $ signs are stripped, so $B$12 and B12 behave identically. Lower-case is forced to upper-case as you type. |
| Sheet name | Text box | No | First sheet in the workbook | Which sheet contains the target cell. Leave blank to use the first sheet. Must match the tab name exactly (case-sensitive in the lookup). |
How the text tree marks each cell
Output is a plain-text report (not a diagram). Every node renders as one line; the marker tells you what kind of cell it is.
| Node renders as | Meaning |
|---|---|
Sheet1!B12 = =SUM(C1:C10) | A formula cell. The formula is shown verbatim after =. Its precedents are traced on the lines below. |
Sheet1!A1 = "1250" (hardcoded) | A leaf input — no formula. The value shown is the cell's displayed text; (hardcoded) flags it as a model assumption. |
Sheet1!A1 = (empty) | The referenced cell is blank. Common when a formula points at a yet-to-be-filled input. |
Sheet1!B12 (already traced ↑) | This cell was reached earlier in the trace. It is NOT re-expanded — scroll up to its first occurrence for the full sub-tree. |
Cell Sheet1!B12 not found or has no dependencies. | The target address is empty or absent on that sheet, so there was nothing to trace. |
What the reference parser does and does not follow
Precedents are pulled from each formula string by a regular expression. Knowing its limits prevents surprises when a branch looks shorter than you expected.
| Reference style in a formula | Followed? | Behaviour |
|---|---|---|
Plain cell A1, B12 | Yes | Followed and expanded on the current sheet. |
Range C1:C10 | Partly | Only the FIRST cell (C1) is walked; the rest of the range is not individually traced. |
Cross-sheet Sheet2!B5 | Yes | Followed; the node is labelled with its sheet name. |
Quoted sheet 'P&L'!B5, 'Q1-Actuals'!A3 | No | Sheet names with spaces are fine, but &, -, . or quotes are not matched, so the link is dropped or mis-attributed to the current sheet. |
Named range Revenue, table Table1[Amount] | No | Names and structured table references are not resolved to addresses, so they are skipped. |
Absolute $B$12 | Yes | $ is ignored; treated identically to B12. |
Cookbook
Concrete before/after for an auditor reading a real workbook. The left side is what is in the cells; the right side is the exact tree the tool prints.
A three-level chain on one sheet
The simplest case: a total that sums a sub-total that adds two hardcoded inputs. Indentation shows the levels; leaves are tagged.
Cells (Sheet1): B12: =B10*B11 B10: =A1+A2 B11: 1.2 A1: 1000 A2: 250 Target cell: B12 Output: Dependency tree for Sheet1!B12: Sheet1!B12 = =B10*B11 └─ Sheet1!B10 = =A1+A2 └─ └─ Sheet1!A1 = "1000" (hardcoded) └─ └─ Sheet1!A2 = "250" (hardcoded) └─ Sheet1!B11 = "1.2" (hardcoded)
A cross-sheet precedent
Where Excel shows a grid icon you have to double-click, the tool just follows the link and labels the sheet.
Cells: Summary!C5: =Inputs!B2*1.1 Inputs!B2: 4200 Target cell: C5 Sheet name: Summary Output: Dependency tree for Summary!C5: Summary!C5 = =Inputs!B2*1.1 └─ Inputs!B2 = "4200" (hardcoded)
A shared input reached twice
Two formulas both reference A1. It expands the first time and is collapsed the second with the (already traced) marker — the tree stays finite.
Cells (Sheet1): D1: =A1+A1 A1: =B1*2 B1: 5 Target cell: D1 Output: Dependency tree for Sheet1!D1: Sheet1!D1 = =A1+A1 └─ Sheet1!A1 = =B1*2 └─ └─ Sheet1!B1 = "5" (hardcoded) └─ Sheet1!A1 (already traced ↑)
A range collapses to its first cell
Important accuracy note: a SUM over a range only walks the first cell of that range, not every cell in it.
Cells (Sheet1): E1: =SUM(C1:C3) C1: 10 C2: 20 C3: 30 Target cell: E1 Output: Dependency tree for Sheet1!E1: Sheet1!E1 = =SUM(C1:C3) └─ Sheet1!C1 = "10" (hardcoded) (C2 and C3 are part of the range but are NOT listed separately.)
Target cell that does not exist
If the address is blank or not on the chosen sheet, you get a single explanatory line rather than an error.
Target cell: Z99 (empty on Sheet1) Output: Cell Sheet1!Z99 not found or has no dependencies.
Edge cases and what actually happens
Free tier
Pro requiredThe tool is gated to Pro and above. On Free it returns "Cell Dependency Map requires Pro tier." Upgrade to Pro (50 MB / 100,000 rows) to run it.
Chain deeper than 8 levels
Truncated silentlyThe recursion stops at depth 8 (a hardcoded cap, not adjustable in the UI). Crucially there is NO "depth limit reached" marker printed — the branch simply ends. If a real chain is longer, re-run the trace using a mid-chain cell as the new target to see beyond level 8.
Range reference like C1:C10
First cell onlyThe parser captures only the first cell of a range. SUM(C1:C10) traces C1 and ignores C2..C10. Trace each segment cell separately if you need the whole range audited.
Quoted sheet name with & or -
Not followedCross-sheet references work for plain names, but a sheet named P&L or Q1-Actuals (referenced as 'P&L'!B5) is not matched by the parser, so that link is dropped or mis-attributed to the current sheet. Rename the tab to letters/numbers/underscores/spaces to make it traceable.
Named range or table reference
SkippedFormulas using a named range (=Revenue*1.1) or a structured table reference (=Table1[Amount]) are not resolved to cell addresses, so those precedents do not appear in the tree. Convert the name to its underlying address if you need it traced.
Wrong sheet name typed
Empty resultThe sheet lookup is exact. A typo or wrong-case tab name means the target cell is not found, producing "... not found or has no dependencies." Copy the tab name verbatim from Excel.
Target cell holds a hardcoded value
Single nodeIf the target itself has no formula, the tree is one line: Sheet1!B12 = "..." (hardcoded). There is nothing upstream to trace because the cell is already a leaf input.
Empty precedent cell
By designA formula that points at a blank cell shows that cell as (empty) rather than omitting it — useful for spotting an input someone forgot to fill in.
Frequently asked questions
How many levels deep does the trace go?
Eight. This is a hardcoded cap, not a configurable option — there is no depth field in the UI. Eight levels covers the overwhelming majority of real formula chains; for anything deeper, re-run the trace from a mid-chain cell.
Does it trace into cells that reference other sheets?
Yes. Cross-sheet references like Sheet2!B5 are followed and each node is labelled with its sheet name. The exception is sheets whose names contain characters like &, -, or . — those are not matched by the parser.
Does it expand every cell of a range like A1:A10?
No. Only the first cell of a range is walked (A1). The remaining cells of the range are not individually traced. If you need each one, target them separately.
What happens when a deeper branch is cut at level 8?
The branch simply stops — no marker is printed. (An older description of this tool claimed a "depth limit reached" label is shown; that is not what the code does.) To audit deeper, use a level-8 cell as a new target.
How are shared inputs handled?
A cell reached more than once in the trace is expanded the first time and shown afterwards as (already traced ↑). This keeps the tree finite and stops the same sub-tree printing repeatedly.
Will it loop forever on a circular reference?
No. The same visited-cell guard that collapses shared inputs also stops cycles — a cell already on the path prints as (already traced ↑) and is not re-entered. To specifically hunt cycles, use the Circular Reference Finder. A common silent calculation bug is a number stored as text — the Format Inspector catches those.
Can I export the result?
The output is plain text — select and copy it into your audit notes, a pull request, a ticket, or a doc. There is no built-in PDF or image export; it is a text report by design.
Does it show the cell's calculated value or its formula?
Formula cells show the formula verbatim (e.g. =B10*B11). Leaf cells without a formula show their displayed value tagged (hardcoded). To get a plain-English explanation of one formula, use the Formula Explainer; to find which cells error out, use the Error Locator.
Why does $B$12 work the same as B12?
Absolute-reference $ markers are stripped before the lookup, so $B$12, B$12, and B12 all resolve to the same cell. This is purely about addressing — it does not change which precedents are found.
Can I trace several cells at once?
Run the tool once per target cell; each run prints one complete tree. Batch tracing of multiple targets in a single pass is not a feature of this tool.
What file types can I trace?
XLSX workbooks only — that is the single accepted format for this tool. A standalone CSV has no formulas, so there is nothing to trace; if your data is in CSV, open it in Excel/Sheets, build or paste the formulas, and save as .xlsx first.
Does my workbook get uploaded anywhere?
No. The whole trace runs in your browser using SheetJS — the workbook is parsed locally and never sent to a server. That matters for confidential models: you can run the trace offline once the page has loaded.
Why does it require Pro?
The Cell Dependency Map is gated to Pro tier or higher. On the Free tier the tool returns "Cell Dependency Map requires Pro tier." The free excel limits are 5 MB / 10,000 rows / 1 file; Pro raises that to 50 MB / 100,000 rows / 5 files.
Privacy first
Every JAD Excel tool runs entirely in your browser using SheetJS and ExcelJS. Your spreadsheets, formulas, and data never leave your device — verified by zero outbound network requests during processing.