Building Daily Tracker on Google Sheets

Glow Up with Data: Building a Holistic Daily Tracker on Google Sheets

Written by:

เคยมั้ย บางครั้งก็รู้สึกว่าร่างกายตัวเองมาถึงจุดที่ “ไม่ไหวแล้ว” ทั้งปวดหลัง เหนื่อยง่าย แค่เดินขึ้นบันไดก็หอบ แถมรู้สึกว่าร่างกายพังจากข้างในช้า ๆ

นั่นแหละ คือจุดเริ่มต้นของโปรเจกต์นี้

เริ่มจากวันหนึ่งหลังเลิกงานที่เหนื่อยจนไม่อยากลุกจากโซฟา แล้วก็คิดได้ว่าต้องทำอะไรสักอย่าง ไม่งั้นร่างกาย (และจิตใจ) คงแย่ไปเรื่อย ๆ แน่

และนั่นคือวันที่เราเริ่มทำ Tracker ง่าย ๆ ไว้ติดตามการดูแลสุขภาพของตัวเอง ทำไปทำมา ก็กลายเป็นโปรเจกต์ที่จริงจังขึ้นเรื่อย ๆ จนได้เวอร์ชันที่พอใจที่สุด

Project Overview

โปรเจกต์ “Glow Up Tracker” คือ Habit Tracker แบบรายวัน ที่จะช่วยให้เราติดตามการดูแลสุขภาพของตัวเองได้ครบทุกด้านที่ต้องการ ทั้งการกิน การนอน การออกกำลังกาย และอารมณ์

มาพร้อม Mini Charts แบบเรียบง่าย ช่วยสรุปความคืบหน้าในเดือนนั้น ตรวจสอบ Progress การดูแลตัวเองได้ทั้งแบบรายเดือนและรายปี มีพื้นที่ให้บันทึกอารมณ์แต่ละวัน และจด Reflection ประจำเดือนได้อย่างอิสระ

Why I Built This Project

สิ่งที่ทำให้เริ่มโปรเจกต์นี้คืออยากติดตามพฤติกรรมของตัวเองแบบง่าย ๆ เพื่อเช็กว่าวันนี้ “เรารักตัวเองแล้วหรือยัง” อยากเห็นทุกอย่างเป็นข้อมูลที่ติดตามและวัดผลได้ เพื่อให้เห็นความก้าวหน้าและวินัยของตัวเองจากข้อมูลนั้น

Tools

  • Google Sheets
  • Looker Studio

Let’s Start

1. Design Daily Log

เริ่มสร้าง Tracker ด้วยการลิสต์หัวข้อที่อยากติดตามพฤติกรรมการดูแลตัวเอง อย่างของเราจะเน้นเรื่องการกินเป็นหลัก ตามมาด้วยการออกกำลังกายและการนอน ตรงส่วนนี้สามารถปรับเปลี่ยนได้ตามความเหมาะสมของแต่ละคนเลย

สร้างตารางแบบง่าย ๆ ใส่วันที่และหัวข้อให้เรียบร้อย จากนั้นลากคลุมทุกแถวและคอลัมน์ คลิก insert > checkbox เท่านี้ก็จะได้ตารางที่สามารถ Tracking สิ่งที่เราทำแบบง่าย ๆ แล้ว

จากนั้นมาทำ Mood Tracker ไว้บันทึกอารมณ์ในแต่ละวันของเรากันดีกว่า เริ่มจากเลือก 1 คอลัมน์สำหรับบันทึกอารมณ์ แล้วเลือกเมนู insert > dropdown

ตั้งค่า dropdown ของเรา โดยเลือกใส่อีโมจิตามใจชอบ ของเราจะมี 5 แบบ แทนอารมณ์ 5 อย่าง พร้อมใส่สีเอาไว้ด้วยเพื่อความสวยงามเวลาบันทึกอารมณ์ครบทั้งเดือน (แอบเลือกสีให้มีความ related กับอารมณ์แต่ละอย่างด้วย)

เติมความสนุกให้ฟีลแบบ gamification นิดหน่อยด้วยคอลัมน์ สะสมดาว โดยเราจะสร้างคอลัมน์ว่างขึ้นมา 1 คอลัมน์เพื่อสร้างระบบสะสมดาวอัตโนมัติ จากนั้นใส่ฟังก์ชัน

