Setting up a car budget spreadsheet
Open a blank workbook. By the end of this page it will have four tabs, a dozen formulas, and an honest answer to what your car costs you each month.
The plan is deliberately plain. One tab where every car expense is written down the day it happens. One tab for fuel, because fuel is the only cost frequent enough to deserve its own. One tab that summarizes by month without you touching it. And one tab that turns the once-a-year bills into a monthly number you can set aside. The formulas below work in both Excel and Google Sheets; where the two differ, we say so.
The log
Name the first tab Log. This is the only tab you type into regularly, so keep it narrow. Row 1 holds headers; data starts in row 2.
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Date | Odometer | Category | Note | Amount | Month |
| 2 | 01/04/2026 | 41,210 | Fuel | 11.2 gal | 38.90 | =TEXT(A2,"yyyy-mm") |
| 3 | 01/09/2026 | 41,388 | Parking | garage, downtown | 14.00 | =TEXT(A3,"yyyy-mm") |
| 4 | 01/15/2026 | 41,502 | Insurance | monthly draft | 112.00 | =TEXT(A4,"yyyy-mm") |
| 5 | 01/15/2026 | 41,502 | Loan | payment | 385.00 | =TEXT(A5,"yyyy-mm") |
Column F turns each date into a label like 2026-01, which is what the summary tab groups on. Type the formula once in F2 and fill it down as far as you like. The amounts above are placeholders to show the shape of the data, not typical costs.
Two habits make this tab work. Use a short, fixed list of categories — Loan, Insurance, Fuel, Maintenance, Repair, Tires, Parking, Tolls, Registration, Wash, Other — and enforce it with a dropdown (Data → Data validation in either program) so "Gas" and "fuel" never split one category in two. And write the odometer every time, even for a parking receipt. It costs a glance at the dashboard and it is the only way to get cost per mile later.
Fuel
Fuel entries also go in the Log, so the money is counted once. This second tab exists to track efficiency. Log every fill-up, and fill the tank all the way each time, or the math drifts.
Fuel| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Date | Odometer | Gallons | Miles since last | MPG | Fuel $/mile |
| 2 | 01/04/2026 | 41,210 | 11.2 | — | — | — |
| 3 | 01/13/2026 | 41,478 | 10.1 | =B3-B2 | =ROUND(D3/C3,1) | =ROUND(38.90/D3,3) |
Row 3 reads: 268 miles on 10.1 gallons, so =ROUND(D3/C3,1) returns 26.5. The fuel-per-mile cell divides what you paid for the previous tank (the gas you just burned) by the miles it carried you: $38.90 over 268 miles is about $0.145. In practice, add a column for price paid and point the formula at the row above instead of typing a number.
Row 2 has no "since last" because there is no last. That is normal; start computing from row 3.
The monthly summary
This tab is all formulas. Categories run down column A, months run across row 1, and one formula fills the grid.
Summary| A | B | C | N | O | |
|---|---|---|---|---|---|
| 1 | Category | '2026-01 | '2026-02 | Year | Per month |
| 2 | Loan | =SUMIFS(Log!$E:$E,Log!$C:$C,$A2,Log!$F:$F,B$1) | (fill right) | =SUM(B2:M2) | =N2/12 |
| 3 | Insurance | (fill down) | =SUM(B3:M3) | =N3/12 | |
| 13 | Total | =SUM(B2:B12) | =SUM(N2:N12) | =N13/12 |
The apostrophe in '2026-01 forces the header to stay text. Without it, both programs helpfully turn it into a date, and the SUMIFS — which is matching the text labels from Log column F — quietly returns zero. The dollar signs are what let one formula be filled across twelve months and down eleven categories without breaking: $A2 locks the column, B$1 locks the row.
Mid-year, "per month" in column O understates things, because the empty months count as zero. Swap it for =N2/COUNTIF(B$13:M$13,">0") to divide only by months that have any spending in them.
Underneath the grid, add the number that matters most:
Summary| A | B | |
|---|---|---|
| 15 | Miles logged | =MAX(Log!B:B)-MIN(Log!B:B) |
| 16 | Cost per mile | =IFERROR(N13/B15,"") |
That second line is the spreadsheet's version of your real cost per mile. Treat the first few months with suspicion: until you have logged a full year, insurance paid annually or a big repair can make it swing hard.
The annual-bills fund
Registration, an insurance premium paid in full, an inspection, a set of tires you can see coming. None of them show up monthly, so they show up as emergencies. This tab turns each one into a monthly set-aside.
Fund| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Bill | Expected $ | Due date | Months left | Set aside / month |
| 2 | Registration | (from your notice) | 08/01/2026 | =MAX(1,DATEDIF(TODAY(),C2,"m")) | =ROUND(B2/D2,2) |
| 3 | Tires | (a quote) | 04/01/2027 | (fill down) | (fill down) |
| 8 | Total | =SUM(B2:B7) | =SUM(E2:E7) |
DATEDIF counts whole months between today and the due date. The MAX(1, …) wrapper stops a division by zero in the month a bill comes due. Because TODAY() moves, column E recalculates itself: a bill you started late demands more each month, which is the honest answer. Fill column B from real paperwork — last year's notice, an actual quote — and not from a guess; fees and premiums vary too much from place to place for anyone else's number to be useful.
Once you pay a bill, roll its due date forward a year (or to whenever it recurs) and the set-aside resets on its own. If you want to see how those bills tend to cluster, the car bills that arrive once a year lays them out by month.
Keeping it alive
A spreadsheet like this dies from friction, not from bad formulas. Keep receipts in one place until the weekend and enter them in one sitting; ten minutes a week is plenty. Freeze row 1 on the Log tab so headers stay visible. And resist adding columns. Every extra field is one more thing to skip on a busy day, and a log with gaps is worse than a short log that is complete.
Look at the Summary tab once a month, the Fund tab whenever you get paid, and the cost-per-mile cell once a year — ideally before you start shopping for the next car.
Keep reading
Further reading
- Budgets, explained Investopedia
- Variable costs Investopedia
- True cost to own Edmunds