Countdowns, clock faces, and loading animations inside a cell.

12-hour clock dots

Filled dots show the current hour on a 12-hour clock. Empty dots fill the rest. Updates whenever NOW() changes.

=REPT("●",HOUR(NOW()))&REPT("○",12-HOUR(NOW()))

●●●●●●○○○○○○

Loading dots

Animates with NOW(). No input needed; recalculates on refresh.

=REPT("●",MOD(NOW()*86400,4))&REPT("○",4-MOD(NOW()*86400,4))

●●○○

Today's Moon Phase

Shows today's moon phase emoji from the ~29.53-day lunar cycle. No input needed; updates daily from TODAY().

=IFS(MOD(TODAY()-DATE(2023,1,21),29.53059)<1.84566,"🌑",MOD(TODAY()-DATE(2023,1,21),29.53059)<5.53699,"🌒",MOD(TODAY()-DATE(2023,1,21),29.53059)<9.22831,"🌓",MOD(TODAY()-DATE(2023,1,21),29.53059)<12.91963,"🌔",MOD(TODAY()-DATE(2023,1,21),29.53059)<16.61096,"🌕",MOD(TODAY()-DATE(2023,1,21),29.53059)<20.30228,"🌖",MOD(TODAY()-DATE(2023,1,21),29.53059)<23.99361,"🌗",MOD(TODAY()-DATE(2023,1,21),29.53059)<27.68493,"🌘",TRUE,"🌑")

🌓

Hour Progress live block bar

Live hour progress from NOW(). Ten segments fill through the hour. Updates whenever NOW() changes.

=REPT("█",MIN(10,MAX(0,ROUND(MOD(NOW()*24,1)*10,0))))&REPT("░",MAX(0,10-MIN(10,MAX(0,ROUND(MOD(NOW()*24,1)*10,0)))))

█████░░░░░

Day Progress live twenty-four hour block bar

Live day progress. Twenty-four blocks mark hours through the current day. Updates whenever NOW() changes.

=REPT("█",MIN(24,MAX(0,ROUND(MOD(NOW(),1)*24,0))))&REPT("░",MAX(0,24-MIN(24,MAX(0,ROUND(MOD(NOW(),1)*24,0)))))

██████░░░░░░░░░░░░░░░░░░

Week Progress live weekday block bar

Live week progress. Seven blocks mark days through the current week. Sunday start. Updates daily.

=REPT("█",MIN(7,MAX(0,ROUND((WEEKDAY(TODAY())-1)/6*7,0))))&REPT("░",MAX(0,7-MIN(7,MAX(0,ROUND((WEEKDAY(TODAY())-1)/6*7,0)))))

████░░░

24-hour clock dots

Filled dots show the current hour on a 24-hour clock. Empty dots fill the rest. Updates whenever NOW() changes.

=REPT("●",HOUR(NOW()))&REPT("○",24-HOUR(NOW()))

●●●●●●●●●●●●●●○○○○○○○○○○

Hour hand arrow

Arrow points like a clock hour hand. Twelve directions from NOW(). Updates whenever the sheet recalculates.

=CHOOSE(MOD(HOUR(NOW()),12)+1,"↑","↗","↗","→","↘","↘","↓","↙","↙","←","↖","↖")

↗

Minute hand arrow

Arrow sweeps like a minute hand. One tick every five minutes from MINUTE(NOW()).

=CHOOSE(MOD(QUOTIENT(MINUTE(NOW()),5),12)+1,"↑","↗","↗","→","↘","↘","↓","↙","↙","←","↖","↖")

→

Second hand spinner

Arrow spins through eight compass directions each second. Driven by NOW().

=CHOOSE(MOD(NOW()*86400,8)+1,"↑","↗","→","↘","↓","↙","←","↖")

↘

Clock hands as arrows

Hour and minute hands as arrows around a center dot. Both update from NOW().

=CHOOSE(MOD(HOUR(NOW()),12)+1,"↑","↗","↗","→","↘","↘","↓","↙","↙","←","↖","↖")&"◎"&CHOOSE(MOD(QUOTIENT(MINUTE(NOW()),5),12)+1,"↑","↗","↗","→","↘","↘","↓","↙","↙","←","↖","↖")

↗◎→

Clock face emoji

Shows the matching clock-face emoji for the current hour. Updates from HOUR(NOW()).

=CHOOSE(IF(MOD(HOUR(NOW()),12)=0,12,MOD(HOUR(NOW()),12)),"🕐","🕑","🕒","🕓","🕔","🕕","🕖","🕗","🕘","🕙","🕚","🕛")

🕗

Live time display

Shows the current time as text. No input needed; updates whenever NOW() changes.

=TEXT(NOW(),"h:mm AM/PM")

8:00 AM

Spinning refresh arrow

Arrow rotates ↑ → ↓ ← with NOW(). Good for a live refresh indicator.

=CHOOSE(MOD(NOW()*86400,4)+1,"↑","→","↓","←")

→

Counterclockwise spinning arrow

Arrow spins the other way through eight directions. Driven by NOW().

=CHOOSE(MOD(NOW()*86400,8)+1,"↑","↖","←","↙","↓","↘","→","↗")

↙

Second hand radar sweep

Arrow marks the current second on a 60-dot dial. Sweeps with SECOND(NOW()).

=REPT("·",SECOND(NOW()))&"↑"&REPT("·",59-SECOND(NOW()))

······························↑·····························

Hour position on dial

One arrow marks the current hour on a 12-tick dial. Empty ticks fill the rest.

=REPT("·",MOD(HOUR(NOW()),12))&"↑"&REPT("·",11-MOD(HOUR(NOW()),12))

·······↑····

Minute progress blocks