=ARRAYFORMULA(REPT("⭐", COUNTIF(C9:K9, TRUE)/9*5))

1. COUNTIF(C9:K9, TRUE)

  • นับจำนวนเซลล์ในช่วง C9:K9 ที่มีค่าเป็น TRUE
  • สมมติว่ามี TRUE อยู่ 6 ช่อง → ผลลัพธ์คือ 6

2. /9*5

ช่วง C9:K9 มีทั้งหมด 9 ช่อง เพราะฉะนั้นฟังก์ชันนี้จะแปลง “จำนวน TRUE” ให้เท่ากับ “คะแนนเต็ม 5 ดาว”

จำนวน TRUE÷9×5

ตัวอย่าง: ถ้ามี TRUE = 6

6/9×5=3.33

หมายความว่าถ้าเราทำ Daily Log สำเร็จ 6 อย่าง ก็จะได้ดาว 3.33 ดาว

3. REPT("⭐", … )

ฟังก์ชัน REPT จะทำซ้ำตัวอักษรตามจำนวนที่กำหนด แต่! REPT ก็จะช่วยตัดทศนิยมออกด้วย เช่น 3.33 จะกลายเป็น 3

ดังนั้นผลลัพธ์ที่เราได้ก็คือ…

สุดท้ายครอบทับด้วย ARRAYFORMULA แล้วลากฟังก์ชันลงมาจนถึงวันสุดท้ายของเดือน Daily Log ของเราก็เป็นอันเสร็จเรียบร้อย

2. Build Monthly Summary

จากนั้นเรามาเริ่มออกแบบส่วนของสรุปภาพรวมรายเดือน โดยเราอยากเห็นว่าในเดือนนั้นเราทำตามลิสต์ใน Daily Log แต่ละอย่างไปได้มากน้อยแค่ไหน

เริ่มจากออกแบบหน้าตาก่อน ก็จะได้ประมาณนี้

เราจะแบ่งเป็น 2 แถว แถวบนใส่ sparkline เพื่อแสดงให้เห็นความคืบหน้า ส่วนแถวล่างจะแสดงเป็น % เพื่อความชัดเจน

แถวบน (progress bar) ใช้ฟังก์ชัน

=SPARKLINE(COUNTIF(C9:C39, TRUE), {"charttype", "bar"; "max", COUNTA(B9:B39); "color1", "#ADD8E6"})

1. COUNTIF(C9:C39, TRUE)

  • นับจำนวนเซลล์ในช่วง C9:C39 ที่มีค่าเป็น TRUE
  • สมมติว่ามี TRUE = 18 → ผลลัพธ์คือ 18

ค่าที่ได้คือความคืบหน้าของเราที่จะถูก plot ออกมาเป็นกราฟ

2. SPARKLINE( … )

ฟังก์ชัน SPARKLINE ใช้สร้างกราฟเล็ก ๆ ใน cell โดยเราใส่คำสั่งเพิ่มลงไปตามนี้

  • "charttype", "bar" บอกให้ SPARKLINE วาดเป็น กราฟแท่งแนวนอน
  • "max", COUNTA(B9:B39) เป็นคำสั่งที่บอกว่ากำหนดว่าแท่งเต็ม 100% คือเท่าไหร่ นับโดยใช้ฟังก์ชัน COUNTA(B9:B39) = จำนวนรายการทั้งหมดในคอลัมน์ B

ตัวอย่าง: ถ้า B9:B39 มี 31 รายการ (31 วัน) → max = 31 ดังนั้นถ้า TRUE (ช่องที่เราติ๊กถูก) = 18 → แท่งกราฟจะยาวประมาณ 18/31 ของความยาวทั้งหมด

  • "color1", "#ADD8E6" กำหนดสีของกราฟ เราเลือกเป็นสี lightblue

แถวล่าง (percent) ใช้ฟังก์ชัน

=COUNTIF(C9:C39, TRUE) / COUNTA(B9:B39)

1. COUNTIF(C9:C39, TRUE)

  • นับจำนวนเซลล์ในช่วง C9:C39 ที่มีค่าเป็น TRUE
  • สมมติว่ามี TRUE = 18 → ผลลัพธ์คือ 18

