sheetsmith

Templates › Plans and occasions

Meal Plan & Grocery Budget

Made for households planning meals and shopping.

Plan a meal for every day, turn it into a costed shopping list, and check each week's actual shop against the budget you set. The summary carries a chart that redraws itself as you type.

Tabs
4
Columns
28
Fill themselves in
22

£7one payment, yours to keep

  • Opens in Excel, Google Sheets and Numbers
  • Delivered straight away
  • No macros, nothing to install
  • Change it free before you buy

Payment is handled by Stripe. Your card details go to them and never to us. Sales are final, which is why every tab, column and calculation is shown on this page first.

The workbook's summary and the table behind it
A row typed into the real file. Every figure that changes is the spreadsheet's own arithmetic.
The summary page, every figure calculated from the tables
The chart, drawn from the totals in the table beside it
What is inside: the tabs, the columns and what fills itself in
Where you type, and the shaded columns that work themselves out
The guide sheet that opens first and explains the file
Everything included in the download

Everything inside, before you pay

This is the whole design: every tab, every column and how each calculated one is worked out. White cells are yours to fill in; the shaded ones work themselves out and are locked so a formula cannot be overwritten by accident. There is room for 2,310 rows.

Meal Plan

One row per meal. Cost is pulled in from the shopping list items you tag to each dish. Room for 750 rows.

ColumnTypeWorked out as
Datedate
DaytextIF(ISBLANK([date]), "", TEXT([date], "ddd"))
Mealchoice (list)
Dishtext
Servingsnumber
Ingredient CostcurrencyIF(ISBLANK([dish]), "", SUMIF([Shopping List!meal], [dish], [Shopping List!line_cost]))
Cost Per ServingcurrencyIF(OR(ISBLANK([dish]), ISBLANK([servings])), "", IFERROR(SUMIF([Shopping List!meal], [dish], [Shopping List!line_cost]) / [servings], 0))
Cookedbool
Notestext

Shopping List

Everything you need to buy, tagged to the meal it belongs to and to the week you are shopping for. Room for 1,500 rows.

ColumnTypeWorked out as
Week Beginningdate
Itemtext
Categorychoice (list)
For Which Mealchoice (from Meal Plan › dish)
Quantitynumber
Unitchoice (list)
Price Per Unitcurrency
Line CostcurrencyIF(OR(ISBLANK([quantity]), ISBLANK([unit_price])), "", ROUND([quantity] * [unit_price], 2))
Boughtbool

Weekly Budget

One row per week. Set the budget, enter what each shop actually came to, and see whether you kept inside it. Room for 60 rows.

ColumnTypeWorked out as
Week Beginningdate
Budgetcurrency
Main Shopcurrency
Top Up Shopcurrency
Other Food Spendcurrency
Total SpentcurrencyIF(ISBLANK([week_start]), "", ROUND([main_shop] + [top_up] + [other], 2))
Shopping List ValuecurrencyIF(ISBLANK([week_start]), "", SUMIF([Shopping List!week_start], [week_start], [Shopping List!line_cost]))
Under Or OvercurrencyIF(OR(ISBLANK([week_start]), ISBLANK([budget])), "", ROUND([budget] - ([main_shop] + [top_up] + [other]), 2))
Percent Of Budget UsedpercentIF(ISBLANK([budget]), "", IFERROR(([main_shop] + [top_up] + [other]) / [budget], 0))
StatustextIF(ISBLANK([week_start]), "", IF(ISBLANK([budget]), "No budget set", IF(([main_shop] + [top_up] + [other]) > [budget], "Over budget", "Within budget")))

Summary

The headline answers: what you budgeted, what you spent, and where the food money goes.

MeasureWorked out as
Total budgeted so farSUM([Weekly Budget!budget])
Total actually spentSUM([Weekly Budget!total_spend])
Under or over budget overallSUM([Weekly Budget!budget]) - SUM([Weekly Budget!total_spend])
Average weekly shopIFERROR(SUM([Weekly Budget!total_spend]) / COUNT([Weekly Budget!week_start]), 0)
Weeks trackedCOUNT([Weekly Budget!week_start])
Weeks over budgetCOUNTIF([Weekly Budget!status], "Over budget")
Spent this weekSUMIF([Weekly Budget!week_start], TODAY() - WEEKDAY(TODAY(), 2) + 1, [Weekly Budget!total_spend])
Left to spend this weekSUMIF([Weekly Budget!week_start], TODAY() - WEEKDAY(TODAY(), 2) + 1, [Weekly Budget!budget]) - SUMIF([Weekly Budget!week_start], TODAY() - WEEKDAY(TODAY(), 2) + 1, [Weekly Budget!total_spend])
Value of the whole shopping listSUM([Shopping List!line_cost])
Items on the shopping listCOUNTA([Shopping List!item])
Meals plannedCOUNTA([Meal Plan!dish])
Average cost per serving plannedIFERROR(SUM([Shopping List!line_cost]) / SUM([Meal Plan!servings]), 0)
Dearest meal to makeMAX([Meal Plan!meal_cost])