เคยมั้ย บางครั้งก็รู้สึกว่าร่างกายตัวเองมาถึงจุดที่ “ไม่ไหวแล้ว” ทั้งปวดหลัง เหนื่อยง่าย แค่เดินขึ้นบันไดก็หอบ แถมรู้สึกว่าร่างกายพังจากข้างในช้า ๆ
นั่นแหละ คือจุดเริ่มต้นของโปรเจกต์นี้
เริ่มจากวันหนึ่งหลังเลิกงานที่เหนื่อยจนไม่อยากลุกจากโซฟา แล้วก็คิดได้ว่าต้องทำอะไรสักอย่าง ไม่งั้นร่างกาย (และจิตใจ) คงแย่ไปเรื่อย ๆ แน่
และนั่นคือวันที่เราเริ่มทำ 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 = 6
หมายความว่าถ้าเราทำ 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. การหาร
สูตรทำงานแบบนี้:
ตัวอย่าง:
แปลว่า ทำสำเร็จประมาณ 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 = 0IF(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