นี่คือ “จำนวนงานที่ทำสำเร็จแล้ว”

2. COUNTA(B9:B39)

  • นับจำนวนเซลล์ที่ ไม่ว่าง ในช่วง B9:B39
  • โดยทั่วไปคอลัมน์ B มักเป็น “รายการทั้งหมดที่ต้องทำ”
  • ถ้ามีรายการทั้งหมด 31 รายการ → ผลลัพธ์คือ 31

นี่คือ “จำนวนงานทั้งหมดที่ต้องทำ”

3. การหาร

สูตรทำงานแบบนี้:

จำนวนงานที่ทำสำเร็จ÷จำนวนงานทั้งหมด

ตัวอย่าง:

18÷31=0.5806

แปลว่า ทำสำเร็จประมาณ 58%

ผลลัพธ์ที่ได้ จะออกมาประมาณนี้ (อย่าลืมเปลี่ยน format cell เป็น Percent (%) ด้วยนะ)

ยัง ยังไม่หมด

ยังมีการสรุปว่าในเดือนนั้นเราบันทึกอารมณ์แบบไหนมากที่สุดด้วย

=IFERROR(INDEX(L9:L39, MODE(MATCH(L9:L39, L9:L39, 0))), "เจอกันสิ้นเดือน ;)")

1. MATCH(L9:L39, L9:L39, 0)

  • MATCH จะคืนค่า “ตำแหน่งแรกที่พบ” ของแต่ละค่าในช่วง
  • ตัวเลขที่ซ้ำบ่อยที่สุด = ค่าที่เกิดบ่อยที่สุดในช่วง L9:L39
  • ใช้แปลงอีโมจิเป็นค่าตำแหน่ง

2. MODE( … )

  • ฟังก์ชัน MODE จะหาค่า “ตัวเลขที่เกิดบ่อยที่สุด” จากผล MATCH ที่เราแปลงไว้แล้ว
  • เช่น ถ้า MATCH ให้ผล {1,2,1,4,2,1} → MODE = 1 (เพราะเลข 1 โผล่มาบ่อยสุด)

3. INDEX(L9:L39, … )

  • เอาตำแหน่งที่ได้จาก MODE ไปดึงค่าจริงในช่วง L9:L39 (คอลัมน์บันทึกอารมณ์ของเรา)
  • จากนั้นผลลัพธ์ที่ได้คือ จะดึงค่าจริงที่เกิดขึ้นบ่อยที่สุดออกมาโชว์

4. IFERROR( … , "เจอกันสิ้นเดือน ;)" )

  • ตอนใช้ฟังก์ชันนี้ถ้ายังบันทึกอารมณ์ไม่ครบทุกวัน ค่าที่แสดงออกมาจะเป็น error เลยแก้ด้วยการใช้ฟังก์ชัน IFERROR
  • เราเลือกให้แสดงข้อความน่ารัก ๆ ว่า “เจอกันสิ้นเดือน ;)” เพราะอีโมจิที่เราใช้บ่อยที่สุดจะแสดงในช่องนี้ตอนสิ้นเดือน หรือตอนที่เราบันทึกอารมณ์ครบทุกวันแล้วนั่นเอง

สุดท้าย มานับคะแนนดาวที่เราสะสมกันดีกว่า

แต่ก่อนอื่นเราจะแปลงค่าอีโมจิรูปดาวเป็นตัวเลขก่อนเพื่อให้นำไปใช้กับฟังก์ชันถัดไปได้ เริ่มจากใส่ฟังก์ชันในคอลัมน์ว่าง ๆ

=ARRAYFORMULA(ROUND(COUNTIF(C9:K9, TRUE)/9*5))

เป็นฟังก์ชันที่ใช้เพื่อนับดาวเป็นตัวเลข โดยนับจำนวน TRUE ในวันนั้น แปลงเป็นคะแนนเต็ม 5 แล้วปัดเป็นจำนวนเต็ม

ผลลัพธ์คือจำนวนดาวแบบเป็นตัวเลข เช่น

  • ⭐⭐⭐ → 3
  • ⭐⭐⭐⭐⭐ → 5

