WORKSHOP 1

การจัดการและทำความสะอาดข้อมูลด้วย Excel

กรณีศึกษา: ผู้ป่วยความดันโลหิตสูงรายใหม่ อายุ 15–39 ปี

ข้อมูลรูปแบบ HDC ทั้งประเทศ ปี 2566–2568

สำรวจข้อมูลค้นหาและแทนที่Pivotตัวหารและอัตรา

สแกน QR ด้วยมือถือ แล้วตอบคำถามแรก

ไม่ต้องติดตั้งแอป ไม่ต้องล็อกอิน ไม่เก็บชื่อจริง หน้ามือถือจะเปลี่ยนคำถามตามสไลด์เอง

ตอบแล้ว 0 คน
สไลด์มีคีย์ลัดทั้ง Windows และ Mac ใช้ตามเครื่องของตัวเอง

สำรวจทักษะก่อนเริ่ม

ตอบแล้ว 0 คน

ต่ำกว่า 2.5 เน้นมาก2.5–3.43.5 ขึ้นไป ไปเร็วได้

ตอบแล้ว 0 คน

สิ่งที่จะได้จาก Workshop นี้

สำรวจข้อมูล

ดูขนาด ดูค่าแปลก ๆ ในแต่ละคอลัมน์ ด้วย Filter และสูตรนับ

ค้นหาและแทนที่

แก้ข้อมูลหลายพันเซลล์ใน 1 คำสั่ง โดยคงรหัสแบบ HDC

Pivot

สรุปข้อมูลรายคน 1 แสนแถวเป็นตารางสรุปในไม่กี่คลิก

ตัวหารและอัตรา

จับคู่ประชากรกลางปีให้ถูกปี ถูกกลุ่มอายุ แล้วคิดอัตราต่อแสน

ทุกทักษะใช้กับข้อมูล HDC ที่ดาวน์โหลดมาจริงได้ทันที

เส้นทาง 3 Workshop

WS1 · วันนี้

Excel: คลีนข้อมูล

สำรวจ ค้นหาและแทนที่ Pivot อัตรา

102,395 แถว

ข้อมูลรายคน

WS2

ใช้ AI ช่วยเขียนสูตร

แปลงข้อมูลรายคนเป็นตาราง summary

5,568 แถว

สรุปรายอำเภอ × เพศ × ปี

WS3

Prompt + Apps Script

สร้างแดชบอร์ดบน Google Sheets

แดชบอร์ด

แผนที่ กราฟ ตารางสถิติ

ข้อมูลรายคนอยู่ใน Excel บนเครื่องเท่านั้น สิ่งที่ส่งต่อไป Google Sheets คือตาราง summary

กำหนดการ Workshop 1 (ประมาณ 2.5 ชั่วโมง)

20′บรรยาย
25′ฝึก 1
35′ฝึก 2
35′ฝึก 3
25′ฝึก 4
10′สรุป
บรรยาย พื้นฐานข้อมูลแบบ HDC
ฝึก 1 สำรวจข้อมูล
ฝึก 2 ค้นหาและแทนที่
ฝึก 3 Pivot
ฝึก 4 ตัวหารและอัตรา
สรุป เกมทบทวน + ถาม-ตอบ
บรรยายฝึกปฏิบัติกิจกรรมผ่านมือถือ แทรกระหว่างช่วง

ไฟล์ที่ใช้

1_ข้อมูลผู้ป่วย HT รายใหม่_15-39ปี_2566-2568.xlsx

102,395 แถว (1 แถว = 1 คน)
17 คอลัมน์ รหัสแบบ HDC
ชีตเดียว: data

2_ประชากรกลางปี_2566-2568_จังหวัด_อำเภอ.xlsx

ประชากรจริง แยกปี เพศ กลุ่มอายุ
pop_province 462 แถว
pop_amphur 5,568 แถว

3_DataDict.xlsx

ความหมายของทุกคอลัมน์
ความหมายของรหัส
นิยามและสูตรอัตรา

ข้อมูลผู้ป่วยเป็นข้อมูลจำลองเพื่อฝึก ประชากรกลางปีเป็นข้อมูลจริง · ไฟล์เฉลยสำหรับวิทยากรเท่านั้น
01

