Cellwise Start free

Excel guide · 4 min read

How to create a habit tracker in Excel

Quick answerPut your habits in column A and the dates of the month across row 1, then type x on each day you did one. =COUNTIF(B2:AE2,"x") counts the days done, and dividing by the days so far, =COUNTIF(B2:AE2,"x")/COUNTIF(B1:AE1,"<="&TODAY()), gives an honest percentage that doesn't punish you for days that haven't happened yet.

Sample data

Every result on this page was calculated from this sheet by the same spreadsheet engine the Cellwise app uses.

ABCDEFGHIJKL
1HabitNov 1, 2026Nov 2, 2026Nov 3, 2026Nov 4, 2026Nov 5, 2026Nov 6, 2026Nov 7, 2026Nov 8, 2026Nov 9, 2026Nov 10, 2026Nov 11, 2026
2Walk 20 minxxxxxxxxx
3Read 10 pagesxxxxxxxxxx
4No phone in bedxxxxx
5Drink 2L waterxxxxxxxxxxx
6Stretchxxxxxx
7
8As ofNov 14, 2026

Download this sheet as an Excel practice file (.xlsx)

Step 1: Habits down, dates across

You want to walk, read, keep your phone out of bed, drink water and stretch. Five habits, one row each, in A2:A6. Across row 1, put real dates: type Nov 1 in B1, =B1+1 in C1, and fill right to the end of the month. Format them with the custom format d so each column shows just the day number, and make the columns narrow.

This sample shows the first two weeks (B1:O1) with the as-of date in B8. In your own tracker, put =TODAY() in B8 and fill the dates to the end of the month in column AE.

Real dates matter. They let the formulas below count only the days so far, total by week and shade weekends. A header of typed numbers 1 to 30 can't do any of that.

Step 2: Count the days done, and the % so far

COUNTIF counts the x marks in a row. Walk 20 min has 11. COUNTIF ignores capitals, so an X counts the same as an x. A tick symbol, a y or a 1 does not, so pick one mark and stick with it.

The % needs the right bottom number. Dividing by 30 on the 14th makes every habit look like a failure: 11 of 30 is 37%. Divide by the days so far instead. COUNTIF(B$1:O$1,"<="&$B$8) counts the date columns up to the as-of date, 14 here, so Walk is at 78.6%.

For the whole grid, divide all the marks by habits x days: =COUNTIF(B2:O6,"x")/(ROWS(A2:A6)*COUNTIF(B1:O1,"<="&B8)) gives 53 of 70, or 75.7%.

=COUNTIFS(B2:O2,"x",B$1:O$1,"<="&$B$8)/COUNTIF(B$1:O$1,"<="&$B$8)

Result: 0.78571428571 shows as 79% with Percent format

About 0.786: Walk 20 min done on 11 of the 14 days so far.

Step 3: A current streak that waits for today

The usual streak formula finds the last day you missed and counts the days since. The catch: in the morning you haven't ticked today yet, so every streak shows 0 until you do. Walk 20 min has an x on each of the last four days but a blank today, Nov 14.

This version counts through yesterday, then adds 1 only if today already has an x. FILTER finds the missed days before today, MAX picks the latest, and DAYS counts from there to yesterday. If you've never missed, FILTER falls back to the day before the month started, so Drink 2L water shows 14.

Stretch has ticks on Nov 13 and 14, so it shows 2. For your best run of the month, see the longest-streak guide. FILTER needs Excel 365 or 2021.

=DAYS($B$8-1,MAX(FILTER(B$1:O$1,(B2:O2<>"x")*(B$1:O$1<$B$8),B$1-1)))+(INDEX(B2:O2,MATCH($B$8,B$1:O$1,0))="x")

Result: 4

4: Walk 20 min was done on Nov 10 to 13, and today (Nov 14) isn't ticked yet, so the streak is still alive.

Step 4: Weekly totals and the best day

COUNTIFS with a date window totals one week. For the week of Mon Nov 2 to Sun Nov 8, Walk 20 min was done 6 times and Stretch 3 times. Put each week's Monday in a header and the formula fills across.

Totals down a column show your strongest days: =COUNTIF(B2:B6,"x") gives 3 habits on Nov 1, and Nov 7 had 4. A day with low totals every week is worth a look: maybe that's the evening you're always out.

=COUNTIFS(B2:O2,"x",B$1:O$1,">="&DATE(2026,11,2),B$1:O$1,"<"&DATE(2026,11,9))

Result: 6

6: Walk 20 min was done on 6 of the 7 days in the week starting Nov 2.

Step 5: Checkboxes and color

In Excel for Microsoft 365, you can use real checkboxes instead of x. Select the grid and go to Insert > Checkbox. Each cell then holds TRUE when ticked and FALSE when not, so the count becomes =COUNTIF(B2:AE2,TRUE). Press the spacebar to tick the selected cell.

Color makes the grid satisfying to fill in. Select B2:AE6 and add a rule with Home > Conditional Formatting > New Rule > Use a formula: =B2="x" with a green fill (or =B2=TRUE for checkboxes). Add =WEEKDAY(B$1,2)>5 with a light gray fill to mark weekends.

  1. Select B2:AE6.
  2. Home > Conditional Formatting > New Rule > Use a formula to determine which cells to format.
  3. Enter =B2="x", click Format, choose a green fill and click OK.
  4. For a quick visual of the month, add a column with =REPT("■",COUNTIF(B2:AE2,"x")) to draw a bar of squares.

Common mistakes

Dividing by the days in the month

On the 14th, 30 as the bottom number makes every habit look half done. Divide by COUNTIF(dates,"<="&TODAY()).

Mixing marks like x, ✓ and y

COUNTIF only counts the one you ask for. Use one mark, or switch to checkboxes or a drop-down with Data Validation.

Streak shows 0 every morning

A blank for today breaks the simple streak. Count through yesterday and add 1 if today is ticked, as in Step 3.

Typing day numbers instead of dates

1 to 30 in the header can't be compared with TODAY(). Use real dates and format them as d.

FAQ

Is there a habit tracker template in Excel?

File > New and a search for "habit tracker" shows a few. Building your own takes ten minutes with this layout, and you know exactly how each number is worked out.

How do I make a new month in my habit tracker?

Copy the sheet (right-click the tab > Move or Copy > Create a copy), change B1 to the first of the new month and clear the marks. The dates and formulas update on their own.

How do I track a habit I only do on weekdays?

Divide by the weekdays so far instead: =COUNTIF(B2:AE2,"x")/NETWORKDAYS(B1,TODAY()). NETWORKDAYS counts Monday to Friday between two dates.

Can I track habits that have a number, like pages read?

Yes. Type the number instead of an x, then use SUM for the total, COUNTIF(range,">=10") for the days you hit 10, and AVERAGE for the daily average.

Functions used

Related guides

Updated