จากนั้นเราจะแสดงจำนวนดาวที่เราได้มากที่สุดในเดือนนั้น ด้วยฟังก์ชัน

=REPT("⭐", IFERROR(MODE(N9:N39), 0))

1. MODE(N9:N39)

  • ฟังก์ชัน MODE ใช้หาค่า “ที่เกิดบ่อยที่สุด” ในช่วง N9:N39

2. IFERROR( … , 0 )

  • ถ้าในช่วง N9:N39 ยังไม่มีข้อมูลเลย → MODE จะ Error → IFERROR จะคืนค่า 0

3. REPT("⭐", … )

  • ฟังก์ชัน REPT ทำซ้ำตัวอักษรตามจำนวนที่กำหนด
  • ถ้า MODE = 3 → REPT(“⭐”, 3) = ⭐⭐⭐

นอกจากแสดงจำนวนดาวที่เราได้มากที่สุดในเดือนนั้นแล้ว เรายังอยากให้มีข้อความน่ารัก ๆ เป็นการ cheer up ตัวเอง

=IFS(LEN(M3)=5, "Glow Up Queen 👸", OR(LEN(M3)=3, LEN(M3)=4), "Consistent Star ⭐", OR(LEN(M3)=1, LEN(M3)=2), "Reset & Restart 🌿", TRUE, "Waiting for miracle!")

1. LEN(M3)

  • วัดความยาวข้อความใน M3 (cell สรุปค่าเฉลี่ยดาวที่เราได้ในเดือนนั้น)

2. IFS()

  • เช็กเงื่อนไขทีละข้อจากบนลงล่าง โดยเงื่อนไขที่ใช้ก็คือ
  • ถ้าได้ 5 ดาว"Glow Up Queen 👸"
  • ถ้าได้ 3 หรือ 4 ดาว"Consistent Star ⭐"
  • ถ้าได้ 1 หรือ 2 ดาว"Reset & Restart 🌿"
  • TRUE → เงื่อนไขสุดท้าย ใช้เป็นค่าเริ่มต้นถ้าไม่เข้าเงื่อนไขใดเลย จะแสดงข้อความ "Waiting for miracle!"

3. Create Weekly Log

สร้าง Weekly Log เพื่อเช็กลิสต์รายการที่เราอยากทำ อาจเป็นกิจกรรมพิเศษอย่าง spa day, movie day หรือ game day เป้าหมายคือในหนึ่งสัปดาห์ เราอยากมีกิจกรรมที่ทำเพื่อตัวเองบ้าง

  • สร้างตารางง่าย ๆ ระบุสัปดาห์ที่ 1 – 4
  • ช่องกิจกรรม เลือก insert > dropdown จากนั้นเพิ่มรายการกิจกรรมที่เราอยากทำลงไปได้เลย อย่าลืมเลือกให้สามารถเลือกได้หลายข้อในช่องเดียวด้วยล่ะ
  • ช่องเช็กลิสต์ เลือก insert > checkbox จากนั้นสร้าง condition formatting โดยลากคลุมตารางทั้งหมด และระบุ format rules เป็น > custom formula is… =$T9=TRUE
  • เมื่อเราติ๊กถูก แถวในตารางก็จะไฮไลต์สีที่เลือกไว้ เป็นการเช็กว่าสัปดาห์นั้นเราได้ทำกิจกรรมตามที่ตั้งใจไว้หรือเปล่า

4. Build Monthly Progress

สร้าง scorecard สำหรับเช็กความคืบหน้ารวมในแต่ละเดือน โดยใช้ฟังก์ชัน

=COUNTIF(C9:K39, TRUE) / COUNTIF(C9:K39, "<>")

Get Your Own Tracker

Download Glow Up Tracker HERE!

1) COUNTIF(C9:K39, TRUE)

  • นับจำนวนเซลล์ในช่วง C9:K39 ที่มีค่าเป็น TRUE
  • เช่น ถ้ามี TRUE อยู่ 12 เซลล์ → ผลลัพธ์คือ 12

2) COUNTIF(C9:K39, “<>”)

  • นับจำนวนเซลล์ที่ ไม่ว่าง
  • เครื่องหมาย <> หมายถึง “ไม่เท่ากับค่าว่าง”
  • เช่น ถ้าในช่วงนั้นมีข้อมูลอยู่ 30 เซลล์ (ไม่ว่าจะเป็น TRUE, FALSE, ตัวเลข, ข้อความ) → ผลลัพธ์คือ 30

