How to diff two versions of an excel budget to find every changed cell
- Step 1Save the prior and current budget as separate files — Export or save the two versions you want to reconcile — for example
budget_v3.xlsx(prior) andbudget_v4.xlsx(current). The first file you upload is the baseline; the second is the new version. Label them so you don't load them in the wrong order and invert every change. - Step 2Use a Pro-tier account — Range Diff is Pro-gated and needs two files at once. Free allows only one file per run, so it can't run this comparison at all. Pro covers 50 MB / 100,000 rows per file and 5 files per run — comfortable for most planning models; Pro-media and Developer go higher.
- Step 3Freeze the row order before exporting — Because rows compare by position, avoid inserting or deleting rows between the two saved versions you diff. If a line was genuinely added, expect rows below it to flag as changed. For the cleanest diff, keep the same line structure and only edit values.
- Step 4Upload prior first, then current — Drop the prior budget (file A), then the current one (file B). Both are read in-browser. No settings appear — the comparison is deterministic, with no ignore-case, tolerance, or key-column options.
- Step 5Scan the summary for the headline changes — The result panel shows
diffCountand the first 200 changes as[Sheet] Column[row N]: "old" → "new" (changed). This is your quick read on which sheets and figures moved before you open the full workbook. - Step 6Download diff-report.xlsx for the review pack — Open the colour-coded workbook, filter to the amber/green/red cells, and use it as the evidence trail for the variance discussion. Each cell shows the new value (or the old value where a figure was removed).
Budget-change types and how Range Diff classifies them
Mapping common budget edits to the diff classification you'll see.
| Budget edit | Diff type | Output colour |
|---|---|---|
| Revised a dollar figure or assumption (e.g. 1000 → 1200) | Changed | Amber |
| Filled in a previously blank cell (new line item value) | Added | Green |
| Cleared a figure (line zeroed to blank) | Removed | Red |
| Added a whole new sheet (e.g. Q4 reforecast) | Added (all cells) | Green sheet |
| Renamed a tab (Draft → Final) | Removed + Added sheet | Red sheet + green sheet |
Formatting traps that look like budget changes
Because comparison is string-based, cosmetic formatting differences register as changes. Normalise formatting across both versions to avoid noise.
| Prior | Current | Diff says | Real change? |
|---|---|---|---|
| 1000 | 1,000.00 | changed | No — display formatting only |
| 0.5 | 0.50 | changed | No — same ratio |
| 100 | 100.0 | changed | No — same value |
| $1,200 | 1200 | changed | No — currency symbol/format |
| 1200 | 1250 | changed | Yes — real $50 increase |
Tier limits for two-file budget diffs
Range Diff is Pro+; budget models rarely approach these row counts, so Pro is usually ample.
| Tier | Max file size | Max rows / file | Files per run |
|---|---|---|---|
| Free | 5 MB | 10,000 | 1 (can't run a 2-file diff) |
| Pro | 50 MB | 100,000 | 5 |
| Pro-media | 200 MB | 500,000 | 20 |
| Developer | 500 MB | Unlimited | Unlimited |
Cookbook
Realistic budget-diff scenarios. Figures are illustrative; the summary lines match the tool's real [Sheet] Column[row N]: "old" → "new" (type) format.
A single revised assumption
Marketing spend bumped from 50,000 to 62,000 between v3 and v4. One amber cell.
v3 (P&L): v4 (P&L): Line,Amount Line,Amount Marketing,50000 Marketing,62000 Headcount,8 Headcount,8 Result: diffCount: 1 [P&L] Amount[row 1]: "50000" → "62000" (changed) → amber
New line item added to a budget tab
A 'Contingency' value that was blank in v3 gets filled in v4. Classified as added (green) because the prior cell was empty.
v3: v4: Line,Amount Line,Amount Marketing,50000 Marketing,50000 Contingency, Contingency,15000 Result: diffCount: 1 [P&L] Amount[row 2]: "" → "15000" (added) → green
A new reforecast sheet appears
v4 adds a 'Q4 Reforecast' tab that v3 didn't have. The whole sheet is written to the diff with every populated cell flagged added.
v3 sheets: P&L, Headcount v4 sheets: P&L, Headcount, Q4 Reforecast ← new Result: Q4 Reforecast written as an all-green sheet. summary: Compared 3 sheet(s). N differences found.
Inserted line shifts the diff
v4 inserts a new expense row above existing lines. Because rows match by position, every line below the insertion compares against the wrong prior row.
v3: v4 (row inserted at top):
Line,Amount Line,Amount
Rent,20000 Software,8000 ← inserted
Travel,5000 Rent,20000
Travel,5000
Result: row1 Rent→Software (changed), row2 Travel→Rent
(changed), row3 ""→Travel (added). Keep row order stable
or expect this cascade.Currency formatting noise
v3 stored figures as plain numbers; v4 stored them with currency formatting. Same values, but string comparison flags them all as changed.
v3: 1200, 50000, 8000 v4: $1,200.00, $50,000.00, $8,000.00 Result: three 'changed' diffs even though nothing moved. Fix: export both versions with identical number formatting, or convert to plain values before diffing.
Edge cases and what actually happens
Only the prior file uploaded
ErrorRange Diff needs both versions. With one file it throws 'Two files are required for comparison.' Upload the prior budget first, then the current one.
Running on Free tier
Pro requiredThe tool throws 'Range Diff requires Pro tier.' Free is also single-file, so a budget-version comparison can't run there even structurally. Upgrade to Pro or higher.
A new expense line was inserted mid-budget
Expected (positional)Rows are compared by position, so inserting a line shifts every line below it and they report as changed. This is by design. For the cleanest diff, keep the line structure identical between versions and only edit values, or sort both by a stable account-code column first.
Currency or thousands formatting differs
Changed (string compare)Values compare as strings: 1000 vs 1,000.00 vs $1,000 all differ. There is no numeric tolerance. Standardise number/currency formatting across both saved versions to keep the diff focused on real figure changes.
A tab was renamed (Draft → Final)
ExpectedSheets match by name, so a renamed tab shows as one all-red removed sheet and one all-green added sheet. Rename both tabs to match before diffing to get a true cell-level comparison.
Columns reordered between versions
PreservedColumns match by header name, so moving the 'Amount' column doesn't create false changes. Only renamed or newly added headers count as new columns.
Formula cells with the same result
SupportedComparison uses the cell value read by SheetJS, not the formula text. Two cells that compute the same number match; ones whose stored value differs are flagged. To compare formula logic itself, convert formulas to values consistently before diffing.
Subtotal row driven by an inserted line
ChangedIf a subtotal recalculated because a line was added, its stored value changed and it is flagged amber — correctly. But note the inserted line will also have shifted positions below it, inflating the apparent diff count.
Huge consolidated model with many tabs
Summary cappedThe text summary shows the first 200 changes and findings carry the first 500, but diffCount is the true total and every change is coloured in the workbook. Work from diff-report.xlsx for a full review of a large consolidation.
Sheet name longer than 31 characters
TruncatedExcel caps sheet names at 31 characters, so the output worksheet name is truncated. Two long tab names matching in their first 31 characters could collide; shorten tab names if this is a risk.
Frequently asked questions
Will Range Diff catch every changed assumption in my budget?
Every cell whose stored value differs between the two files is flagged, across every sheet. The one caveat is positional row matching: if you inserted or deleted lines, rows below the change shift and report as changed too. Keep the row structure stable between the two versions you diff, and every genuine value change is caught.
Why do my figures show as changed when the numbers are the same?
Cells are compared as text, so 1000, 1,000.00, and $1,000 are different strings even though they're the same amount. Export both budget versions with identical number/currency formatting, or convert to plain values first, and the cosmetic diffs disappear.
Is my financial data uploaded anywhere?
No. Range Diff runs entirely in your browser using ExcelJS and SheetJS. Salaries, margins, headcount, and forecast inputs never leave your machine. Only an anonymous processed-file counter is logged for dashboard stats.
Can I compare three or more budget versions?
Not in one pass — Range Diff compares exactly two files. Diff them pairwise: v2↔v3, then v3↔v4. The first file in each run is the baseline and the second is the newer version.
Does it diff formula cells or just the results?
It compares the values SheetJS reads from each cell, not the formula text. Cells computing the same number match. To compare the underlying formula logic, convert formulas to values consistently in both files first, or use the formula explainer.
What happens to a brand-new budget sheet?
It's written to the diff as an all-green sheet — every populated cell is flagged as added, because the prior file had no sheet of that name to compare against. The summary's sheet count reflects the union of both files' tabs.
How big a model can I diff?
Pro supports 50 MB and 100,000 rows per file, Pro-media 200 MB and 500,000 rows, Developer 500 MB and unlimited. Most planning models are well within Pro. Free can't run a two-file diff. The full diff is always rendered in the workbook; only the text summary truncates.
Can I make it ignore rounding or small differences?
No — there's no tolerance option. Comparison is exact string matching. If you want to ignore rounding, round both files to the same precision before diffing (for example by converting formulas to fixed-decimal values).
How do I avoid the whole budget showing as changed?
The usual cause is a row inserted or deleted, which shifts positions. Keep the line structure identical between the two versions, only changing values, or sort both files by a stable account-code column so rows line up before you diff.
What's the colour key in the output?
Amber means a changed figure, green means an added value (was blank before), red means a removed value (was populated, now blank), and the grey bold row is the header. Unchanged cells have no fill, so colour is your scan signal.
Does the output show the old or the new figure?
Each cell shows the new value, except removed cells which show the old value (the one that was deleted). So amber and green cells display the current budget figure; red cells display what was there before.
Which related tools help with budget workflows?
Use the sheet joiner to consolidate department tabs before comparing, the pivot generator to summarise after, the error locator to catch broken formulas in a revised model, and the format inspector to find formatting drift that would otherwise look like figure changes.
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.