Twelve blocks show minutes elapsed this hour. One block per five minutes from NOW().

=REPT("█",QUOTIENT(MINUTE(NOW()),5))&REPT("░",12-QUOTIENT(MINUTE(NOW()),5))

██████░░░░░░

Live hourglass flip

Hourglass flips every second with NOW(). No input needed.

=IF(MOD(NOW()*86400,2)=0,CHAR(9203),CHAR(8987))

⏳

Second countdown pulse

Filled dots count down within each 10-second window. Animates with NOW().

=REPT("●",MOD(60-SECOND(NOW()),10)+1)&REPT("○",10-MOD(60-SECOND(NOW()),10)-1)

●●●●●○○○○○

AM or PM indicator

Shows sun for morning and moon for evening based on the current hour.

=IF(HOUR(NOW())<12,"☀️ AM","🌙 PM")

☀️ AM

Time of day emoji

Shows an emoji for the current hour: night, dawn, morning, afternoon, sunset, or evening. Updates from NOW(). No input needed.

=SWITCH(TRUE,HOUR(NOW())<5,"🌙",HOUR(NOW())<8,"🌅",HOUR(NOW())<12,"☀️",HOUR(NOW())<17,"🌤️",HOUR(NOW())<20,"🌇","🌃")

🌤️

Time of day color dots

Shows a colored circle for the current hour: black at night, orange at sunrise, yellow during the day, red at sunset. Updates from NOW(). No input needed.

=SWITCH(TRUE,HOUR(NOW())<5,"⚫",HOUR(NOW())<8,"🟠",HOUR(NOW())<17,"🟡",HOUR(NOW())<20,"🔴","⚫")

🟡

Time of day routine

Shows an emoji for what people usually do now: bed at night, coffee in the morning, lunch at midday, work, dinner, TV, then bed again. Updates from NOW(). No input needed.

=SWITCH(TRUE,HOUR(NOW())<5,"🛏️",HOUR(NOW())<9,"☕",HOUR(NOW())<12,"💻",HOUR(NOW())<14,"🍔",HOUR(NOW())<17,"💻",HOUR(NOW())<20,"🍽️",HOUR(NOW())<22,"📺","🛏️")

☕

Sun and moon (6 to 6)

Shows sun from 6 AM to 6 PM and moon the rest of the day. Updates from NOW(). No input needed.

=IF(AND(HOUR(NOW())>=6,HOUR(NOW())<18),"☀️","🌙")

☀️

Weekday name from NOW

Shows today as a weekday name. Updates whenever the sheet recalculates.

=TEXT(NOW(),"dddd")

Friday

Year Progress live block bar

Live year progress from TODAY(). Ten blocks fill as the calendar year advances. Updates daily. No input needed.

=REPT("█",MIN(10,MAX(0,ROUND((TODAY()-DATE(YEAR(TODAY()),1,1))/(DATE(YEAR(TODAY()),12,31)-DATE(YEAR(TODAY()),1,1))*10,0))))&REPT("░",MAX(0,10-MIN(10,MAX(0,ROUND((TODAY()-DATE(YEAR(TODAY()),1,1))/(DATE(YEAR(TODAY()),12,31)-DATE(YEAR(TODAY()),1,1))*10,0)))))

█████░░░░░

Year Progress live block bar with percent

Live year progress from TODAY() as a block bar plus a rounded percent. Updates daily. No input needed.

=REPT("█",MIN(10,MAX(0,ROUND((TODAY()-DATE(YEAR(TODAY()),1,1))/(DATE(YEAR(TODAY()),12,31)-DATE(YEAR(TODAY()),1,1))*10,0))))&REPT("░",MAX(0,10-MIN(10,MAX(0,ROUND((TODAY()-DATE(YEAR(TODAY()),1,1))/(DATE(YEAR(TODAY()),12,31)-DATE(YEAR(TODAY()),1,1))*10,0)))))&" "&ROUND((TODAY()-DATE(YEAR(TODAY()),1,1))/(DATE(YEAR(TODAY()),12,31)-DATE(YEAR(TODAY()),1,1))*100,0)&"%"

█████░░░░░ 53%

Year Progress live dark shade bar

Live year progress from TODAY() as dark shaded blocks. Ten segments track the year. No input needed.

=REPT(CHAR(9619),MIN(10,MAX(0,ROUND((TODAY()-DATE(YEAR(TODAY()),1,1))/(DATE(YEAR(TODAY()),12,31)-DATE(YEAR(TODAY()),1,1))*10,0))))&REPT(CHAR(9617),MAX(0,10-MIN(10,MAX(0,ROUND((TODAY()-DATE(YEAR(TODAY()),1,1))/(DATE(YEAR(TODAY()),12,31)-DATE(YEAR(TODAY()),1,1))*10,0)))))

▓▓▓▓▓░░░░░

Year Progress live dark shade bar with percent

Live year progress from TODAY() as a dark shade bar plus a percent label. Updates daily. No input needed.

=REPT(CHAR(9619),MIN(10,MAX(0,ROUND((TODAY()-DATE(YEAR(TODAY()),1,1))/(DATE(YEAR(TODAY()),12,31)-DATE(YEAR(TODAY()),1,1))*10,0))))&REPT(CHAR(9617),MAX(0,10-MIN(10,MAX(0,ROUND((TODAY()-DATE(YEAR(TODAY()),1,1))/(DATE(YEAR(TODAY()),12,31)-DATE(YEAR(TODAY()),1,1))*10,0)))))&" "&ROUND((TODAY()-DATE(YEAR(TODAY()),1,1))/(DATE(YEAR(TODAY()),12,31)-DATE(YEAR(TODAY()),1,1))*100,0)&"%"

