How to colour-code formula cells and hardcoded values in excel
- Step 1Open the Formula Highlighter and confirm you are on Pro — The tool requires the Pro tier (it is gated server-side and will refuse to run on Free). Pro covers files up to 50 MB and 100,000 rows; Pro-media reaches 200 MB / 500,000 rows; Developer goes to 500 MB with no row cap.
- Step 2Drop your .xlsx model onto the upload area — Only the
.xlsxfamily is accepted (.xlsx,.xls,.odsmap through the same picker). CSV is not accepted — a CSV has no formula layer to detect, so there is nothing to colour. Upload a single file; this tool does not batch multiple workbooks. - Step 3Run the highlighter — there are no options to set — The tool has an empty option schema: no colour picker, no per-sheet selector, no toggles. ExcelJS loads the workbook and classifies each non-empty cell. Formula cells get blue; everything else with content gets amber.
- Step 4Read the formula vs hardcoded counts — When processing finishes you get two findings — formula cell count and hardcoded cell count — plus a total changes count and the run duration. A model where hardcoded cells vastly outnumber formula cells is a red flag worth investigating.
- Step 5Click Download to save formula-highlighted.xlsx — The output is a binary XLSX, so the panel shows a "Click Download to save it" prompt rather than an inline preview. The file downloads as
formula-highlighted.xlsx— a coloured copy of your input. - Step 6Open in Excel and audit by colour — Every blue cell is a formula; every amber cell is a typed-in value. Scan for amber cells buried inside otherwise-blue calculation blocks — those are the hardcodes hiding in your logic. To remove the fills later, select all and use Home → Fill Color → No Fill or Clear → Clear Formats.
How each cell type is classified
The classifier inspects cell.value. If it is an object that contains a formula key it is a formula (blue); any other non-empty value is hardcoded (amber); truly empty cells are skipped. There is no third colour for text vs numbers.
| Cell content | ExcelJS cell.value shape | Classification | Fill applied |
|---|---|---|---|
=B2*1.2 (typed formula) | { formula: "B2*1.2", result: ... } | Formula | Blue FFBDD7EE |
=XLOOKUP(...) or any function | { formula: "...", result: ... } | Formula | Blue FFBDD7EE |
Typed number 1250000 | 1250000 (number) | Hardcoded | Amber FFFFEB9C |
Typed text label Revenue | "Revenue" (string) | Hardcoded | Amber FFFFEB9C |
Typed date 2026-06-30 | JS Date object (no formula key) | Hardcoded | Amber FFFFEB9C |
| Hyperlink cell | { text, hyperlink } (no formula key) | Hardcoded | Amber FFFFEB9C |
Hardcoded zero 0 | 0 (number, non-empty) | Hardcoded | Amber FFFFEB9C |
| Empty cell | null / skipped by includeEmpty: false | Skipped | No fill |
Show Formulas / Ctrl+~ vs the JAD Formula Highlighter
Excel's built-in formula-reveal features are temporary text overlays. The highlighter writes permanent cell colours.
| Capability | Excel Ctrl+~ / Show Formulas | JAD Formula Highlighter |
|---|---|---|
| Distinguishes formula from hardcoded | No — shows formula text, but values just look like values | Yes — blue vs amber fill |
| Survives save and reopen | No — resets to normal view on close | Yes — real cell formatting |
| Works across all sheets at once | No — toggle is per-sheet | Yes — every sheet in one pass |
| Gives a formula/hardcoded count | No | Yes — both counts reported |
| Modifies the file | No — view-only toggle | Yes — produces a coloured copy (original untouched) |
Tier limits for the Formula Highlighter (excel family)
The tool is Pro-minimum. Free cannot run it. Limits are per the excel tool family.
| Tier | Max file size | Max rows | Batch files |
|---|---|---|---|
| Free | Not available (Pro required) | — | — |
| Pro | 50 MB | 100,000 | 5 |
| Pro-media | 200 MB | 500,000 | 20 |
| Developer | 500 MB | Unlimited | Unlimited |
Cookbook
Concrete examples of what the highlighter does and does not colour. Each shows the input cell content and the resulting fill so you can predict the audit map before you download.
A pricing tab: formulas blue, the markup assumption amber
A simple pricing sheet where unit cost is typed and the sale price is calculated. The highlighter paints the typed cost amber and the calculation blue — so the one assumption in the column stands out instantly.
Input cells: A2 Cost (text label) -> amber B2 12.50 (typed number) -> amber C2 =B2*1.4 (formula) -> blue C3 =B3*1.4 (formula) -> blue Downloaded formula-highlighted.xlsx: the 1.4 markup is buried INSIDE the formula, not in a cell, so it does not show as amber. See the next example for why that matters.
Spotting a hardcode hiding inside a formula column
The classic audit failure: someone overwrote one cell of a formula column with a typed number to 'make the total work'. Every other cell in the column is blue; the overwritten one is amber. That single amber cell in a sea of blue is the bug.
Column C should be all formulas: C10 =SUM(C2:C9) -> blue C11 =SUM(D2:D9) -> blue C12 9999 -> AMBER <- typed override, the bug C13 =SUM(F2:F9) -> blue Result: one amber cell stands out in the blue column. This is exactly what manual auditing misses.
Why a copied markup constant stays invisible
The highlighter colours cells, not the literals inside formulas. A magic number baked into a formula (here 1.4) is not flagged, because the cell is a formula and gets the blue treatment. To surface in-formula constants, break them out into their own input cell first — then they become amber.
Before (constant hidden in formula): C2 =B2*1.4 -> blue (the 1.4 is not visible as a hardcode) Better modelling, then re-run highlighter: E1 1.4 -> amber (now an explicit assumption) C2 =B2*$E$1 -> blue The assumption is now an amber input cell you can audit.
Reading the counts to judge a model
After running, the tool reports formula and hardcoded cell counts. A healthy calculation-heavy model has far more blue than amber outside the input block. A model that is mostly amber is mostly typed numbers — fragile and hard to maintain.
Findings after run: formulaCells: 842 hardcodedCells: 5,310 Read: 5,310 typed cells vs 842 formulas. If most of those amber cells are calculations that SHOULD be formulas, the model is a manual spreadsheet pretending to be a model.
Auditing every sheet of a multi-tab workbook at once
The highlighter loops all worksheets. A workbook with Inputs, P&L, Balance Sheet, and Cash Flow tabs is fully coloured in one run — you do not toggle anything per sheet the way Ctrl+~ forces you to.
Workbook: 4 sheets Inputs -> mostly amber (it is the assumptions tab) P&L -> mostly blue with amber drivers Balance Sheet -> mostly blue Cash Flow -> mostly blue One run colours all four. Open each tab and the picture is immediate: amber should cluster on Inputs, not scatter across the calculation tabs.
Edge cases and what actually happens
Shared-formula follower cells can colour amber, not blue
By design (ExcelJS)When a workbook uses Excel's shared-formula optimisation, only the master cell carries a formula string; the follower cells carry a sharedFormula reference to the master. The classifier tests for a formula key, which followers do not expose via cell.value, so those cells fall through to amber. Modern Excel often writes each formula in full (so this rarely bites), but files saved by LibreOffice or older Excel may show a block of formulas where the first cell is blue and the rest are amber. Treat a blue-then-amber run in a calculation block as a shared-formula artefact, not a hardcode.
Hyperlink cells are coloured amber
HardcodedA cell holding a hyperlink is stored as { text, hyperlink } — an object without a formula key — so it is treated as a hardcoded value and filled amber. This is correct: a hyperlink is not a calculation. If your sheet uses =HYPERLINK(...) instead of a clicked-in link, that IS a formula and colours blue.
Hardcoded zero and whitespace-only cells are highlighted
ExpectedA typed 0 is a non-empty value, so it is filled amber. A cell containing only a space character is also a non-empty string and gets amber. Only cells that are genuinely empty (skipped by ExcelJS includeEmpty: false) are left uncoloured. If you see stray amber in apparently blank areas, those cells contain spaces or zeros.
Formulas that return an error still colour blue
FormulaA cell like =A1/A2 that evaluates to #DIV/0! still has a formula key in cell.value (the error is in result), so it is classified as a formula and filled blue. To find error cells specifically rather than colour them, use the Error Locator, which reports #REF!, #N/A, #DIV/0! and the rest with cell addresses.
Conditional-formatting fills are not what this tool sees
Out of scopeThe highlighter reads each cell's stored formula/value, not its conditional-formatting rules. A cell that looks coloured in Excel because of a conditional-formatting rule is still classified purely on whether it contains a formula. The new amber/blue fills are applied as direct cell fills and will sit underneath any conditional-formatting rules Excel evaluates on open.
Existing cell fills are overwritten
OverwrittenEvery non-empty cell receives either the blue or amber fill, replacing whatever fill it had. If your model already uses colour conventions (e.g. grey section headers), those fills are lost in the highlighted copy. Run the highlighter on a throwaway copy when you only need it for a one-off audit, and keep your styled master separate.
Free tier cannot run the tool
Pro requiredThe processor throws "Formula Highlighter requires Pro tier." for non-Pro accounts. This is enforced before any processing happens. Upgrade to Pro (50 MB / 100,000 rows) or higher to use it.
CSV input has nothing to highlight
Not supportedOnly the .xlsx family is accepted. A CSV is plain text with no formula layer — there are no formula cells to colour, so the tool does not accept CSV. If your data lives in CSV, there is nothing for this tool to do; the formula/value distinction only exists inside a spreadsheet.
Very large workbooks are bounded by browser memory
ExpectedBecause ExcelJS loads the whole workbook into memory and rewrites it, very large files near the tier ceiling (up to 500 MB on Developer) can be slow and memory-heavy in the browser. The reported durationMs will reflect this. If a huge workbook stalls, split the analysis to the sheets you actually need to audit.
Frequently asked questions
What exactly do the two colours mean?
Blue (FFBDD7EE) marks every cell that contains a formula. Amber (FFFFEB9C) marks every cell that contains a hardcoded, non-empty value — a typed number, text label, date, or hyperlink. Empty cells are left with no fill. Those are the only two colours; there is no separate colour for numbers vs text.
Can I customise the highlight colours?
No. The tool has an empty option schema — there is no colour picker and no toggles. The fills are fixed at blue FFBDD7EE and amber FFFFEB9C. If you need different colours, run the tool, then in Excel re-apply your own fills using Find & Replace by format (Find Format → fill colour) to swap them.
Does the highlighting survive if I save the file in Excel?
Yes. The fills are written as standard XLSX cell formatting, so they survive saving, reopening, sorting, and filtering. This is the main advantage over Excel's Ctrl+~ / Show Formulas, which is a view-only toggle that resets when you close the file.
Does it modify my original file?
No. The tool produces a new copy named formula-highlighted.xlsx. Your uploaded file is never altered. Keep that download separate from your master so the master stays free of audit colours.
Will it highlight empty cells?
No. Cells with no value are skipped (includeEmpty: false). Only cells with a formula or a non-empty value get a fill. Note that a typed 0 or a cell containing only a space counts as non-empty and will be coloured amber.
Why did a whole block of formulas come out amber except the first cell?
That is the shared-formula optimisation. When Excel (or LibreOffice) stores one formula as a master plus follower references, only the master exposes a formula key to ExcelJS; the followers expose a sharedFormula reference instead and fall through to amber. Modern Excel usually writes each formula in full, so this is uncommon, but it explains the blue-then-amber pattern when it happens.
Does it handle XLOOKUP, dynamic arrays, and array formulas?
Yes for the cell that holds the formula — any cell whose value is a formula object is coloured blue, regardless of function. Spill ranges produced by a dynamic array are calculated results; whether each spilled cell is treated as a formula depends on how ExcelJS represents it on load, so verify a dynamic-array sheet visually after running.
What about cells that show a formula error like #REF! or #N/A?
They still colour blue, because they are formula cells (the error is in the formula result, not a hardcoded value). To locate and list error cells specifically, use the Error Locator instead — it reports each error type with its cell address.
Can I run it on every sheet at once?
Yes — that is the default and only behaviour. The tool loops over every worksheet in the workbook in a single pass. There is no per-sheet selector; all sheets are coloured.
How do I remove the highlighting later?
In Excel, select all cells (Ctrl+A) and choose Home → Fill Color → No Fill, or Home → Clear → Clear Formats (note that Clear Formats also strips number formats). Alternatively, simply discard the formula-highlighted.xlsx copy and keep working from your original, which was never modified.
Is my workbook uploaded to a server?
No. Processing runs entirely in your browser via ExcelJS. The workbook content never leaves your machine, which is why this is suitable for confidential financial models, deal data, and client files.
What other JAD tools pair well with this for a full audit?
Run the Formula Explainer to decode the blue cells, the Error Locator to catch broken formulas, the Circular Reference Finder to detect loops, the Dependency Map to trace what feeds a cell, and Formula to Value once the audit is done and you want to freeze the model.
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.