พื้นฐานข้อมูลแบบ HDC

ทำไมต้องคลีน · 1 แถว = 1 คน · ตัวเลขกับข้อความ · คีย์ลัด

ข้อมูลไม่สะอาด ผลสรุปก็ผิด

นับผู้ป่วยตามเพศ (ก่อนคลีน)

AB 
1sexจำนวน
2159,389
3241,506
4M455
5ชาย409
6หญิง341
7F295

6 กลุ่ม แทนที่จะเป็น 2 กลุ่ม

นับผู้ป่วยตามเพศ (หลังคลีน)

1 = ชาย
0

59,389 + 455 + 409

2 = หญิง
0

41,506 + 341 + 295

ถ้าไม่คลีน ผู้ป่วย 1,500 คนจะหลุดจากการนับชาย/หญิง

โครงสร้างข้อมูลแบบ HDC: 1 แถว = 1 คน

1 แถว = ผู้ป่วย 1 คน

แถวที่ไฮไลต์คือ P000002 ข้อมูลทั้งหมดของเขาอยู่ในแถวเดียว

1 คอลัมน์ = 1 ตัวแปร

ชื่อคอลัมน์ภาษาอังกฤษสั้น ๆ ตาม HDC ความหมายดูใน DataDict

เก็บเป็นรหัส ไม่ใช่ข้อความ

sex 1/2, chw_code 10, nation 099 ชื่อจังหวัดค่อยจับคู่ทีหลัง

รหัส HDC: เก็บเป็นตัวเลขหรือข้อความ

ตัวเลข (Number) ชิดขวา

sex (1 = ชาย, 2 = หญิง) · sbp, dbp, weight, height

ใช้คำนวณ เฉลี่ย หรือเปรียบเทียบมากกว่า/น้อยกว่า

ลองพิมพ์ 099 ในเซลล์ General

กด Enter แล้วเลข 0 หาย ข้อมูลผิดทันที

ข้อความ (Text) ชิดซ้าย

nation 099, typearea · chw_code, amp_code, tambon_code · diagcode I10, smoking_code

รหัสที่ขึ้นต้นด้วย 0 ต้องเป็นข้อความ

พิมพ์ 099 ในเซลล์ Text

เลข 0 อยู่ครบ และชิดซ้าย = ข้อความ

ตั้งรูปแบบเซลล์: Ctrl+1 / ⌘+1 แล้วเลือก Text

ปัญหา 4 แบบในข้อมูลชุดนี้

1 · ค่าว่างเป็นข้อความ NULL

0 เซลล์

คอลัมน์: weight, height, smoking, alcohol, family_ht

NULL→(ว่าง)

2 · เพศเป็นข้อความ

0 เซลล์

คอลัมน์: sex

ชาย / M→1  หญิง / F→2

3 · รหัสโรคมีจุด

0 เซลล์

คอลัมน์: diagcode

I11.9→I119

4 · สัญชาติไม่ครบ 3 หลัก

0 เซลล์

คอลัมน์: nation

99→099
ทั้ง 4 ปัญหาแก้ได้ด้วยเครื่องมือเดียว: ค้นหาและแทนที่ (Find & Replace)

คีย์ลัด 1/2: เคลื่อนที่และเลือกข้อมูล

A1fx
AB
1pidsex
2P0000011
3P0000021
4P0000032
⋮⋮⋮
102395P1023942
102396P1023951
งานWindowsMac
ไปขอบตาราง (ล่างสุด)Ctrl+↓⌘+↓
เลือกถึงขอบตารางCtrl+Shift+↓⌘+⇧+↓
กลับไปเซลล์ A1Ctrl+Homefn+control+←
เลือกทั้งคอลัมน์Ctrl+Spacecontrol+Space
เลือกทั้งตารางCtrl+A⌘+A
ตั้งรูปแบบเซลล์Ctrl+1⌘+1
ย้อนกลับ (Undo)Ctrl+Z⌘+Z

คีย์ลัด 2/2: ค้นหา กรอง สรุป