▓▓▓▓▓░░░░░ 53%

Year Progress live dot checkpoint bar

Live year progress from TODAY() as filled and empty dots. Ten checkpoints through the year. No input needed.

=REPT("●",MIN(10,MAX(0,ROUND((TODAY()-DATE(YEAR(TODAY()),1,1))/(DATE(YEAR(TODAY()),12,31)-DATE(YEAR(TODAY()),1,1))*10,0))))&REPT("○",MAX(0,10-MIN(10,MAX(0,ROUND((TODAY()-DATE(YEAR(TODAY()),1,1))/(DATE(YEAR(TODAY()),12,31)-DATE(YEAR(TODAY()),1,1))*10,0)))))

●●●●●○○○○○

Year Progress live dot checkpoint bar with percent

Live year progress from TODAY() as dot checkpoints plus a percent label. Updates daily. No input needed.

=REPT("●",MIN(10,MAX(0,ROUND((TODAY()-DATE(YEAR(TODAY()),1,1))/(DATE(YEAR(TODAY()),12,31)-DATE(YEAR(TODAY()),1,1))*10,0))))&REPT("○",MAX(0,10-MIN(10,MAX(0,ROUND((TODAY()-DATE(YEAR(TODAY()),1,1))/(DATE(YEAR(TODAY()),12,31)-DATE(YEAR(TODAY()),1,1))*10,0)))))&" "&ROUND((TODAY()-DATE(YEAR(TODAY()),1,1))/(DATE(YEAR(TODAY()),12,31)-DATE(YEAR(TODAY()),1,1))*100,0)&"%"

●●●●●○○○○○ 53%

Year Progress live green circle bar

Live year progress from TODAY() as green and white circles. Ten circles fill through the year. No input needed.

=REPT("🟢",MIN(10,MAX(0,ROUND((TODAY()-DATE(YEAR(TODAY()),1,1))/(DATE(YEAR(TODAY()),12,31)-DATE(YEAR(TODAY()),1,1))*10,0))))&REPT("⚪",MAX(0,10-MIN(10,MAX(0,ROUND((TODAY()-DATE(YEAR(TODAY()),1,1))/(DATE(YEAR(TODAY()),12,31)-DATE(YEAR(TODAY()),1,1))*10,0)))))

🟢🟢🟢🟢🟢⚪⚪⚪⚪⚪

Year Progress live green circle bar with percent

Live year progress from TODAY() as green circles plus a percent label. Updates daily. No input needed.

=REPT("🟢",MIN(10,MAX(0,ROUND((TODAY()-DATE(YEAR(TODAY()),1,1))/(DATE(YEAR(TODAY()),12,31)-DATE(YEAR(TODAY()),1,1))*10,0))))&REPT("⚪",MAX(0,10-MIN(10,MAX(0,ROUND((TODAY()-DATE(YEAR(TODAY()),1,1))/(DATE(YEAR(TODAY()),12,31)-DATE(YEAR(TODAY()),1,1))*10,0)))))&" "&ROUND((TODAY()-DATE(YEAR(TODAY()),1,1))/(DATE(YEAR(TODAY()),12,31)-DATE(YEAR(TODAY()),1,1))*100,0)&"%"

🟢🟢🟢🟢🟢⚪⚪⚪⚪⚪ 53%

Year Progress live month block bar

Live year progress from TODAY() as twelve month blocks. One block per month of the year. No input needed.

=REPT("█",MIN(12,MAX(0,ROUND((TODAY()-DATE(YEAR(TODAY()),1,1))/(DATE(YEAR(TODAY()),12,31)-DATE(YEAR(TODAY()),1,1))*12,0))))&REPT("░",MAX(0,12-MIN(12,MAX(0,ROUND((TODAY()-DATE(YEAR(TODAY()),1,1))/(DATE(YEAR(TODAY()),12,31)-DATE(YEAR(TODAY()),1,1))*12,0)))))

██████░░░░░░

Year Progress live month block bar with percent

Live year progress from TODAY() as twelve month blocks plus a percent label. Updates daily. No input needed.

=REPT("█",MIN(12,MAX(0,ROUND((TODAY()-DATE(YEAR(TODAY()),1,1))/(DATE(YEAR(TODAY()),12,31)-DATE(YEAR(TODAY()),1,1))*12,0))))&REPT("░",MAX(0,12-MIN(12,MAX(0,ROUND((TODAY()-DATE(YEAR(TODAY()),1,1))/(DATE(YEAR(TODAY()),12,31)-DATE(YEAR(TODAY()),1,1))*12,0)))))&" "&ROUND((TODAY()-DATE(YEAR(TODAY()),1,1))/(DATE(YEAR(TODAY()),12,31)-DATE(YEAR(TODAY()),1,1))*100,0)&"%"

██████░░░░░░ 53%

Year Progress live block bar with day count

Live year progress from TODAY() as a block bar plus percent and day-of-year count. Updates daily. No input needed.

=REPT("█",MIN(10,MAX(0,ROUND((TODAY()-DATE(YEAR(TODAY()),1,1))/(DATE(YEAR(TODAY()),12,31)-DATE(YEAR(TODAY()),1,1))*10,0))))&REPT("░",MAX(0,10-MIN(10,MAX(0,ROUND((TODAY()-DATE(YEAR(TODAY()),1,1))/(DATE(YEAR(TODAY()),12,31)-DATE(YEAR(TODAY()),1,1))*10,0)))))&" "&ROUND((TODAY()-DATE(YEAR(TODAY()),1,1))/(DATE(YEAR(TODAY()),12,31)-DATE(YEAR(TODAY()),1,1))*100,0)&"% (day "&TODAY()-DATE(YEAR(TODAY()),1,1)+1&")"

