Streak — habit tracker

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.
MonthSeptember 2026
Days30
HabitTarget/wk123456789101112131415161718192021222324252627282930DoneTargetDone %StreakBest
Read 20 pages71111111111103033.3%66
Run3111141330.8%11
No sugar611111111192634.6%55
Meditate51111111182138.1%55
Sleep by 23:00611111111192634.6%44
Write4111141723.5%12
Stretch711111111111113036.7%1111
Call a friend11113475.0%22
Per day675455655460000000000000000000
Month completion34.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 index12345678910111213141516171819202122232425262728293031
Habit123456789101112131415161718192021222324252627282930CurrentBest
Read 20 pages123401234560000000000000000000066
Run100100100010000000000000000000011
No sugar012340123450000000000000000000055
Meditate123012345000000000000000000000055
Sleep by 23:00123012012340000000000000000000044
Write120000100010000000000000000000012
Stretch1234567891011000000000000000000001111
Call a friend010012000000000000000000000000022
By week
Done per habit per week of the month, against the weekly target. Full weeks only count days that exist.
HabitTarget/wkWeek 1Week 2Week 3Week 4Week 5
Read 20 pages764000
Run331000
No sugar654000
Meditate562000
Sleep by 23:00654000
Write431000
Stretch774000
Call a friend130000
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
HabitTarget per week
Read 20 pages7
Run3
No sugar6
Meditate5
Sleep by 23:006
Write4
Stretch7
Call a friend1
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.
WhereFormulaWhat it does
Month · day headerIF(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 · DoneCOUNTA(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 · TargetROUND(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 shadingConditional format: =WEEKDAY(DATE(YEAR($B$3),MONTH($B$3),C$5),2)>5Rebuilds the date from month + day number; WEEKDAY(…,2) gives 6 and 7 for Saturday and Sunday.
Streaks · cellIF(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 · CurrentINDEX(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 · BestMAX(C6:AG6)The longest run in the month.
Weeks · cellSUMPRODUCT((days>=1)*(days<=7)*(Month!C6:AG6<>""))Counts ticks whose day number falls in the week's range.