งานWindowsMac
ค้นหา (Find)Ctrl+F⌘+F
ค้นหาและแทนที่ (Replace)Ctrl+Hcontrol+H
เปิด / ปิด FilterCtrl+Shift+L⌘+⇧+F
เปิดเมนู Filter ของคอลัมน์Alt+↓option+↓
เติมสูตรลงล่าง (Fill Down)Ctrl+D⌘+D
แทรก PivotTableAlt N V (กดทีละปุ่ม)เมนู Insert › PivotTable
บันทึก / บันทึกเป็นCtrl+S / F12⌘+S / ⌘+⇧+S
ฝึก 1

สำรวจข้อมูล

ข้อมูลมีกี่แถว · แต่ละคอลัมน์มีค่าอะไรบ้าง · ค่าไหนผิดปกติ

ขั้นตอนสำรวจข้อมูล

  1. เปิดไฟล์ 1 และ บันทึกสำเนาเป็นชื่อใหม่ก่อนแก้ เช่น …_clean.xlsx
  2. ดูขนาดข้อมูล: คลิก A1 แล้วกด Ctrl+↓ ดูเลขแถวสุดท้าย
  3. เปิด Filter: Ctrl+Shift+L / ⌘+⇧+F (ไฟล์นี้เปิดไว้แล้ว)
  4. กดลูกศรที่หัวคอลัมน์ หาค่าที่ไม่ควรมี
  5. นับจำนวนที่ผิดด้วย COUNTIF แล้วจดลงใบงาน

ผลที่ควรได้

แถวสุดท้าย
0
หัวตาราง 1 แถว = ข้อมูล
0 คน
คอลัมน์
A–Q (17)

Filter บอกปัญหาได้ทันที

ABC
1pid ▾sex ▾birth_date ▾
2P00000112001-02-09
↑ Sort A to Z
↓ Sort Z to A
✓(Select All)
✓1
✓2
✓F
✓M
✓ชาย
✓หญิง
sex ควรมีแค่ 1 กับ 2

ลองเปิด Filter ของคอลัมน์เหล่านี้

B sexมีค่าอะไรนอกจาก 1, 2
D nationมี 99 ปนกับ 099
I diagcodeมีรหัสที่มีจุดไหม
M–Qมีคำว่า NULL ไหม
เปิดเมนู Filter: Alt+↓ / option+↓

สูตรสำรวจข้อมูล

ใช้ทำอะไรสูตรผลที่ได้
นับจำนวนแถวข้อมูล0
นับเพศที่เป็นคำว่า ชาย0
นับ NULL ใน weight0
นับรหัสโรคที่มีจุด0
นับสัญชาติที่เป็น 990
ค่าต่ำสุด / สูงสุดของ sbp130 / 205
ดูค่าไม่ซ้ำ (Excel 365)1, 2, M, …
"*.*" คือ wildcard: * แทนตัวอักษรอะไรก็ได้ จึงนับทุกเซลล์ที่มีจุดอยู่ข้างใน

ใบงานที่ 1: ตารางตรวจคุณภาพข้อมูล

คอลัมน์ปัญหาที่พบจำนวนเซลล์
B sex………………
D nation………………
I diagcode………………
M weight………………
N height………………
O–Q smoking / alcohol / family_ht………………
ทำเป็นคู่ ใช้ Filter และ COUNTIF เสร็จแล้วเทียบกับเพื่อนข้าง ๆ
ทำเสร็จหรือติดปัญหา
กดบอกในมือถือ

เฉลยใบงานที่ 1

คอลัมน์ปัญหาที่พบจำนวนเซลล์
B sexเป็นข้อความ: ชาย 409, M 455, หญิง 341, F 2950
D nation99 แทน 0990
I diagcodeมีจุด: I11.9 1,601 · I15.9 1,616 · I12.9 600 · I13.9 1830
M weight · N heightNULL คอลัมน์ละ 9000
O–QNULL: smoking 2,500 · alcohol 2,500 · family_ht 3,0000
NULL รวม  9,800  เซลล์ · จุดผิดทั้งหมด  17,300  เซลล์
ฝึก 2

ค้นหาและแทนที่ (Find & Replace)

แก้ปัญหาทั้ง 4 แบบ โดยไม่ต้องเขียนสูตร และคงรหัสแบบ HDC

รู้จักหน้าต่างค้นหาและแทนที่