█████░░░░░ 53% (day 195)

Hour Progress live block bar with percent

Live hour progress from NOW(). Ten segments fill through the hour. Updates whenever NOW() changes.

=REPT("█",MIN(10,MAX(0,ROUND(MOD(NOW()*24,1)*10,0))))&REPT("░",MAX(0,10-MIN(10,MAX(0,ROUND(MOD(NOW()*24,1)*10,0)))))&" "&ROUND(MOD(NOW()*24,1)*100,0)&"%"

█████░░░░░ 47%

Hour Progress live dark shade bar

Live hour progress from NOW(). Ten segments fill through the hour. Updates whenever NOW() changes.

=REPT(CHAR(9619),MIN(10,MAX(0,ROUND(MOD(NOW()*24,1)*10,0))))&REPT(CHAR(9617),MAX(0,10-MIN(10,MAX(0,ROUND(MOD(NOW()*24,1)*10,0)))))

▓▓▓▓▓░░░░░

Hour Progress live dark shade bar with percent

Live hour progress from NOW(). Ten segments fill through the hour. Updates whenever NOW() changes.

=REPT(CHAR(9619),MIN(10,MAX(0,ROUND(MOD(NOW()*24,1)*10,0))))&REPT(CHAR(9617),MAX(0,10-MIN(10,MAX(0,ROUND(MOD(NOW()*24,1)*10,0)))))&" "&ROUND(MOD(NOW()*24,1)*100,0)&"%"

▓▓▓▓▓░░░░░ 47%

Hour Progress live dot checkpoint bar

Live hour progress from NOW(). Ten segments fill through the hour. Updates whenever NOW() changes.

=REPT("●",MIN(10,MAX(0,ROUND(MOD(NOW()*24,1)*10,0))))&REPT("○",MAX(0,10-MIN(10,MAX(0,ROUND(MOD(NOW()*24,1)*10,0)))))

●●●●●○○○○○

Hour Progress live dot checkpoint bar with percent

Live hour progress from NOW(). Ten segments fill through the hour. Updates whenever NOW() changes.

=REPT("●",MIN(10,MAX(0,ROUND(MOD(NOW()*24,1)*10,0))))&REPT("○",MAX(0,10-MIN(10,MAX(0,ROUND(MOD(NOW()*24,1)*10,0)))))&" "&ROUND(MOD(NOW()*24,1)*100,0)&"%"

●●●●●○○○○○ 47%

Hour Progress live green circle bar

Live hour progress from NOW(). Ten segments fill through the hour. Updates whenever NOW() changes.

=REPT("🟢",MIN(10,MAX(0,ROUND(MOD(NOW()*24,1)*10,0))))&REPT("⚪",MAX(0,10-MIN(10,MAX(0,ROUND(MOD(NOW()*24,1)*10,0)))))

🟢🟢🟢🟢🟢⚪⚪⚪⚪⚪

Hour Progress live green circle bar with percent

Live hour progress from NOW(). Ten segments fill through the hour. Updates whenever NOW() changes.

=REPT("🟢",MIN(10,MAX(0,ROUND(MOD(NOW()*24,1)*10,0))))&REPT("⚪",MAX(0,10-MIN(10,MAX(0,ROUND(MOD(NOW()*24,1)*10,0)))))&" "&ROUND(MOD(NOW()*24,1)*100,0)&"%"

🟢🟢🟢🟢🟢⚪⚪⚪⚪⚪ 47%

Hour Progress live twelve segment bar

Live hour progress. Twelve segments track progress through the current hour. Updates whenever NOW() changes.

=REPT("█",MIN(12,MAX(0,ROUND(MOD(NOW()*24,1)*12,0))))&REPT("░",MAX(0,12-MIN(12,MAX(0,ROUND(MOD(NOW()*24,1)*12,0)))))

██████░░░░░░

Hour Progress live twelve segment bar with percent

Live hour progress plus percent. Twelve segments track progress through the current hour. Updates whenever NOW() changes.

=REPT("█",MIN(12,MAX(0,ROUND(MOD(NOW()*24,1)*12,0))))&REPT("░",MAX(0,12-MIN(12,MAX(0,ROUND(MOD(NOW()*24,1)*12,0)))))&" "&ROUND(MOD(NOW()*24,1)*100,0)&"%"

██████░░░░░░ 47%

Day Progress live block bar

Live day progress from NOW(). Ten segments fill through the day. Updates whenever NOW() changes.

=REPT("█",MIN(10,MAX(0,ROUND(MOD(NOW(),1)*10,0))))&REPT("░",MAX(0,10-MIN(10,MAX(0,ROUND(MOD(NOW(),1)*10,0)))))

███░░░░░░░

Day Progress live block bar with percent

Live day progress from NOW(). Ten segments fill through the day. Updates whenever NOW() changes.

=REPT("█",MIN(10,MAX(0,ROUND(MOD(NOW(),1)*10,0))))&REPT("░",MAX(0,10-MIN(10,MAX(0,ROUND(MOD(NOW(),1)*10,0)))))&" "&ROUND(MOD(NOW(),1)*100,0)&"%"

███░░░░░░░ 27%

Day Progress live dark shade bar

Live day progress from NOW(). Ten segments fill through the day. Updates whenever NOW() changes.

=REPT(CHAR(9619),MIN(10,MAX(0,ROUND(MOD(NOW(),1)*10,0))))&REPT(CHAR(9617),MAX(0,10-MIN(10,MAX(0,ROUND(MOD(NOW(),1)*10,0)))))

▓▓▓░░░░░░░

Day Progress live dark shade bar with percent

Live day progress from NOW(). Ten segments fill through the day. Updates whenever NOW() changes.

