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