ค้นหาและแทนที่ (Find and Replace)
ค้นหาแทนที่
ชาย
1
✓Match entire cell contents
Replace AllClose
1 2 3 4
  1. Find what: คำที่ต้องการหา
  2. Replace with: ค่าที่จะใส่แทน (เว้นว่างได้)
  3. Match entire cell contents: ต้องตรงทั้งเซลล์
  4. Replace All: แทนที่ทั้งหมดครั้งเดียว
เปิดหน้าต่าง WindowsCtrl+H Maccontrol+H · ไม่เห็นช่อง Match ให้กด Options >>

กฎ 2 ข้อก่อนกด Replace All

1 · เลือกคอลัมน์ก่อนเสมอ

คลิกหัวคอลัมน์ หรือ Ctrl+Space / control+Space

IM
1diagcodeweight
2I15.972.3

พัง! น้ำหนัก 72.3 กลายเป็น 723

แก้เฉพาะคอลัมน์ I น้ำหนักไม่ถูกแตะ

2 · ติ๊ก Match entire cell

แทน 99 → 099 ต้องแก้เฉพาะเซลล์ที่เป็น 99 ทั้งเซลล์

D
1nation
299
3099

099 ที่ถูกอยู่แล้วกลายเป็น 0099

แก้เฉพาะเซลล์ที่เป็น 99 ทั้งเซลล์

ขั้นที่ 1: ค่า NULL → ค่าว่าง

  1. เลือกทั้งชีต: คลิกเซลล์ใดก็ได้ แล้ว Ctrl+A / ⌘+A
  2. เปิด Replace: Ctrl+H / control+H
  3. Find what: NULL
  4. Replace with: เว้นว่าง ไม่ต้องพิมพ์
  5. ติ๊ก Match entire cell แล้วกด Replace All
MNOP
1weightheightsmokingalcohol
265.5160NULL1
3NULL1722NULL
471.2NULL41
ค้นหาและแทนที่
✓Match entire cell contents
Replace AllClose
✓ แทนที่ รายการ

ขั้นที่ 2: เพศที่เป็นข้อความ → 1 / 2

  1. เลือกคอลัมน์ B (คลิกหัวคอลัมน์)
  2. เปิด Replace แล้วติ๊ก Match entire cell
  3. แทนที่ทีละคู่ กด Replace All ทุกคู่
  4. ตรวจ Filter คอลัมน์ B ต้องเหลือแค่ 1 และ 2
B
1sex
2ชาย
31
4M
5หญิง
62
7F
ค้นหาและแทนที่
✓Match entire cell contents
Replace AllClose
FindReplaceจำนวน
ชาย1409
M1455
หญิง2341
F2295

รวม 1,500 เซลล์ ผลเป็นตัวเลข 1 / 2 แบบ HDC เดิม

ขั้นที่ 3: รหัสโรคที่มีจุด

  1. เลือกคอลัมน์ I (diagcode)
  2. เปิด Replace
  3. Find what: . (จุด 1 ตัว)
  4. Replace with: เว้นว่าง
  5. ไม่ติ๊ก Match entire cell แล้ว Replace All
I
1diagcode
2I10
3I11.9
4I15.9
5I12.9
ค้นหาและแทนที่
 Match entire cell  ไม่ติ๊ก
Replace All
✓ แทนที่ 4,000 รายการ · I11.9 → I119, I15.9 → I159
ต้องเลือกคอลัมน์ I ก่อน ไม่อย่างนั้นทศนิยมใน weight (72.3) จะกลายเป็น 723

ขั้นที่ 4: สัญชาติ 99 → 099

  1. เลือกคอลัมน์ D (nation)
  2. ตรวจรูปแบบเป็น Text: Ctrl+1 / ⌘+1 (ไฟล์นี้ตั้งไว้แล้ว)
  3. Find 99 · Replace 099
  4. ติ๊ก Match entire cell แล้ว Replace All
D
1nation
2099
399
4099
599

รูปแบบ: Text

ค้นหาและแทนที่
✓Match entire cell contents
Replace All
✓ แทนที่ 2,000 รายการ · ผลยังเป็น 099 (เลข 0 ไม่หาย)