=REPT(CHAR(9619),MIN(10,MAX(0,ROUND(MOD(NOW(),1)*10,0))))&REPT(CHAR(9617),MAX(0,10-MIN(10,MAX(0,ROUND(MOD(NOW(),1)*10,0)))))&" "&ROUND(MOD(NOW(),1)*100,0)&"%"

▓▓▓░░░░░░░ 27%

Day Progress live dot checkpoint bar

Live day progress from NOW(). Ten segments fill through the day. Updates whenever NOW() changes.

=REPT("●",MIN(10,MAX(0,ROUND(MOD(NOW(),1)*10,0))))&REPT("○",MAX(0,10-MIN(10,MAX(0,ROUND(MOD(NOW(),1)*10,0)))))

●●●○○○○○○○

Day Progress live dot checkpoint bar with percent

Live day progress from NOW(). Ten segments fill through the day. Updates whenever NOW() changes.

=REPT("●",MIN(10,MAX(0,ROUND(MOD(NOW(),1)*10,0))))&REPT("○",MAX(0,10-MIN(10,MAX(0,ROUND(MOD(NOW(),1)*10,0)))))&" "&ROUND(MOD(NOW(),1)*100,0)&"%"

●●●○○○○○○○ 27%

Day Progress live green circle bar

Live day progress from NOW(). Ten segments fill through the day. Updates whenever NOW() changes.

=REPT("🟢",MIN(10,MAX(0,ROUND(MOD(NOW(),1)*10,0))))&REPT("⚪",MAX(0,10-MIN(10,MAX(0,ROUND(MOD(NOW(),1)*10,0)))))

🟢🟢🟢⚪⚪⚪⚪⚪⚪⚪

Day Progress live green circle bar with percent

Live day progress from NOW(). Ten segments fill through the day. Updates whenever NOW() changes.

=REPT("🟢",MIN(10,MAX(0,ROUND(MOD(NOW(),1)*10,0))))&REPT("⚪",MAX(0,10-MIN(10,MAX(0,ROUND(MOD(NOW(),1)*10,0)))))&" "&ROUND(MOD(NOW(),1)*100,0)&"%"

🟢🟢🟢⚪⚪⚪⚪⚪⚪⚪ 27%

Day Progress live twenty-four hour block bar with percent

Live day progress plus percent. Twenty-four blocks mark hours through the current day. Updates whenever NOW() changes.

=REPT("█",MIN(24,MAX(0,ROUND(MOD(NOW(),1)*24,0))))&REPT("░",MAX(0,24-MIN(24,MAX(0,ROUND(MOD(NOW(),1)*24,0)))))&" "&ROUND(MOD(NOW(),1)*100,0)&"%"

██████░░░░░░░░░░░░░░░░░░ 27%

Week Progress live block bar

Live week progress from TODAY(). Ten segments fill through the week. Updates daily. No input needed.

=REPT("█",MIN(10,MAX(0,ROUND((WEEKDAY(TODAY())-1)/6*10,0))))&REPT("░",MAX(0,10-MIN(10,MAX(0,ROUND((WEEKDAY(TODAY())-1)/6*10,0)))))

█████░░░░░

Week Progress live block bar with percent

Live week progress from TODAY(). Ten segments fill through the week. Updates daily. No input needed.

=REPT("█",MIN(10,MAX(0,ROUND((WEEKDAY(TODAY())-1)/6*10,0))))&REPT("░",MAX(0,10-MIN(10,MAX(0,ROUND((WEEKDAY(TODAY())-1)/6*10,0)))))&" "&ROUND((WEEKDAY(TODAY())-1)/6*100,0)&"%"

█████░░░░░ 50%

Week Progress live dark shade bar

Live week progress from TODAY(). Ten segments fill through the week. Updates daily. No input needed.

=REPT(CHAR(9619),MIN(10,MAX(0,ROUND((WEEKDAY(TODAY())-1)/6*10,0))))&REPT(CHAR(9617),MAX(0,10-MIN(10,MAX(0,ROUND((WEEKDAY(TODAY())-1)/6*10,0)))))

▓▓▓▓▓░░░░░

Week Progress live dark shade bar with percent

Live week progress from TODAY(). Ten segments fill through the week. Updates daily. No input needed.

=REPT(CHAR(9619),MIN(10,MAX(0,ROUND((WEEKDAY(TODAY())-1)/6*10,0))))&REPT(CHAR(9617),MAX(0,10-MIN(10,MAX(0,ROUND((WEEKDAY(TODAY())-1)/6*10,0)))))&" "&ROUND((WEEKDAY(TODAY())-1)/6*100,0)&"%"

▓▓▓▓▓░░░░░ 50%

Week Progress live dot checkpoint bar

Live week progress from TODAY(). Ten segments fill through the week. Updates daily. No input needed.

=REPT("●",MIN(10,MAX(0,ROUND((WEEKDAY(TODAY())-1)/6*10,0))))&REPT("○",MAX(0,10-MIN(10,MAX(0,ROUND((WEEKDAY(TODAY())-1)/6*10,0)))))

●●●●●○○○○○

Week Progress live dot checkpoint bar with percent

Live week progress from TODAY(). Ten segments fill through the week. Updates daily. No input needed.

=REPT("●",MIN(10,MAX(0,ROUND((WEEKDAY(TODAY())-1)/6*10,0))))&REPT("○",MAX(0,10-MIN(10,MAX(0,ROUND((WEEKDAY(TODAY())-1)/6*10,0)))))&" "&ROUND((WEEKDAY(TODAY())-1)/6*100,0)&"%"

●●●●●○○○○○ 50%

Week Progress live green circle bar

Live week progress from TODAY(). Ten segments fill through the week. Updates daily. No input needed.

