THE IDEA TO TAKE AWAY

A budget is the approved plan, frozen with its version and date; a forecast is the current expectation, stamped as-of a date. Update the forecast row and bridge the variance — never edit the budget in place.

A budget quantifies what the organisation decided to do: an approved plan, versioned and frozen. A forecast quantifies what the organisation now expects: a dated re-estimate that absorbs actuals and revised assumptions. The whole difference fits in one sentence — the budget answers what should happen, the forecast answers what is now expected to happen — but the working difference is where errors live: which row a closed month writes into, which row nobody may edit, and what a plan-to-forecast variance actually decomposes into.

Budget Forecast
Status Approved (version, date, approver) Current expectation (as-of date)
Changes when Re-baselined formally, if ever Actuals close or assumptions change
Answers What are we committing and resourcing? Where do we now expect to land?
Compared with Actuals, for performance Its own prior versions, for what moved

This page builds one small case that shows all three comparisons — budget-to-actual, forecast-to-actual and forecast-over-forecast — on dated monthly data. Amounts are FY2027 revenue in thousands of one currency for a fictional lab-instrument parts distributor; the company plans on calendar months and closes each month’s ledger within five working days. No Excel function is taught here: SUM and subtraction carry every number, and the Excel for finance guide and the percentage change guide own the mechanics.

The plan: BUD-27 v1.0, approved 20 November 2026

Months sit across B3:M3, annual figures in N, one line per version — budget in row 4, the actuals row below it in row 6, FCST-27-01 in row 10 and FCST-27-02 in row 12. Keep each forecast snapshot; use =SUM(B4:M4) in N4 and the corresponding row formula in N6, N10 and N12. For the actuals row, label N6 as year-to-date until December closes. The budget is the only row anyone types first, and it never changes again this year without a formal re-baseline:

Line Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec Year
Budget (BUD-27 v1.0) 80 84 92 96 96 104 88 88 100 108 116 128 1,180

The shape is deliberate: Q1 is 256 of 1,180 — about 21.7% of the year — and Q4 alone carries 352. Hold that; the annualising trap at the end of the page is entirely a function of this seasonality. Quarter subtotals (=SUM(B4:D4) onward) are 256, 296, 276 and 352, and the four subtotals must sum to =SUM(B4:M4) — two routes to every annual figure from the first version onward.

Record actuals only in closed months

Q1 closes on 5 April 2027. The actuals row receives January, February and March — and nothing else:

Line Jan Feb Mar
Actual (closed 5 Apr) 78 90 87
Actual − budget −2 +6 −5
Reason recorded Slow restart One-time bulk order Shipment slipped into April

The variance cell is =B6-B4 (actual minus budget), and the percentage is =(B6-B4)/B4 — with the zero-base and negative-base guards the percentage change guide works through. The sign convention follows the Excel for finance budget report: on a revenue line a positive variance is favourable; the identical +20 on an expense line means overspending, and a clean total can hide offsetting detail.

Q1 actual is 78 + 90 + 87 = 255 against a budget of 256: elapsed variance −1. Three properties of that −1 already matter for the forecast: the February +6 is a one-time bulk order that does not repeat; the March −5 is a shipment that slipped, not a lost sale, and is expected to recover in April; only January’s −2 is plain softness. Those causes should inform the forward assumptions individually.

Update the forecast row, never the budget

FCST-27-01 is prepared on 6 April 2027. Its rule: January–March are locked actuals, April–December are the current expectation, and every forward change traces to a dated, named decision:

Line Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec Year
FCST-27-01 (as of 6 Apr) 78 90 87 101 96 104 85 85 97 112 120 132 1,187

The three decisions behind it:

  1. The slip recovers. April = 96 + 5 = 101; the March shortfall was timing, and the +5 is dated where it reappears.
  2. A price increase slips from 1 July to 1 October. July, August and September drop 3 each (88→85, 88→85, 100→97); a separately revised, larger increase raises October–December by 4 each above the approved budget, not merely above September (108→112, 116→120, 128→132). The decision lives in the affected months only — not spread across the year.
  3. May and June stay at budget pending the pipeline review. “Still at plan” is itself a recorded, dated judgement, not a blank.

February’s +6 stays a one-off: it is in the actuals, and it appears nowhere in the forward months.

Bridge the plan to the forecast

The headline moved from 1,180 to 1,187, and the two-step bridge explains every unit of it:

Step Amount Running total
BUD-27 v1.0 (approved 20 Nov 2026) 1,180.0
Elapsed variance, Q1 actual − Q1 budget −1.0 1,179.0
Recover March slip in April +5.0 1,184.0
— recovery-only benchmark 1,184.0
Price rise deferred: Jul–Sep, 3 × −3 −9.0 1,175.0
Larger rise vs budget in Oct–Dec: 3 × +4 +12.0 1,187.0
FCST-27-01 (as of 6 Apr 2027) 1,187.0

Read the two halves separately, because they answer different questions. The −1 is the budget-to-actual result for a completed period: how the closed quarter performed against the plan. The +8 is a set of dated forward decisions about months nobody has traded yet. The year is now expected to finish +7 above a budget that Q1 says is being missed — both statements are true, and collapsing them into one “vs budget” column is what makes the report hard to interpret. The recovery-only benchmark (1,184: actuals, the recovery, everything else at plan) separates the −1 of history from the +3 the pricing decisions net to, and gives the bridge a checksum: 255 + 5 + 924 = 1,184; 1,184 − 9 + 12 = 1,187 ✓.

Roll the forecast; the plan stays put

Q2 closes on 7 July: April 103, May 94, June 106 — actual 303, +7 on Q2 budget and +2 on what FCST-27-01 predicted for those months. FCST-27-02, prepared 8 July, locks Q2 and revises the horizon:

Line Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec Year
FCST-27-02 (as of 8 Jul) 78 90 87 103 94 106 84 85 98 113 121 134 1,193

Both versions cover the same January–December year, so comparing their full-year totals is valid. Split the +6 change into April–June forecast-to-actual variance and July–December forecast revisions. January–March actuals are unchanged and omitted from the table:

Month FCST-27-01 (6 Apr) FCST-27-02 (8 Jul) Change Reason
Apr 101 103 +2 Slip recovered, plus incremental demand
May 96 94 −2 One customer deferred its quarterly order
Jun 104 106 +2 Repeat order landed early
Jul 85 84 −1 Soft start to the deferral window
Aug 85 85 0 No change
Sep 97 98 +1 Pre-increase pull-in orders visible
Oct 112 113 +1 Price rise confirmed by bookings
Nov 120 121 +1 Price rise confirmed by bookings
Dec 132 134 +2 Price rise plus a year-end bulk contract

The FY bridge rolls forward the same two-step way: 1,187 plus +2 of newly closed actual variance plus +4 of forward revisions (−1 + 0 + 1 + 1 + 1 + 2) = 1,193, which is +13 against the unchanged 1,180 budget. The three comparison pairs each earned their keep: budget-to-actual says how the closed half-year performed (+6: −1 then +7); forecast-to-actual says how accurate the April prediction was for Q2 (+2); forecast-over-forecast says what changed since then (+4).

Three checks before the pack circulates

  1. Two routes to the year. =SUM(B12:M12) must equal the four quarter subtotals: 255 + 303 + 267 + 368 = 1,193 ✓ (and for FCST-27-01: 255 + 301 + 267 + 364 = 1,187 ✓).
  2. The period lock. For every closed month, the actual cell minus the current forecast cell must be zero — =B6-B12 across the closed range. A nonzero means a projection is hiding inside a completed period. This is the one flag that keeps three versions on one sheet honest, and it fails silently: the totals all look fine while someone has forecast their way through a month that already happened.
  3. The bridge closes. Plan + elapsed + forward = forecast, per version: 1,180 − 1 + 8 = 1,187 ✓ and 1,187 + 2 + 4 = 1,193 ✓. Each component must name its dated decision; a plug that makes the bridge balance is the same offence as editing the budget.

Break it, and see what each error looks like

1. Rewriting the plan. It is December, and a colleague edits the March budget cell from 92 to 87 “so the Q1 report reads clean.” The FY budget silently becomes 1,175, the Q1 budget-to-actual flips from −1 to +4, while April remains +7 against its unchanged 96 budget. Editing March has not changed April; it has erased the original Q1 benchmark. Nothing else on the sheet changes — which is exactly why this error survives review. What was lost is the only thing a budget is for: a fixed benchmark. If leadership genuinely changes the commitment, re-baseline formally — BUD-27-R2, dated, approved — so both plans remain in the record.

2. Annualising a quarter. Take Q1’s 255 and multiply by four: 1,020, a “−160 to plan.” But the budget itself earns only 256/1,180 of the year in Q1, so the seasonal-shape route is 255 × 1,180 ÷ 256 = 1,175.4. Almost the entire 155.4 gap between 1,020 and 1,175.4 is period shape, not performance — four quarters are not the same size. Scale by the plan’s own distribution if you must scale, and drive the remaining months with drivers instead: that is the revenue-forecast build, which models volumes and prices month by month rather than restating one period four times.

3. Forecasting a closed month. Replace February’s locked 90 with the old budget 84 and the FY prints 1,187 — still plausible, still wrong. The forecast total loses 6 even though the actuals and the budget-to-actual calculation remain unchanged. The period-lock check catches this mismatch (=C6-C12 = +6 ≠ 0). A forecast is allowed to change its mind about July; it must tie closed months to the ledger. If the ledger is corrected, retain the old snapshot and label the actuals restatement explicitly.

For the forward months’ “what if” spread, the scenario analysis guide builds base/upside/downside cases on one switch, so the forecast stays a single dated expectation while the range around it stays explicit.

Check your answers

  • Budget FY 1,180 (quarters 256, 296, 276, 352); Q1 actual 255, elapsed variance −1.
  • FCST-27-01 months 78, 90, 87, 101, 96, 104, 85, 85, 97, 112, 120, 132; FY 1,187; bridge −1 + 8; no-decision benchmark 1,184.
  • FCST-27-02: Q2 actual 303; months 78, 90, 87, 103, 94, 106, 84, 85, 98, 113, 121, 134; quarters 255/303/267/368; FY 1,193 = 1,187 + 2 + 4; +13 vs budget.
  • Annualising: 255 × 4 = 1,020 versus the seasonal route 1,175.4 — a 155.4 difference that is shape, not performance.
  • Rewritten plan: FY budget 1,175, Q1 variance +4; April stays +7 against its unchanged budget.

Practise the report layer next

This page is the planning discipline around one line; building and checking the month-against-budget report itself — selection, aggregation, the sign convention and offsetting detail — is the worked case on the Excel for finance guide. FinX’s Excel for Finance course covers those areas — foundations, lookups, aggregation and data hygiene, model mechanics, and financial functions — with browser spreadsheet practice; Mathematical Functions and Anchoring & the Grid are free, and the later lessons require paid access. Browse the catalogue for the current syllabus. The free ten-minute diagnostic asks five numeric modelling questions; it does not grade a variance bridge or version control.

Continue with guided practice

Build on this guide with spreadsheet exercises on formulas, lookups and financial functions. Explore the syllabus and start with a free lesson.

Excel for Finance course
DM
ABOUT THE AUTHOR

David Mikadze

Notes on Excel practice and financial modelling at FinX Academy.

LinkedIn