ตรวจผลหลังคลีน: ทุกสูตรต้องได้ 0

สูตรตรวจผล
Filter คอลัมน์ B (sex)เหลือแค่ 1, 2
=COUNTIF(A:Q,"NULL")9,800 ✓
=COUNTIF(I:I,"*.*")4,000 ✓
=COUNTIF(D:D,"99")2,000 ✓
=COUNTIF(B:B,1) · =COUNTIF(B:B,2)0 / 0

บันทึกไฟล์

Ctrl+S / ⌘+S

ใช้ไฟล์นี้ต่อในฝึก 3–4 และ WS2

เช็กความคืบหน้า: ฝึก 2

ตอบแล้ว 0 คน
ฝึก 3

สรุปข้อมูลด้วย PivotTable

จากข้อมูลรายคน 102,395 แถว เป็นตารางสรุปตามปีและเพศ

Pivot คืออะไร

ข้อมูลรายคน

102,395 แถว

ตารางสรุป 3 แถว

Rows
แถว: แบ่งกลุ่มตามอะไร
Columns
คอลัมน์: แบ่งกลุ่มซ้อน
Values
ค่า: นับ / รวม / เฉลี่ย
Filters
กรองเฉพาะบางกลุ่ม

เตรียมคอลัมน์ปี พ.ศ. ก่อนทำ Pivot

  1. คลิก R1 พิมพ์หัวคอลัมน์ year · คลิก R2 พิมพ์สูตร แล้ว Enter
  2. ดับเบิลคลิกมุมล่างขวาของ R2 สูตรจะเติมลงถึงแถวสุดท้าย · ตรวจ Filter คอลัมน์ R ต้องมีแค่ 2566, 2567, 2568
= VALUE(LEFT(J2,4))+543
date_dx (J2)
"2023-01-01"
LEFT(J2,4) →
ตัด 4 ตัวแรก
ข้อความ
"2023"
VALUE( ) →
เป็นตัวเลข
ตัวเลข ค.ศ.
2023
+543 →
เป็น พ.ศ.
year
2566

สร้าง Pivot: ผู้ป่วยรายใหม่ตามปีและเพศ

  1. คลิกเซลล์ใดก็ได้ในตาราง
  2. Insert › PivotTable (Win: Alt N V)
  3. เลือก New Worksheet › OK
  4. ลาก year ไป Rows
  5. ลาก sex ไป Columns
  6. ลาก pid ไป Values
HomeInsertData
PivotTable Fields
✓pid
✓sex
nation
chw_code
diagcode
date_dx
✓year
Filters
Columns
sex
Rows
year
Values
Count of pid
ABCD
3PivotTable1
4
5
6

ผลที่ควรได้: ผู้ป่วยรายใหม่เพิ่มขึ้นทุกปี

ชาย (1)หญิง (2)
19,042
13,380
2566
19,962
14,035
2567
21,249
14,727
2568
ชายมากกว่าหญิงทุกปี แต่นี่เป็นจำนวน ยังเทียบกันไม่ได้จนกว่าจะหารด้วยประชากร

เช็กคำตอบ: Pivot ของคุณ

ตอบแล้ว 0 คน
102,395 = จำนวนผู้ป่วยทั้งหมด · ถ้าได้ 102,396 แปลว่านับหัวตารางไปด้วย

ฝึกต่อ: Pivot รายจังหวัด ปี 2568

  1. ย้าย year ไป Filters แล้วเลือก 2568
  2. เอา sex ออก แล้วลาก chw_code ไป Rows
  3. เรียงมากไปน้อย: คลิกขวาที่ตัวเลข › Sort › Largest to Smallest
  4. ดู 5 อันดับแรก ชื่อจังหวัดดูจากไฟล์ประชากร
กรุงเทพมหานคร
3,376
นครราชสีมา
1,275
บุรีรัมย์
1,068
ชลบุรี
1,063
อุบลราชธานี
1,056
จังหวัดที่ประชากรมาก ผู้ป่วยก็มาก · จำนวนผู้ป่วยมาก ไม่ได้แปลว่าเสี่ยงมาก

ทายก่อน แล้วค่อยคิด

ตอบแล้ว 0 คน

