EXCEL SPEED WORK · DATA QUALITY GUIDE
จัดการวันที่ใน Excel ที่คนทำงานพลาดบ่อย
วันที่ดูถูกต้อง แต่เรียงผิด คำนวณไม่ได้ หรือรายงานคลาดเคลื่อน? เรียนรู้วิธีตรวจสอบชนิดข้อมูล แก้รูปแบบวันที่ และป้องกันความผิดพลาดก่อนนำไปสรุปรายงานครับ
เคยไหมครับ? ได้ไฟล์จาก ERP, SAP, โปรแกรมบัญชี หรือเพื่อนร่วมงานมาเปิดใน Excel แล้ววันที่ดูปกติดี แต่พอ Sort, ใช้สูตร หรือทำ Pivot Table กลับมีบางแถวผิดปกติ ปัญหาอาจไม่ได้อยู่ที่สูตร แต่อยู่ที่ ชนิดข้อมูล รูปแบบวันเดือนปี หรือค่าต้นทาง ที่ Excel ได้รับมาครับ
อาการที่พบบ่อยเกี่ยวกับวันที่ใน Excel
ปัญหาวันที่ไม่ได้มีเพียงเรื่องแปลง Text เท่านั้นครับ บางครั้งข้อมูลเป็นตัวเลขวันที่จริงแล้ว แต่ถูกตีความวัน/เดือนสลับกัน หรือมีปีไม่ตรงกับระบบต้นทาง ลองสังเกตอาการเหล่านี้ก่อนครับ
ข้อมูลบางแถวเรียงเหมือนข้อความ หรือวันที่จริงถูกตีความผิดตั้งแต่ตอนนำเข้า
สูตรลบวันที่หรือแยกปี/เดือนทำงานไม่ได้ เพราะข้อมูลไม่อยู่ในชนิดที่สูตรคาดหวัง
วันที่ 03/04/2026 อาจหมายถึง 3 เมษายน หรือ 4 มีนาคม ขึ้นอยู่กับรูปแบบต้นทาง
วันที่ผิดอาจทำให้ยอดรายเดือน การนับอายุงาน และกราฟแนวโน้มผิดตามไปด้วย
ทำความเข้าใจวันที่: ค่าในเซลล์กับรูปแบบที่เห็น
Excel เก็บวันที่จริงเป็นตัวเลข Serial Number แล้วใช้ Number Format กำหนดว่าจะให้แสดงเป็นวัน/เดือน/ปีแบบใด เช่น 31/08/2026 หรือ 31-Aug-2026 ส่วนข้อความที่หน้าตาเหมือนวันที่ก็ยังเป็น Text ได้ครับ
| สิ่งที่เห็น | สิ่งที่ต้องตรวจสอบ | ข้อควรจำ |
|---|---|---|
| 31/08/2026 | เป็นตัวเลขวันที่จริงหรือ Text? | หน้าตาอย่างเดียวบอกชนิดไม่ได้ |
| 20260831 | เป็นรหัสวันที่ 8 หลักหรือตัวเลขทั่วไป? | ต้องรู้โครงสร้างต้นทางก่อนแปลง |
| 03/04/2026 | ต้นทางใช้ DMY หรือ MDY? | อาจแปลงได้แต่ได้คนละวัน |
| 31/08/2569 | ปี พ.ศ. ใน Text หรือ Date ที่แสดงแบบไทย? | อย่าบวกหรือลบ 543 โดยไม่ตรวจสอบ |
ลองเลือกวันที่จริงแล้วเปลี่ยน Number Format เป็น General จะเห็นค่าตัวเลขภายในแทนรูปแบบวันที่ แต่หากค่าเดิมเป็น Text การเปลี่ยน Format เพียงอย่างเดียวจะไม่ทำให้กลายเป็น Date จริงครับ
วิธีตรวจสอบว่าเป็น Date จริง หรือเป็น Text
ก่อนแก้ไข ให้ตรวจสอบข้อมูลทีละแถว โดยเฉพาะไฟล์ที่มาจากหลายระบบ ตัวอย่างนี้ใช้คอลัมน์ B เป็นวันที่จากระบบ และคอลัมน์ C–D เป็นผลตรวจสอบครับ
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Order ID | วันที่จากระบบ | =ISTEXT(B2) ↓ | =ISNUMBER(B2) ↓ |
| 2 | SO001 | 31/08/2026 | TRUE | FALSE |
| 3 | SO002 | 15/07/2026 | FALSE | TRUE |
| 4 | SO003 | 01/09/2026 | TRUE | FALSE |
| 5 | SO004 | 20/08/2026 | FALSE | TRUE |
ตารางตัวอย่างจำลอง: แถว 2 และ 4 เป็น Text ส่วนแถว 3 และ 5 เป็นวันที่จริง โดยต้องเตรียมชนิดข้อมูลให้ตรงตามคำอธิบายก่อนทดลองสูตร
วิธีที่ 1: ใช้ ISTEXT และ ISNUMBER
ใส่สูตรใน C2 และ D2 แล้วลากลงมาทั้งคอลัมน์
=ISTEXT(B2)=ISNUMBER(B2)ISTEXT = TRUE หมายถึงเป็นข้อความ ส่วน ISNUMBER = TRUE หมายถึงเป็นตัวเลข ซึ่งวันที่จริงก็เป็นตัวเลขเช่นกันครับ
วิธีที่ 2: เปลี่ยน Format เป็น General
เลือกเซลล์วันที่ แล้วไปที่ Home → Number Format → General
| ผลที่เห็น | การตีความ |
|---|---|
| เปลี่ยนเป็น Serial Number | ค่าเป็นตัวเลขที่ถูกจัดรูปแบบเป็นวันที่ |
| ยังเป็นข้อความเดิม | มีโอกาสสูงว่าเป็น Text |
การตรวจนี้ช่วยแยกชนิดข้อมูล แต่ยังต้องตรวจว่าตัวเลขนั้นเป็นวันที่ที่ถูกต้องตามงานด้วยครับ
ทำไมไม่ใช้ =B2+1 เป็นตัวตรวจหลัก?
เพราะ Excel อาจแปลงข้อความบางรูปแบบให้เป็นวันที่ระหว่างการคำนวณได้ การที่สูตรบวก 1 สำเร็จจึงไม่ได้พิสูจน์ว่าค่าเดิมเป็น Date จริง และถ้าค่าเป็นตัวเลขทั่วไปก็อาจบวกได้เช่นกันครับ
เลือกวิธีแก้วันที่ให้ตรงกับปัญหา
ไม่ควรใช้สูตรเดียวกับวันที่ทุกแบบครับ ให้ดูชนิดข้อมูลและรูปแบบต้นทางก่อน แล้วเลือกวิธีที่เหมาะสมดังนี้
ใช้ Text to Columns หรือ DATEVALUE
ถ้าข้อมูลทั้งคอลัมน์เป็นข้อความแบบ DMY เช่น 31/08/2026 และทราบรูปแบบแน่นอน การใช้ Text to Columns จะช่วยระบุลำดับวันเดือนปีได้ชัดเจนครับ
- สำรองคอลัมน์ต้นฉบับ แล้วเลือกคอลัมน์สำเนาที่ต้องการแปลง
- ไปที่ Data → Text to Columns → Delimited
- กด Next จนถึงขั้นตอน Column data format
- เลือก Date แล้วเลือก DMY, MDY หรือ YMD ให้ตรงกับต้นทาง
- กด Finish จากนั้นตรวจชนิดข้อมูลและวันที่ตัวอย่างอีกครั้ง
ถ้าต้องการเก็บข้อมูลเดิมไว้และสร้างคอลัมน์ใหม่ สามารถใช้ DATEVALUE หรือ VALUE ได้เมื่อ Excel ตีความข้อความนั้นได้ถูกต้องครับ
=DATEVALUE(B2)=VALUE(B2)ถ้าผลลัพธ์เป็น Serial Number ให้กำหนด Number Format เป็น Date ภายหลัง แต่ถ้าได้ #VALUE! หรือวันที่ไม่ตรงกับต้นทาง อย่าฝืนใช้สูตรเดิม ให้ตรวจรูปแบบก่อนครับ
ใช้ DATE ประกอบปี เดือน และวัน
สมมติ B2 เป็นรหัสวันที่ 20260831 ซึ่งระบบต้นทางยืนยันว่าเรียงเป็นปี ค.ศ. 4 หลัก ตามด้วยเดือนและวันอย่างละ 2 หลัก
=DATE(VALUE(LEFT(B2,4)),VALUE(MID(B2,5,2)),VALUE(RIGHT(B2,2)))สูตรนี้แยกปี 2026 เดือน 08 และวัน 31 แล้วนำมาสร้างเป็นวันที่จริง โดยไม่ต้องให้ Excel เดารูปแบบวัน/เดือนจากข้อความที่มีเครื่องหมายคั่นครับ
อย่าแปลงซ้ำโดยไม่จำเป็น
ถ้า ISNUMBER ได้ TRUE และตรวจสอบแล้วว่าเป็นวันที่ที่ถูกต้อง สามารถใช้ค่าดังกล่าวคำนวณต่อได้เลย หากต้องการแยกปี เดือน หรือวัน ให้ใช้ YEAR, MONTH และ DAY ตามปกติ
=YEAR(B2)=MONTH(B2)=DATE(YEAR(B2),MONTH(B2),DAY(B2))สูตร DATE(YEAR(...),MONTH(...),DAY(...)) เหมาะกับการประกอบวันที่ใหม่จากค่าที่ Excel อ่านเป็นวันที่ได้อยู่แล้ว ไม่ใช่วิธีแก้ Text ทุกชนิด และหากมีเวลาอยู่ในเซลล์ สูตรนี้จะสร้างวันที่โดยไม่เก็บส่วนเวลาไว้ครับ
ตรวจ DMY, MDY และปีต้นทางก่อนแปลง
| ข้อความต้นทาง | รูปแบบ | ความหมาย |
|---|---|---|
| 31/08/2026 | DMY | 31 สิงหาคม 2026 |
| 08/31/2026 | MDY | 31 สิงหาคม 2026 |
| 2026/08/31 | YMD | 31 สิงหาคม 2026 |
| 03/04/2026 | ยังไม่ทราบ | อาจเป็น 3 เมษายน หรือ 4 มีนาคม |
ควรตรวจเอกสารระบบต้นทางหรือสอบถามผู้ส่งข้อมูลก่อน หากไม่มีข้อมูลกำกับ ลองตรวจวันที่ที่มีเลขวันมากกว่า 12 เพื่อช่วยระบุรูปแบบ แต่ไม่ควรใช้เพียงแถวเดียวฟันธงว่าทั้งไฟล์เหมือนกันครับ
สำหรับปี พ.ศ. ให้แยกระหว่าง การแสดงผลวันที่แบบไทย กับ ข้อความที่มีปี พ.ศ. จริง หากเป็นวันที่จริงที่เพียงแสดงปีแบบไทย ไม่ต้องนำไปลบ 543 อีก ส่วนการแปลงข้อความปี พ.ศ. ต้องทราบรูปแบบต้นทางและตรวจสอบผลลัพธ์ก่อนใช้งานครับ
ใช้ Power Query เพื่อจัดการตั้งแต่ต้นทาง
ถ้าต้องรับไฟล์รูปแบบเดิมเป็นประจำ สามารถกำหนดขั้นตอนนำเข้าและแปลงชนิดข้อมูลใน Power Query ไว้ครั้งเดียว แล้ว Refresh เมื่อมีไฟล์ใหม่ได้ โดยควรระบุ Locale ให้ตรงกับรูปแบบวันที่ต้นทาง และตรวจสอบ Error หลังแปลงทุกครั้งครับ
ตัวอย่างงานจริง: คำนวณช่วงวันเมื่อข้อมูลถูกต้องแล้ว
สมมติฝ่าย Admin ต้องการหาจำนวนวันระหว่างวันเริ่มต้นและวันสิ้นสุดของงาน โดยกำหนดให้ B และ C เป็นวันที่จริงของ Excel และข้อมูลเริ่มที่แถว 2 ครับ
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | รายการ | วันที่เริ่มต้น | วันที่สิ้นสุด | จำนวนวัน | รวมวันเริ่มต้น |
| 2 | JOB001 | 01/08/2026 | 05/08/2026 | 4 | 5 |
| 3 | JOB002 | 10/08/2026 | 10/08/2026 | 0 | 1 |
| 4 | JOB003 | 28/08/2026 | 02/09/2026 | 5 | 6 |
ตัวอย่างคำนวณช่วงวัน: B และ C เป็นวันที่จริง และ D/E เป็นตัวเลขจำนวนวัน
หาจำนวนวันระหว่างสองวันที่
ใส่สูตรใน D2 แล้วลากลงมาทั้งคอลัมน์
=C2-B2JOB001 เริ่ม 1 สิงหาคมและสิ้นสุด 5 สิงหาคม จึงมีผลต่าง 4 วัน ส่วน JOB002 เริ่มและสิ้นสุดวันเดียวกัน ผลต่างเป็น 0 วันครับ
ถ้าต้องการนับรวมวันเริ่มต้นด้วย
ใส่สูตรใน E2 โดยใช้กติกาว่านับทั้งวันเริ่มต้นและวันสิ้นสุด
=C2-B2+1ดังนั้น JOB001 จะได้ 5 วัน และ JOB002 จะได้ 1 วันครับ
ถ้าต้องการนับเฉพาะวันทำงาน
สามารถใช้ NETWORKDAYS เป็นอีกทางเลือก โดยค่าเริ่มต้นจะนับวันจันทร์–ศุกร์ และสามารถระบุช่วงวันหยุดเพิ่มเติมได้
=NETWORKDAYS(B2,C2,$H$2:$H$10)ตัวอย่างนี้สมมติว่ามีรายการวันหยุดจริงอยู่ใน H2:H10 หากไม่มีตารางวันหยุด สามารถใช้ =NETWORKDAYS(B2,C2) ได้ครับ
Checklist: เช็กวันที่ก่อนนำไปทำ Pivot Table หรือ Dashboard
หลังแปลงข้อมูลแล้ว อย่าตรวจแค่สูตรว่าไม่ขึ้น Error ครับ ควรตรวจความถูกต้องของข้อมูลก่อนสร้างรายงานด้วย
| สิ่งที่ต้องตรวจ | วิธีตรวจสอบ |
|---|---|
| ชนิดข้อมูล | ใช้ ISTEXT / ISNUMBER และตรวจค่าในคอลัมน์วันที่ |
| ลำดับวัน–เดือน–ปี | เทียบกับข้อมูลต้นทาง โดยเฉพาะวันที่ที่ตีความได้สองแบบ |
| ปี พ.ศ./ค.ศ. | ตรวจว่าปีเป็นส่วนของข้อความหรือเป็นเพียงรูปแบบการแสดงผล |
| ค่าว่างและ Error | Filter หาค่าว่าง, #VALUE! และข้อมูลที่แปลงไม่สำเร็จ |
| ช่วงวันที่ | ตรวจวันที่เก่า/ใหม่ผิดปกติ และเปรียบเทียบกับช่วงเวลาที่งานควรมีข้อมูล |
| ผลลัพธ์รายงาน | สุ่มเทียบจำนวนรายการและยอดรวมกับข้อมูลต้นทางก่อนส่งผู้บริหาร |
ตัวอย่างสูตรช่วยตรวจช่วงวันที่
สมมติ B2 ควรเป็นวันที่จริงระหว่าง 1 มกราคม 2020 ถึง 31 ธันวาคม 2030 สามารถใช้สูตรนี้ช่วยคัดกรองได้ครับ
=IF(B2="","ยังไม่มีข้อมูล",IF(NOT(ISNUMBER(B2)),"ตรวจชนิดข้อมูล",IF(AND(B2>=DATE(2020,1,1),B2<DATE(2031,1,1)),"อยู่ในช่วงที่กำหนด","ตรวจช่วงวันที่")))สูตรนี้เป็นเพียงตัวช่วยตรวจช่วงข้อมูลตามเกณฑ์ที่กำหนด ไม่ได้ยืนยันว่าตัวเลขทุกค่าคือวันที่ที่ถูกต้องตามเหตุการณ์จริง และควรปรับช่วงปีให้ตรงกับงานของคุณครับ
คำถามที่พบบ่อยเกี่ยวกับวันที่ใน Excel
วันที่ใน Excel เป็น Text ดูอย่างไร?
ใช้ ISTEXT ตรวจว่าเป็นข้อความ และ ISNUMBER ตรวจว่าเป็นตัวเลข หรือเปลี่ยน Format เป็น General เพื่อดูค่าภายใน ทั้งนี้ ISNUMBER เพียงอย่างเดียวไม่ได้ยืนยันว่าตัวเลขนั้นเป็นวันที่ที่ถูกต้องครับ
เปลี่ยน Format เป็น Date แล้วทำไมยังใช้สูตรไม่ได้?
เพราะการเปลี่ยนรูปแบบการแสดงผลไม่ได้เปลี่ยน Text ให้เป็น Date จริง ต้องตรวจชนิดข้อมูลและแปลงให้เหมาะกับรูปแบบต้นทางก่อนครับ
ใช้ VALUE หรือ DATEVALUE แล้วได้ #VALUE! ต้องทำอย่างไร?
ตรวจรูปแบบข้อความและ Regional Setting ก่อน หากทราบว่าต้นทางเป็น DMY, MDY หรือ YMD ให้ใช้วิธีที่ระบุรูปแบบได้ชัดเจน เช่น Text to Columns หรือ Power Query และตรวจผลลัพธ์กับข้อมูลต้นทางครับ
สูตร DATE(YEAR(A2),MONTH(A2),DAY(A2)) แก้ Text ได้ทุกแบบไหม?
ไม่ได้ครับ สูตรนี้เหมาะกับค่าที่ Excel อ่านเป็นวันที่ได้อยู่แล้ว หากต้นทางเป็นข้อความที่ Excel ไม่รู้จัก หรือมีรูปแบบวันเดือนปีไม่ตรงกับเครื่อง ควรแปลงจากรูปแบบต้นทางให้ถูกต้องก่อน
วันที่ พ.ศ. ต้องลบ 543 ทุกครั้งหรือไม่?
ไม่ครับ หากเป็นวันที่จริงที่เพียงแสดงผลด้วยปฏิทินไทย ไม่ต้องลบ 543 อีก การแปลงปีควรทำเมื่อทราบแน่ชัดว่าค่าต้นทางเป็นปี พ.ศ. ที่ต้องแปลงเป็นปี ค.ศ. และต้องตรวจสอบผลลัพธ์ด้วย
วันที่จริงแล้ว แต่ Pivot Table ยัง Group ไม่ได้ เกิดจากอะไร?
ควรตรวจข้อมูลทั้งคอลัมน์ว่ามี Text, ค่าว่าง, Error หรือข้อมูลที่ไม่ใช่วันที่ปะปนหรือไม่ รวมถึงตรวจว่าข้อมูลต้นทางถูกแปลงและ Refresh แล้ว และวิธี Group ที่ใช้รองรับกับรูปแบบ Pivot Table นั้นหรือไม่ครับ
สรุป: วันที่ถูกต้องคือพื้นฐานของรายงานที่น่าเชื่อถือ
เมื่อวันที่ใน Excel มีปัญหา ให้เริ่มจากตรวจชนิดข้อมูลก่อน จากนั้นตรวจรูปแบบวัน/เดือน/ปีและค่าต้นทาง แล้วเลือกวิธีแปลงที่เหมาะสม ไม่ควรเปลี่ยน Format หรือใช้สูตรเดาสุ่มกับข้อมูลจำนวนมากครับ
ถ้าข้อมูลเป็น Date จริงและตรวจสอบกับต้นทางแล้ว การคำนวณช่วงวัน การสรุปรายเดือน และการต่อยอดไป Pivot Table หรือ Dashboard ก็จะมีความน่าเชื่อถือมากขึ้นครับ