A multi-year financial statement comparison in Excel puts each year's statement in its own column on one set of aligned line items, then adds a dollar change column, a percent change column and a common-size column. A simple threshold rule then flags the lines whose change is large enough, in dollars and in percent, to ask the client about.
Aligning financial statement line items across years
Aligning financial statement line items means every row in the comparison stands for the same thing in every year, even when the client renamed an account, split one line into two or merged two into one. Alignment comes first, because a dollar change between two lines that mean different things is noise dressed up as analysis.
Start with a mapping column. List each year's printed labels in their own columns, then add a column for the standard line each one belongs to. "Repairs and maintenance" in 2024 and "Facility costs" in 2026 might both map to one standard line if the client confirms they hold the same costs. The comparison sums by standard line, so the printed labels can vary without breaking anything.
Handle splits by mapping down to the coarser line. If 2024 shows "Vehicle expense" and 2026 splits it into "Fuel" and "Vehicle repairs", map both 2026 lines to vehicle expense for the comparison. You can still show the 2026 detail underneath, but the change column runs on the line that exists in every year.
Handle regroupings by moving amounts, not labels. A client who moves a line from operating expenses to cost of goods sold changes gross profit without any change in the business. Restate the earlier years to the current grouping, note it on the sheet, and keep the original figures on a separate tab.
Getting each year's statement into rows in the first place is the slow part. If the client's books are available, the ledger is a better source than the printed statement; see the post on general ledger to Excel. How income statements arrive in monthly, quarterly and year-to-date layouts is covered in income statement layouts clients send.
Dollar and percent change columns across statement years
The dollar change column is the later year minus the earlier year. The percent change column divides that dollar change by the absolute value of the earlier year, and returns a marker instead of an error when the earlier year is zero. Those two rules handle zero and negative base years without hiding real changes.
With the earlier year in column C and the later year in column D, the formulas are:
Dollar change: =D2-C2
Percent change: =IFERROR((D2-C2)/ABS(C2),"n/a")
The ABS function returns a number without its sign. Dividing by the absolute value keeps the direction of the percent change honest when the base is negative. Suppose operating income moved from a loss of 20,000 to a profit of 10,000. The dollar change is 10,000 minus negative 20,000, which is 30,000. Dividing by the raw base gives negative 150%, which reads as a decline. Dividing by ABS gives positive 150%, which matches what happened.
The IFERROR function returns a value you specify when a formula evaluates to an error, such as #DIV/0!, and otherwise returns the formula's result. A zero base year has no meaningful percent change, so "n/a" is the honest answer. The dollar change still shows the size of the move.
Format percent change with one decimal place and keep dollar change in whole dollars. Rounding is for display only; leave the underlying values unrounded so totals stay exact.
Which multi-year swings deserve a question to the client?
A multi-year swing deserves a question when it is large in both dollars and percent. A rule that flags a line only when both thresholds are crossed filters out big percentages on tiny lines and small percentages on huge lines. A line moving from zero to a material amount should be flagged as well.
The thresholds are a firm decision, based on the size of the client and the purpose of the review. The example below uses a dollar threshold of 10,000 and a percent threshold of 10%, chosen only for illustration. The flag column formula, with dollar change in E2 and percent change in F2, is:
=IF(F2="n/a","Ask",IF(AND(ABS(E2)>=10000,ABS(F2)>=0.1),"Ask",""))
The IF function returns one value when its test is true and another when it is false. The outer test catches a zero base, and the inner test catches a line past both thresholds; either way the cell reads "Ask". The tests are nested rather than combined with OR because ABS of the text "n/a" is an error, and an error inside OR makes the whole formula return an error.
Example three-year comparison
This income statement belongs to a fictional client, Marlow Landscaping Inc. Every figure is an example. The change and common-size columns compare FY2026 with FY2025; common-size shows each line as a percent of FY2026 revenue.
| Line | FY2024 | FY2025 | FY2026 | $ change | % change | Common-size FY2026 | Flag |
|---|---|---|---|---|---|---|---|
| Revenue | 800,000 | 900,000 | 1,000,000 | 100,000 | 11.1% | 100.0% | Ask |
| Cost of goods sold | 480,000 | 531,000 | 610,000 | 79,000 | 14.9% | 61.0% | Ask |
| Gross profit | 320,000 | 369,000 | 390,000 | 21,000 | 5.7% | 39.0% | |
| Salaries and wages | 150,000 | 162,000 | 170,000 | 8,000 | 4.9% | 17.0% | |
| Rent | 36,000 | 36,000 | 48,000 | 12,000 | 33.3% | 4.8% | Ask |
| Vehicle expense | 20,000 | 22,000 | 21,000 | -1,000 | -4.5% | 2.1% | |
| Professional fees | 6,000 | 0 | 12,000 | 12,000 | n/a | 1.2% | Ask |
| Other operating expenses | 18,000 | 20,000 | 19,000 | -1,000 | -5.0% | 1.9% | |
| Total operating expenses | 230,000 | 240,000 | 270,000 | 30,000 | 12.5% | 27.0% | Ask |
| Operating income | 90,000 | 129,000 | 120,000 | -9,000 | -7.0% | 12.0% | |
| Interest expense | 10,000 | 9,000 | 8,000 | -1,000 | -11.1% | 0.8% | |
| Income before taxes | 80,000 | 120,000 | 112,000 | -8,000 | -6.7% | 11.2% |
Five lines are flagged. Revenue and cost of goods sold both grew, but cost grew faster, so gross margin fell from 41.0% in FY2025 to 39.0%. Rent rose by a third, which suggests a new lease or a second location. Professional fees went from zero to 12,000, which the formula flags because there is no base to measure against. Interest expense fell 11.1%, but only by 1,000, so the rule leaves it alone.
Gross profit shows why both thresholds matter. It rose by 21,000, well past the dollar threshold, but only 5.7%, so the rule leaves it unflagged. The lines beneath it, revenue and cost of goods sold, already carry the flags that explain the movement. Flagging every subtotal whose components are flagged would only repeat the same question.
Totals deserve one exception. Total operating expenses is flagged here because its 30,000 increase is mostly rent and professional fees, both of which are flagged. If a total crosses both thresholds while none of its lines do, the change is spread thin across many accounts, and that pattern is worth one question of its own.
Set the thresholds before looking at the numbers. Choosing them after seeing the table invites thresholds that flag what you already suspected and skip what you did not. Write them at the top of the sheet so a reviewer can see what rule produced the flags.
Each flag becomes a question, not a conclusion. "Rent increased from 36,000 to 48,000; did the lease change?" is specific and easy for the client to answer. Write the answer next to the line.
For a review engagement trial balance, the same idea applies account by account; see prior-year variance columns on a review trial balance.
Common-size statements for a multi-year comparison
A common-size statement shows every line as a percent of one base: revenue for an income statement, total assets for a balance sheet. In a multi-year comparison, common-size columns reveal shifts in the shape of the business that raw dollars hide when the business is growing or shrinking.
The formula divides each line by the base line for the same year. With revenue in row 2 and the year in column D, a line in row 3 uses =D3/D$2. The dollar sign keeps the reference on the revenue row when the formula is filled down. Microsoft's guide to switching between relative, absolute and mixed references explains how the dollar sign works.
In the Marlow example, salaries grew by 8,000 in dollars but fell as a share of revenue, from 18.0% in FY2025 (162,000 of 900,000) to 17.0% in FY2026. Cost of goods sold went the other way: 59.0% of revenue in FY2025 (531,000 of 900,000) and 61.0% in FY2026. Dollar change alone shows both lines rising. Common-size shows one becoming a smaller part of the business and the other a larger one.
Check that common-size columns foot. In FY2026, operating expense lines of 17.0%, 4.8%, 2.1%, 1.2% and 1.9% add to 27.0%, and 100.0% less 61.0% less 27.0% leaves the 12.0% operating margin. A column that does not foot points to a mapping error or a missing line.
For a balance sheet, use total assets as the base. Receivables rising from 15% to 22% of total assets across three years says more about collections than the dollar figures alone.
How do you compare years when a statement was restated?
When a prior year was restated, compare against the restated figures, because they reflect the same accounting as the current year. Keep the originally reported figures on a separate tab, label which version each column uses, and note the reason for the restatement next to the affected lines.
A restatement shows up when this year's package prints a prior-year column that differs from last year's package. The cause might be an error correction, a reclassification between lines, or a change in how the client accounts for something. Each one changes what the comparison can say.
Reclassifications are the easiest. Totals do not change, only where amounts sit. Restate the earlier years in your comparison to the new grouping so every column uses the same layout.
Error corrections change totals. If FY2025 income before taxes was originally 120,000 and is now shown as 115,000, a comparison against the original figure would show FY2026 falling by 8,000 when the like-for-like decline is 3,000. Use the corrected figure, and keep the original visible with a note.
Years before the restated one need care. If only FY2025 was restated, FY2024 may still be on the old basis. Mark that column as not comparable, or adjust it if the client can provide the restated amount.
For a deeper look at statements that should agree with the books but do not, the post on client-prepared financial statements review covers tying each line to the ledger. A comparison is only as good as the years in it, and confirming every expected year arrived is a document collection problem first; the post on using the prior-year return as a checklist covers that habit for tax files. Schema CPA reads balance sheets and income statements from each year's package and exports them to Excel or CSV, so the columns start from extracted rows instead of retyped figures; the list of documents it reads is on the homepage.