กด → เพื่อดูคำตอบ หรือข้ามไปคิดในสไลด์ถัดไป

ฝึก 4

ตัวหารและอัตราต่อแสนประชากร

ใช้ประชากรกลางปีให้ถูกปี ถูกกลุ่มอายุ ถูกพื้นที่

จำนวนมาก ไม่ได้แปลว่าอัตราสูง

3,376
กรุงเทพมหานคร
353
ลำพูน

สูตรอัตราผู้ป่วยรายใหม่

ผู้ป่วยรายใหม่ในปีนั้น
ประชากรกลางปี อายุ 15–39 ปี ของปีเดียวกัน

× 100,000

กทม. 3,376 ÷ 1,766,094 × 100,000 = 191.2
ลำพูน 353 ÷ 117,916 × 100,000 = 299.4

ลำพูนมีผู้ป่วยน้อยกว่า กทม. เกือบ 10 เท่า แต่อัตราสูงกว่า เพราะตัวหาร (ประชากร) ต่างกันมาก

เลือกตัวหารให้ถูก 3 ข้อ

ถูกกลุ่มอายุ

ผู้ป่วยอายุ 15–39 ปี ต้องหารด้วย pop_15_39 ไม่ใช่ pop_total

ถูกปี

ผู้ป่วยปี 2567 หารด้วยประชากรกลางปี 2567

ถูกพื้นที่และเพศ

อัตรารายจังหวัด/อำเภอ หรือรายเพศ ใช้ประชากรของกลุ่มนั้น

ปี 2568 ผู้ป่วย 35,976 คน

÷ pop_total 65,870,610
54.6 ✗
÷ pop_15_39 22,077,853
163.0 ✓

ใช้ pop_total อัตราจะต่ำกว่าความจริงประมาณ 3 เท่า เพราะนับคนทุกอายุที่ไม่มีโอกาสอยู่ในข้อมูลชุดนี้

คิดอัตรารายปีด้วย SUMIFS

  1. คัดลอกชีต pop_province มาไว้ในไฟล์ข้อมูล: คลิกขวาที่แท็บ › Move or Copy › ติ๊ก Create a copy · ข้าง Pivot พิมพ์หัวคอลัมน์ pop และ rate
=SUMIFS(pop_province!$J:$J, pop_province!$A:$A, A5)

① คอลัมน์ที่จะรวม · pop_15_39 (คอลัมน์ J)

② คอลัมน์เงื่อนไข · year (คอลัมน์ A)

③ ค่าเงื่อนไข · ปีในแถวของ Pivot (A5 = 2566)

=ROUND(D5/E5*100000, 1)

เพิ่มเงื่อนไขเพศ: , pop_province!$E:$E, 1

ADEJ
1yearchw_namesexpop_15_39
22566กรุงเทพมหานคร1…
32566กรุงเทพมหานคร2…
⋮⋮⋮⋮⋮
1562567กรุงเทพมหานคร1…

ผลที่ควรได้: อัตราต่อแสนประชากร 15–39 ปี

ชายหญิงรวม
166.3
120.2
143.6
2566
176.1
128.0
152.5
2567
189.2
135.7
163.0
2568
อัตราเพิ่มขึ้นทุกปี ทั้งที่ประชากร 15–39 ปีลดลง · ชายสูงกว่าหญิงประมาณ 1.4 เท่า

ตารางคะแนน Workshop 1

ตอบถูกได้ 100 คะแนน + โบนัสตอบเร็ว (คนแรกที่ตอบถูก +50)

สรุป Workshop 1

สำรวจก่อนแก้

Filter + COUNTIF บอกว่าผิดตรงไหน กี่เซลล์

แก้ด้วย Find & Replace

เลือกคอลัมน์ก่อน ติ๊ก Match entire cell คงรหัส HDC

สรุปด้วย Pivot

ข้อมูลรายคน → ตารางสรุปในไม่กี่คลิก

ตัวหารต้องตรง

ถูกกลุ่มอายุ ถูกปี ถูกพื้นที่และเพศ

Workshop 2: ใช้ AI ช่วยเขียนสูตร แปลงข้อมูลรายคนที่คลีนแล้วเป็นตาราง summary

ตอบแล้ว 0 คน