=REPT("🟢",MIN(10,MAX(0,ROUND((WEEKDAY(TODAY())-1)/6*10,0))))&REPT("⚪",MAX(0,10-MIN(10,MAX(0,ROUND((WEEKDAY(TODAY())-1)/6*10,0)))))

🟢🟢🟢🟢🟢⚪⚪⚪⚪⚪

Week Progress live green circle bar with percent

Live week progress from TODAY(). Ten segments fill through the week. Updates daily. No input needed.

=REPT("🟢",MIN(10,MAX(0,ROUND((WEEKDAY(TODAY())-1)/6*10,0))))&REPT("⚪",MAX(0,10-MIN(10,MAX(0,ROUND((WEEKDAY(TODAY())-1)/6*10,0)))))&" "&ROUND((WEEKDAY(TODAY())-1)/6*100,0)&"%"

🟢🟢🟢🟢🟢⚪⚪⚪⚪⚪ 50%

Week Progress live weekday block bar with percent

Live week progress plus percent. Seven blocks mark days through the current week. Sunday start. Updates daily.

=REPT("█",MIN(7,MAX(0,ROUND((WEEKDAY(TODAY())-1)/6*7,0))))&REPT("░",MAX(0,7-MIN(7,MAX(0,ROUND((WEEKDAY(TODAY())-1)/6*7,0)))))&" "&ROUND((WEEKDAY(TODAY())-1)/6*100,0)&"%"

████░░░ 50%

Month Progress live block bar

Live month progress from TODAY(). Ten segments fill through the month. Updates daily. No input needed.

=REPT("█",MIN(10,MAX(0,ROUND((TODAY()-DATE(YEAR(TODAY()),MONTH(TODAY()),1))/(EOMONTH(TODAY(),0)-DATE(YEAR(TODAY()),MONTH(TODAY()),1))*10,0))))&REPT("░",MAX(0,10-MIN(10,MAX(0,ROUND((TODAY()-DATE(YEAR(TODAY()),MONTH(TODAY()),1))/(EOMONTH(TODAY(),0)-DATE(YEAR(TODAY()),MONTH(TODAY()),1))*10,0)))))

█████░░░░░

Month Progress live block bar with percent

Live month progress from TODAY(). Ten segments fill through the month. Updates daily. No input needed.

=REPT("█",MIN(10,MAX(0,ROUND((TODAY()-DATE(YEAR(TODAY()),MONTH(TODAY()),1))/(EOMONTH(TODAY(),0)-DATE(YEAR(TODAY()),MONTH(TODAY()),1))*10,0))))&REPT("░",MAX(0,10-MIN(10,MAX(0,ROUND((TODAY()-DATE(YEAR(TODAY()),MONTH(TODAY()),1))/(EOMONTH(TODAY(),0)-DATE(YEAR(TODAY()),MONTH(TODAY()),1))*10,0)))))&" "&ROUND((TODAY()-DATE(YEAR(TODAY()),MONTH(TODAY()),1))/(EOMONTH(TODAY(),0)-DATE(YEAR(TODAY()),MONTH(TODAY()),1))*100,0)&"%"

█████░░░░░ 57%

Month Progress live dark shade bar

Live month progress from TODAY(). Ten segments fill through the month. Updates daily. No input needed.

=REPT(CHAR(9619),MIN(10,MAX(0,ROUND((TODAY()-DATE(YEAR(TODAY()),MONTH(TODAY()),1))/(EOMONTH(TODAY(),0)-DATE(YEAR(TODAY()),MONTH(TODAY()),1))*10,0))))&REPT(CHAR(9617),MAX(0,10-MIN(10,MAX(0,ROUND((TODAY()-DATE(YEAR(TODAY()),MONTH(TODAY()),1))/(EOMONTH(TODAY(),0)-DATE(YEAR(TODAY()),MONTH(TODAY()),1))*10,0)))))

▓▓▓▓▓░░░░░

Month Progress live dark shade bar with percent

Live month progress from TODAY(). Ten segments fill through the month. Updates daily. No input needed.

=REPT(CHAR(9619),MIN(10,MAX(0,ROUND((TODAY()-DATE(YEAR(TODAY()),MONTH(TODAY()),1))/(EOMONTH(TODAY(),0)-DATE(YEAR(TODAY()),MONTH(TODAY()),1))*10,0))))&REPT(CHAR(9617),MAX(0,10-MIN(10,MAX(0,ROUND((TODAY()-DATE(YEAR(TODAY()),MONTH(TODAY()),1))/(EOMONTH(TODAY(),0)-DATE(YEAR(TODAY()),MONTH(TODAY()),1))*10,0)))))&" "&ROUND((TODAY()-DATE(YEAR(TODAY()),MONTH(TODAY()),1))/(EOMONTH(TODAY(),0)-DATE(YEAR(TODAY()),MONTH(TODAY()),1))*100,0)&"%"

▓▓▓▓▓░░░░░ 57%

Month Progress live dot checkpoint bar

Live month progress from TODAY(). Ten segments fill through the month. Updates daily. No input needed.

=REPT("●",MIN(10,MAX(0,ROUND((TODAY()-DATE(YEAR(TODAY()),MONTH(TODAY()),1))/(EOMONTH(TODAY(),0)-DATE(YEAR(TODAY()),MONTH(TODAY()),1))*10,0))))&REPT("○",MAX(0,10-MIN(10,MAX(0,ROUND((TODAY()-DATE(YEAR(TODAY()),MONTH(TODAY()),1))/(EOMONTH(TODAY(),0)-DATE(YEAR(TODAY()),MONTH(TODAY()),1))*10,0)))))

●●●●●○○○○○

Month Progress live dot checkpoint bar with percent

