Analistable

How did each product grow from last month to this month?

By the Analistable team · Updated · 3 min read

Join the two monthly files on product, then calculate change = this month − last month and growth % = change ÷ last month. Use a full outer join (or check both directions) so products that are new this month, or that sold nothing this month, still appear. In the example, total revenue grew from 11,740 to 12,440 (+6.0%), but Desks fell 25%.

Part of our guide: How to answer questions across multiple spreadsheets

The data

January and February sales files
ProductJan revenueFeb revenue
Desk50403780
Chair54006480
Lamp13001430
Shelf—750

In a spreadsheet

Jan      =XLOOKUP([@Product], Jan[Product], Jan[Revenue], 0)
Change   =[@Feb] - [@Jan]
Growth % =IF([@Jan] = 0, "new", [@Change] / [@Jan])

Build the product list from both months so nothing is missed: =UNIQUE(VSTACK(Jan[Product], Feb[Product])).

In SQL

SELECT COALESCE(f.product, j.product) AS product,
       j.revenue AS jan, f.revenue AS feb,
       COALESCE(f.revenue, 0) - COALESCE(j.revenue, 0) AS change,
       ROUND(100.0 * (f.revenue - j.revenue) / j.revenue, 1) AS growth_pct
FROM feb f
FULL OUTER JOIN jan j ON j.product = f.product;
Result
productjanfebchangegrowth_pct
Desk50403780-1260-25.0
Chair54006480108020.0
Lamp1300143013010.0
ShelfNULL750750NULL (new)

Reading growth correctly

  • Total growth: (12,440 − 11,740) ÷ 11,740 = 6.0%. Shelf, a new product, contributes 750 of the 700 increase — without it, existing products shrank.
  • Months have different lengths and numbers of weekends; compare daily averages or the same month last year when seasonality matters.
  • For year-over-year, the same join works on product and month across two years' files.

Ask it in Analistable: “Compare revenue by product between January and February, including new products.”

In Google Sheets

=ARRAYFORMULA(IF(A2:A = "", ,
  IFERROR(VLOOKUP(A2:A, Feb!A2:C, 3, FALSE), 0) / IFERROR(VLOOKUP(A2:A, Jan!A2:C, 3, FALSE), 0) - 1))

With the product list in column A, this returns growth as a fraction (format as %). Products new in February divide by zero and return an error — wrap the division in IFERROR(…, "new") to label them.

Where the growth came from

Contribution to total growth
ProductChangeContribution (change ÷ Jan total 11,740)
Desk-1260−10.7 pts
Chair1080+9.2 pts
Lamp130+1.1 pts
Shelf (new)750+6.4 pts
Total700+6.0%

Contributions add up to the total growth, which makes them easier to present than individual growth percentages: Lamp grew 10% but added barely one point, while Desk's 25% fall took almost eleven points off.

Adjusting for month length

January 2026 has 31 days and February 28. Daily averages are 11,740 ÷ 31 = 378.7 and 12,440 ÷ 28 = 444.3, so daily revenue grew 17.3%, far more than the headline 6.0%. Use daily averages when months differ in length or trading days; use raw totals when you are tracking against a monthly budget.

Excel 2019 and older

Jan      =IFERROR(INDEX(Jan!B:B, MATCH(A2, Jan!A:A, 0)), 0)
Feb      =IFERROR(INDEX(Feb!B:B, MATCH(A2, Feb!A:A, 0)), 0)
Growth % =IF(B2 = 0, "new", (C2 - B2) / B2)

Without VSTACK and UNIQUE, build the product list by pasting both months' products into column A and using Data › Remove Duplicates.

Troubleshooting

Common problems
SymptomCauseFix
Product shows −100%Renamed or recoded between monthsMap old and new codes before joining
Totals don't match the filesProduct list built from one month onlyBuild it from both months
#DIV/0! errorsProduct new this monthLabel as “new” instead of dividing

To repeat this every month, stack all months in one table with a Month column and pivot products by month; the change columns then extend automatically. More on joining files like this: comparing spreadsheets.

Frequently asked questions

How do I calculate month-over-month growth in Excel?
Put both months' values side by side with XLOOKUP, then growth = (this month − last month) ÷ last month.
How do I handle products that are new this month?
Build the product list from both months with UNIQUE(VSTACK(...)), and show 'new' instead of dividing by zero.
Can I compare more than two months?
Yes. Stack all monthly files with a Month column and pivot products by month.
Should I compare totals or daily averages?
Daily averages when months differ in length or trading days; totals when tracking against a monthly budget. Say which one you used.
How do I show which products drove growth?
Divide each product's change by last month's total: the contributions add up to the overall growth percentage.
What if a product was renamed between months?
Map the old and new names to one code before joining, or it shows as discontinued and new at the same time.

Related guides