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.
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
| Column | Type | Worked out as |
|---|---|---|
| Date | date | |
| Day | text | IF(ISBLANK([date]), "", TEXT([date], "ddd")) |
| Meal | choice (list) | |
| Dish | text | |
| Servings | number | |
| Ingredient Cost | currency | IF(ISBLANK([dish]), "", SUMIF([Shopping List!meal], [dish], [Shopping List!line_cost])) |
| Cost Per Serving | currency | IF(OR(ISBLANK([dish]), ISBLANK([servings])), "", IFERROR(SUMIF([Shopping List!meal], [dish], [Shopping List!line_cost]) / [servings], 0)) |
| Cooked | bool | |
| Notes | text |
Shopping List
| Column | Type | Worked out as |
|---|---|---|
| Week Beginning | date | |
| Item | text | |
| Category | choice (list) | |
| For Which Meal | choice (from Meal Plan › dish) | |
| Quantity | number | |
| Unit | choice (list) | |
| Price Per Unit | currency | |
| Line Cost | currency | IF(OR(ISBLANK([quantity]), ISBLANK([unit_price])), "", ROUND([quantity] * [unit_price], 2)) |
| Bought | bool |
Weekly Budget
| Column | Type | Worked out as |
|---|---|---|
| Week Beginning | date | |
| Budget | currency | |
| Main Shop | currency | |
| Top Up Shop | currency | |
| Other Food Spend | currency | |
| Total Spent | currency | IF(ISBLANK([week_start]), "", ROUND([main_shop] + [top_up] + [other], 2)) |
| Shopping List Value | currency | IF(ISBLANK([week_start]), "", SUMIF([Shopping List!week_start], [week_start], [Shopping List!line_cost])) |
| Under Or Over | currency | IF(OR(ISBLANK([week_start]), ISBLANK([budget])), "", ROUND([budget] - ([main_shop] + [top_up] + [other]), 2)) |
| Percent Of Budget Used | percent | IF(ISBLANK([budget]), "", IFERROR(([main_shop] + [top_up] + [other]) / [budget], 0)) |
| Status | text | IF(ISBLANK([week_start]), "", IF(ISBLANK([budget]), "No budget set", IF(([main_shop] + [top_up] + [other]) > [budget], "Over budget", "Within budget"))) |
Summary
| Measure | Worked out as |
|---|---|
| Total budgeted so far | SUM([Weekly Budget!budget]) |
| Total actually spent | SUM([Weekly Budget!total_spend]) |
| Under or over budget overall | SUM([Weekly Budget!budget]) - SUM([Weekly Budget!total_spend]) |
| Average weekly shop | IFERROR(SUM([Weekly Budget!total_spend]) / COUNT([Weekly Budget!week_start]), 0) |
| Weeks tracked | COUNT([Weekly Budget!week_start]) |
| Weeks over budget | COUNTIF([Weekly Budget!status], "Over budget") |
| Spent this week | SUMIF([Weekly Budget!week_start], TODAY() - WEEKDAY(TODAY(), 2) + 1, [Weekly Budget!total_spend]) |
| Left to spend this week | SUMIF([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 list | SUM([Shopping List!line_cost]) |
| Items on the shopping list | COUNTA([Shopping List!item]) |
| Meals planned | COUNTA([Meal Plan!dish]) |
| Average cost per serving planned | IFERROR(SUM([Shopping List!line_cost]) / SUM([Meal Plan!servings]), 0) |
| Dearest meal to make | MAX([Meal Plan!meal_cost]) |