Live month progress from TODAY(). Ten segments fill through the month. Updates daily. No input needed.

=REPT("●",MIN(10,MAX(0,ROUND((TODAY()-DATE(YEAR(TODAY()),MONTH(TODAY()),1))/(EOMONTH(TODAY(),0)-DATE(YEAR(TODAY()),MONTH(TODAY()),1))*10,0))))&REPT("○",MAX(0,10-MIN(10,MAX(0,ROUND((TODAY()-DATE(YEAR(TODAY()),MONTH(TODAY()),1))/(EOMONTH(TODAY(),0)-DATE(YEAR(TODAY()),MONTH(TODAY()),1))*10,0)))))&" "&ROUND((TODAY()-DATE(YEAR(TODAY()),MONTH(TODAY()),1))/(EOMONTH(TODAY(),0)-DATE(YEAR(TODAY()),MONTH(TODAY()),1))*100,0)&"%"

●●●●●○○○○○ 57%

Month Progress live green circle bar

Live month progress from TODAY(). Ten segments fill through the month. Updates daily. No input needed.

=REPT("🟢",MIN(10,MAX(0,ROUND((TODAY()-DATE(YEAR(TODAY()),MONTH(TODAY()),1))/(EOMONTH(TODAY(),0)-DATE(YEAR(TODAY()),MONTH(TODAY()),1))*10,0))))&REPT("⚪",MAX(0,10-MIN(10,MAX(0,ROUND((TODAY()-DATE(YEAR(TODAY()),MONTH(TODAY()),1))/(EOMONTH(TODAY(),0)-DATE(YEAR(TODAY()),MONTH(TODAY()),1))*10,0)))))

🟢🟢🟢🟢🟢⚪⚪⚪⚪⚪

Month Progress live green circle bar with percent

Live month progress from TODAY(). Ten segments fill through the month. Updates daily. No input needed.

=REPT("🟢",MIN(10,MAX(0,ROUND((TODAY()-DATE(YEAR(TODAY()),MONTH(TODAY()),1))/(EOMONTH(TODAY(),0)-DATE(YEAR(TODAY()),MONTH(TODAY()),1))*10,0))))&REPT("⚪",MAX(0,10-MIN(10,MAX(0,ROUND((TODAY()-DATE(YEAR(TODAY()),MONTH(TODAY()),1))/(EOMONTH(TODAY(),0)-DATE(YEAR(TODAY()),MONTH(TODAY()),1))*10,0)))))&" "&ROUND((TODAY()-DATE(YEAR(TODAY()),MONTH(TODAY()),1))/(EOMONTH(TODAY(),0)-DATE(YEAR(TODAY()),MONTH(TODAY()),1))*100,0)&"%"

🟢🟢🟢🟢🟢⚪⚪⚪⚪⚪ 57%

Month Progress live day block bar

Live month progress. One block per day of the month. Fills as the month advances. Updates daily.

=REPT("█",DAY(TODAY()))&REPT("░",DAY(EOMONTH(TODAY(),0))-DAY(TODAY()))

█████████████████░░░░░░░░░░░░░░

Month Progress live day block bar with percent

Live month progress plus percent. One block per day of the month. Fills as the month advances. Updates daily.

=REPT("█",DAY(TODAY()))&REPT("░",DAY(EOMONTH(TODAY(),0))-DAY(TODAY()))&" "&ROUND((TODAY()-DATE(YEAR(TODAY()),MONTH(TODAY()),1))/(EOMONTH(TODAY(),0)-DATE(YEAR(TODAY()),MONTH(TODAY()),1))*100,0)&"%"

█████████████████░░░░░░░░░░░░░░ 57%

Decade Progress live block bar

Live decade progress from TODAY(). Ten segments fill through the decade. Updates daily. No input needed.

=REPT("█",MIN(10,MAX(0,ROUND((TODAY()-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))/(DATE(ROUNDDOWN(YEAR(TODAY()),-1)+9,12,31)-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))*10,0))))&REPT("░",MAX(0,10-MIN(10,MAX(0,ROUND((TODAY()-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))/(DATE(ROUNDDOWN(YEAR(TODAY()),-1)+9,12,31)-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))*10,0)))))

██████░░░░

Decade Progress live block bar with percent

Live decade progress from TODAY(). Ten segments fill through the decade. Updates daily. No input needed.

=REPT("█",MIN(10,MAX(0,ROUND((TODAY()-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))/(DATE(ROUNDDOWN(YEAR(TODAY()),-1)+9,12,31)-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))*10,0))))&REPT("░",MAX(0,10-MIN(10,MAX(0,ROUND((TODAY()-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))/(DATE(ROUNDDOWN(YEAR(TODAY()),-1)+9,12,31)-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))*10,0)))))&" "&ROUND((TODAY()-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))/(DATE(ROUNDDOWN(YEAR(TODAY()),-1)+9,12,31)-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))*100,0)&"%"

██████░░░░ 65%

Decade Progress live dark shade bar

Live decade progress from TODAY(). Ten segments fill through the decade. Updates daily. No input needed.

=REPT(CHAR(9619),MIN(10,MAX(0,ROUND((TODAY()-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))/(DATE(ROUNDDOWN(YEAR(TODAY()),-1)+9,12,31)-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))*10,0))))&REPT(CHAR(9617),MAX(0,10-MIN(10,MAX(0,ROUND((TODAY()-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))/(DATE(ROUNDDOWN(YEAR(TODAY()),-1)+9,12,31)-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))*10,0)))))

▓▓▓▓▓▓░░░░

Decade Progress live dark shade bar with percent

Live decade progress from TODAY(). Ten segments fill through the decade. Updates daily. No input needed.