3) การหาร
จำนวน TRUE / จำนวนเซลล์ที่ไม่ว่าง

ตัวอย่าง:

  • TRUE = 12
  • เซลล์ไม่ว่าง = 30

ผลลัพธ์ = (12 / 30 = 0.4) → เท่ากับ 40%


🎯 สรุปสั้น ๆ
สูตรนี้ = สัดส่วนของ TRUE ต่อจำนวนข้อมูลทั้งหมดที่มีอยู่จริงในช่วงนั้น

5. Count Streak

เราอยากนับวันที่ได้ 3 ดาวขึ้นไปว่าทำต่อเนื่องได้เท่าไร เลยสร้างช่อง current streak ที่นับจำนวนวันที่ทำได้ 3 ดาวต่อเนื่อง คู่กับช่อง longest ที่จะนับว่าเราทำต่อเนื่องได้นานสุดกี่วัน

=LET(streak_range, O9:O39,
last_val, INDEX(streak_range, MAX(FILTER(ROW(streak_range)-ROW(V9)+1, streak_range<>""))),
IF(last_val=0, 0, COUNTIF(OFFSET(V9, MAX(FILTER(ROW(streak_range)-ROW(V9)+1, streak_range=0)), 0, ROWS(streak_range)), 1)))

1) ตั้งตัวแปร
streak_range, O9:O39
คือช่วงข้อมูลที่ใช้คำนวณ streak
(มักเป็น 0 = fail, 1 = success)


2) หา “ค่าล่าสุดที่ไม่ว่าง” ในช่วง
lastval = INDEX(streakrange, MAX(FILTER(ROW(streakrange)-ROW(V9)+1, streakrange<>"")))

ทำอะไร?

  • FILTER(…, streak_range<>””) → เลือกเฉพาะแถวที่มีข้อมูล
  • MAX(…) → เอาแถวสุดท้ายที่มีข้อมูล
  • INDEX(…) → ดึงค่าของแถวนั้นออกมา

ความหมาย
lastval = ค่าล่าสุดใน streakrange
เช่น ถ้า O39 = 1 → last_val = 1
ถ้า O39 = 0 → last_val = 0


3) ถ้าค่าสุดท้ายเป็น 0 → streak = 0
IF(last_val=0, 0, ...)
เพราะถ้าวันล่าสุดไม่สำเร็จ streak จะถูกรีเซ็ตทันที


4) ถ้าค่าสุดท้ายเป็น 1 → นับ streak ย้อนหลัง
COUNTIF( OFFSET(V9, MAX(FILTER(ROW(streakrange)-ROW(V9)+1, streakrange=0)), 0, ROWS(streak_range)), 1)

อธิบายแบบง่าย

  • FILTER(…, streak_range=0) → หาแถวล่าสุดที่เป็น 0
  • MAX(…) → ตำแหน่งของ 0 ล่าสุด
  • OFFSET(…) → เลื่อนช่วงให้เริ่มนับตั้งแต่หลัง 0 ล่าสุด
  • COUNTIF(…,1) → นับจำนวน 1 ตั้งแต่จุดนั้นจนถึงปัจจุบัน

ความหมาย
นับจำนวนวันติดกันที่เป็น 1 หลังจาก 0 ล่าสุด


🎯 สรุปสั้น ๆ
สูตรนี้คำนวณว่า:

“ถ้าวันล่าสุดเป็น 1 → นับ streak ของ 1 ย้อนหลังจนถึง 0 ล่าสุด
ถ้าวันล่าสุดเป็น 0 → streak = 0”

6. Final Touch with Reflections

ปิดท้ายหน้ารายเดือนด้วยการทำ reflections เพื่อสะท้อนความคิดเห็น ความรู้สึก สิ่งที่เราภูมิใจ หรือสิ่งที่เราอยากปรับปรุงในเดือนนั้น ๆ

7. Calculate Annual Data

