Pro workbook: Month, Streaks, Weeks, Setup, Formulas. Sample data, real formulas.
| Habit tracker | |||||||||||||||||||||||||||||||||||||
| Put a 1 in the day you did it (or type x — anything counts). Everything to the right is calculated. | |||||||||||||||||||||||||||||||||||||
| Month | September 2026 | ||||||||||||||||||||||||||||||||||||
| Days | 30 | ||||||||||||||||||||||||||||||||||||
| Habit | Target/wk | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | Done | Target | Done % | Streak | Best | |
| Read 20 pages | 7 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 10 | 30 | 33.3% | 6 | 6 | |||||||||||||||||||||
| Run | 3 | 1 | 1 | 1 | 1 | 4 | 13 | 30.8% | 1 | 1 | |||||||||||||||||||||||||||
| No sugar | 6 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 9 | 26 | 34.6% | 5 | 5 | ||||||||||||||||||||||
| Meditate | 5 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 8 | 21 | 38.1% | 5 | 5 | |||||||||||||||||||||||
| Sleep by 23:00 | 6 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 9 | 26 | 34.6% | 4 | 4 | ||||||||||||||||||||||
| Write | 4 | 1 | 1 | 1 | 1 | 4 | 17 | 23.5% | 1 | 2 | |||||||||||||||||||||||||||
| Stretch | 7 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 11 | 30 | 36.7% | 11 | 11 | ||||||||||||||||||||
| Call a friend | 1 | 1 | 1 | 1 | 3 | 4 | 75.0% | 2 | 2 | ||||||||||||||||||||||||||||
| Per day | 6 | 7 | 5 | 4 | 5 | 5 | 6 | 5 | 5 | 4 | 6 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |||||||
| Month completion | 34.7% | ||||||||||||||||||||||||||||||||||||
| Target/wk × days in month ÷ 7 = the month's target, rounded. Done % is against that. | |||||||||||||||||||||||||||||||||||||
| Weekends are shaded; days past the end of the month are greyed out. |
| Streaks | ||||||||||||||||||||||||||||||||||
| A running count per day: 1 more than yesterday if you did it, back to 0 if you didn't. Current streak is the last filled day; best is the max. | ||||||||||||||||||||||||||||||||||
| Day index | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | |||
| Habit | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | Current | Best | ||
| Read 20 pages | 1 | 2 | 3 | 4 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 6 | 6 | |
| Run | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | |
| No sugar | 0 | 1 | 2 | 3 | 4 | 0 | 1 | 2 | 3 | 4 | 5 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 5 | 5 | |
| Meditate | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 4 | 5 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 5 | 5 | |
| Sleep by 23:00 | 1 | 2 | 3 | 0 | 1 | 2 | 0 | 1 | 2 | 3 | 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 4 | 4 | |
| Write | 1 | 2 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 2 | |
| Stretch | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 11 | 11 | |
| Call a friend | 0 | 1 | 0 | 0 | 1 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 2 |
| By week | ||||||
| Done per habit per week of the month, against the weekly target. Full weeks only count days that exist. | ||||||
| Habit | Target/wk | Week 1 | Week 2 | Week 3 | Week 4 | Week 5 |
| Read 20 pages | 7 | 6 | 4 | 0 | 0 | 0 |
| Run | 3 | 3 | 1 | 0 | 0 | 0 |
| No sugar | 6 | 5 | 4 | 0 | 0 | 0 |
| Meditate | 5 | 6 | 2 | 0 | 0 | 0 |
| Sleep by 23:00 | 6 | 5 | 4 | 0 | 0 | 0 |
| Write | 4 | 3 | 1 | 0 | 0 | 0 |
| Stretch | 7 | 7 | 4 | 0 | 0 | 0 |
| Call a friend | 1 | 3 | 0 | 0 | 0 | 0 |
| Green: weekly target met. Yellow: started but short. Week 5 is the last 1–3 days of the month. |
| Setup | |
| The month, and your habits with a weekly target. | |
| Month (first day) | 2026-09-01 |
| Habit | Target per week |
| Read 20 pages | 7 |
| Run | 3 |
| No sugar | 6 |
| Meditate | 5 |
| Sleep by 23:00 | 6 |
| Write | 4 |
| Stretch | 7 |
| Call a friend | 1 |
| Eight habit rows. Need more? Insert rows inside the block here and on Month/Streaks/Weeks in the same position. |
| How the formulas work | ||
| Every formula in this workbook, in plain words. Nothing is hidden and nothing needs a macro. Formulas are shown without the leading = sign. | ||
| Where | Formula | What it does |
| Month · day header | IF(1>$B$4,"",1) | Shows the day number only if the month has that many days; days past the end are blank and greyed. |
| Month · Done | COUNTA(C6:AG6) | Counts non-empty cells in the row — a 1, an x, anything. Leave a day empty to mean 'didn't'. Don't type 0: it counts as a mark. |
| Month · Target | ROUND(B6*$B$4/7,0) | Weekly target scaled to the month's length: 3 a week in a 31-day month is 13. |
| Month · weekend shading | Conditional format: =WEEKDAY(DATE(YEAR($B$3),MONTH($B$3),C$5),2)>5 | Rebuilds the date from month + day number; WEEKDAY(…,2) gives 6 and 7 for Saturday and Sunday. |
| Streaks · cell | IF(Month!C6<>"",B6+1,0) | One more than the cell to the left if today is ticked, otherwise back to zero. The first day starts from 0. |
| Streaks · Current | INDEX(C6:AG6, SUMPRODUCT(MAX((Month!C6:AG6<>"")*$C$4:$AG$4))) | The streak value on the last day that has any mark. The inner part multiplies 'is marked' (1/0) by the day index in row 4 and takes the largest — the last marked day. Blank days after that don't reset it, so an unlogged tomorrow doesn't kill today's streak. |
| Streaks · Best | MAX(C6:AG6) | The longest run in the month. |
| Weeks · cell | SUMPRODUCT((days>=1)*(days<=7)*(Month!C6:AG6<>"")) | Counts ticks whose day number falls in the week's range. |