=REPT(CHAR(9619),MIN(10,MAX(0,ROUND((TODAY()-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))/(DATE(ROUNDDOWN(YEAR(TODAY()),-1)+9,12,31)-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))*10,0))))&REPT(CHAR(9617),MAX(0,10-MIN(10,MAX(0,ROUND((TODAY()-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))/(DATE(ROUNDDOWN(YEAR(TODAY()),-1)+9,12,31)-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))*10,0)))))&" "&ROUND((TODAY()-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))/(DATE(ROUNDDOWN(YEAR(TODAY()),-1)+9,12,31)-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))*100,0)&"%"

▓▓▓▓▓▓░░░░ 65%

Decade Progress live dot checkpoint bar

Live decade progress from TODAY(). Ten segments fill through the decade. Updates daily. No input needed.

=REPT("●",MIN(10,MAX(0,ROUND((TODAY()-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))/(DATE(ROUNDDOWN(YEAR(TODAY()),-1)+9,12,31)-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))*10,0))))&REPT("○",MAX(0,10-MIN(10,MAX(0,ROUND((TODAY()-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))/(DATE(ROUNDDOWN(YEAR(TODAY()),-1)+9,12,31)-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))*10,0)))))

●●●●●●○○○○

Decade Progress live dot checkpoint bar with percent

Live decade progress from TODAY(). Ten segments fill through the decade. Updates daily. No input needed.

=REPT("●",MIN(10,MAX(0,ROUND((TODAY()-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))/(DATE(ROUNDDOWN(YEAR(TODAY()),-1)+9,12,31)-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))*10,0))))&REPT("○",MAX(0,10-MIN(10,MAX(0,ROUND((TODAY()-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))/(DATE(ROUNDDOWN(YEAR(TODAY()),-1)+9,12,31)-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))*10,0)))))&" "&ROUND((TODAY()-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))/(DATE(ROUNDDOWN(YEAR(TODAY()),-1)+9,12,31)-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))*100,0)&"%"

●●●●●●○○○○ 65%

Decade Progress live green circle bar

Live decade progress from TODAY(). Ten segments fill through the decade. Updates daily. No input needed.

=REPT("🟢",MIN(10,MAX(0,ROUND((TODAY()-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))/(DATE(ROUNDDOWN(YEAR(TODAY()),-1)+9,12,31)-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))*10,0))))&REPT("⚪",MAX(0,10-MIN(10,MAX(0,ROUND((TODAY()-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))/(DATE(ROUNDDOWN(YEAR(TODAY()),-1)+9,12,31)-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))*10,0)))))

🟢🟢🟢🟢🟢🟢⚪⚪⚪⚪

Decade Progress live green circle bar with percent

Live decade progress from TODAY(). Ten segments fill through the decade. Updates daily. No input needed.

=REPT("🟢",MIN(10,MAX(0,ROUND((TODAY()-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))/(DATE(ROUNDDOWN(YEAR(TODAY()),-1)+9,12,31)-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))*10,0))))&REPT("⚪",MAX(0,10-MIN(10,MAX(0,ROUND((TODAY()-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))/(DATE(ROUNDDOWN(YEAR(TODAY()),-1)+9,12,31)-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))*10,0)))))&" "&ROUND((TODAY()-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))/(DATE(ROUNDDOWN(YEAR(TODAY()),-1)+9,12,31)-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))*100,0)&"%"

🟢🟢🟢🟢🟢🟢⚪⚪⚪⚪ 65%

Decade Progress live year block bar

Live decade progress. Ten blocks mark years through the current decade. One block per year. Updates daily.

=REPT("█",MIN(10,MAX(0,YEAR(TODAY())-ROUNDDOWN(YEAR(TODAY()),-1)+1)))&REPT("░",MAX(0,10-MIN(10,MAX(0,YEAR(TODAY())-ROUNDDOWN(YEAR(TODAY()),-1)+1))))

███████░░░

Decade Progress live year block bar with percent

Live decade progress plus percent. Ten blocks mark years through the current decade. One block per year. Updates daily.

=REPT("█",MIN(10,MAX(0,YEAR(TODAY())-ROUNDDOWN(YEAR(TODAY()),-1)+1)))&REPT("░",MAX(0,10-MIN(10,MAX(0,YEAR(TODAY())-ROUNDDOWN(YEAR(TODAY()),-1)+1))))&" "&ROUND((TODAY()-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))/(DATE(ROUNDDOWN(YEAR(TODAY()),-1)+9,12,31)-DATE(ROUNDDOWN(YEAR(TODAY()),-1),1,1))*100,0)&"%"

███████░░░ 65%

Hourglass flip

Even numbers show one hourglass, odd numbers the other.

=IF(MOD(A1,2)=0,CHAR(9203),CHAR(8987))

⏳

Alarm clock urgency

Put alarm count in A1. More clocks, louder wake-up.

=REPT("⏰",A1)&" Wake up!"

⏰⏰ Wake up!

Alarm hour match

Put target hour 0-23 in A1 (24-hour clock). Rings when the current hour matches.

=IF(HOUR(NOW())=A1,REPT("⏰",3)&" Wake up!","💤 Sleeping")

⏰⏰⏰ Wake up!

Related formula guides

Go deeper with Better Sheets

Members get full courses on CHAR, REPT, and dashboard design, plus hundreds of Google Sheets tutorials. Copy-paste formulas here stay free.

Unlock playground
Ads keep the free stuff free. Members browse ad-free — log in or see pricing.
Big Year 2027 calendar: the whole year on one Google Sheet

Free 2027 calendar.Plan all of 2027 on one Google Sheet, free.

Copy it to your Google Drive.

Free. No password, no card. The sheet link shows up right here.