ก่อนจะทำหน้าสรุปผลรายปี เราสร้าง sheet annual_dashboard ขึ้นมาเพื่อทำตารางสรุปผลต่าง ๆ ไว้เป็นข้อมูลที่จะดึงไปใช้ใน dashboard ในตารางประกอบด้วยคอลัมน์

  • month
  • date for looker
  • yearly progress
  • mood score
  • total 5 stars
  • mood
  • mood count

month: ต้องพิมพ์ชื่อเดือนใน cell ให้เหมือนชื่อ sheet จะได้ใช้สูตรดึงค่าจากแต่ละ sheet ต่าง ๆ มาใช้ได้

date for looker: วันเดือนปีรูปแบบตัวเลข เพื่อให้ looker ดึงข้อมูลไปสร้าง dashboard ได้แบบไม่เพี้ยน

yearly progress: ดึง monthly progress มาแสดงในตาราง ด้วยฟังก์ชัน =IFERROR(INDIRECT(A2&”!Q2″), 0)

mood score: ประเมินค่าเฉลี่ยจากอีโมจิ แทนอีโมจิแต่ละรูปด้วยคะแนน =IFERROR(SUM(ARRAYFORMULA(SWITCH(INDIRECT(A2&”!L9:L39″), “😊”, 5, “😐”, 4, “😴”, 3, “😫”, 2, “😡”, 1, 0))) / (COUNTIF(INDIRECT(A2&”!L9:L39″), “<>”) * 5), 0)

total 5 stars: นับวันที่เราได้ 5 ดาว =IFERROR(COUNTIF(INDIRECT(A2&”!N9:N39″), 5), 0)

mood: ใส่รูปอีโมจิเพื่อเตรียมเป็นข้อมูลทำ dashbaord

mood count: นับจำนวนอีโมจิทั้งหมด

=COUNTIF(Jan!$L$9:$L$39, F2) + COUNTIF(Feb!$L$9:$L$39, F2) + COUNTIF(Mar!$L$9:$L$39, F2) + COUNTIF(Apr!$L$9:$L$39, F2) + COUNTIF(May!$L$9:$L$39, F2) + COUNTIF(Jun!$L$9:$L$39, F2) + COUNTIF(Jul!$L$9:$L$39, F2) + COUNTIF(Aug!$L$9:$L$39, F2) + COUNTIF(Sep!$L$9:$L$39, F2) + COUNTIF(Oct!$L$9:$L$39, F2) + COUNTIF(Nov!$L$9:$L$39, F2) + COUNTIF(Dec!$L$9:$L$39, F2)

เมื่อใส่ฟังก์ชันทั้งหมดแล้ว จะได้ตารางตามนี้ เราสามารถกด hide sheet เอาไว้ได้เพื่อความสวยงาม

8. Build Dashboard

เมื่อเราทำ sheet รายเดือนและตารางสรุปข้อมูลแล้ว ก็เตรียมทำ dashboard เพื่อแสดงผลข้อมูลรายปี โดยเราเลือกข้อมูลมาแสดงคือ

  • scorecard: yearly progress, mood score, total 5 stars
  • line chart: ดึงข้อมูล yearly progress and mood score มาแสดงเพื่อดูความสัมพันธ์ว่าความคืบหน้าแต่ละเดือนสัมพันธ์กับอารมณ์มั้ย
  • mood of the year: donut chart แสดงผลเป็นแถบสีและ % ว่าตลอดทั้งปีเราบันทึกอารมณ์แต่ละอย่างไปมากน้อยแค่ไหน

9. Looker

เชื่อมข้อมูลใน sheet กับ looker ด้วยการไปที่ expansion > looker studio เลือกเชื่อมกับ anuual_dashboard จากนั้นเลือกแสดงผล chart ตามที่เราต้องการได้เลย โดยเราเลือกแสดงผลแบบเดียวกับ yearly summary

outcome

ผลลัพธ์ที่ได้คือ tracker ที่ใช้ติดตามพฤติกรรมการใช้ชีวิตที่เราอยากปรับ สามารถดูความคืบหน้าของแต่ละพฤติกรรมได้ทั้งแบบรายวันและรายเดือน นอกจากนี้ยังบันทึกอารมณ์ประจำวันได้ มีลูกเล่นเป็นการเก็บสะสมดาว สร้างความสนุกเล็ก ๆ เหมือนได้เล่นเกมด้วย

Leave a comment