ความแตกต่างของ Excel และ Google Sheets ที่คนส่วนใหญ่(ยัง)ไม่รู้

ถ้าพิมพ์เลข 1 แล้วเปลี่ยนฟอร์แมตเป็นวันที่ (Date)

ใน Excel จะได้ 1 Jan 1900
ใน Google Sheets จะได้ 31 Dec 1899

[ ทำไมไม่เท่ากัน? ]

โปรแกรมทั้งสองมองว่าค่าที่แท้จริงของวันที่คือตัวเลข และเพิ่มขึ้น 1 ในทุก ๆ วัน

Excel กำหนดให้ 1 เทียบเท่า 1 Jan 1900
2 จึงเทียบเท่า 2 Jan 1900

Google Sheets กำหนดให้ 1 เทียบเท่า 31 Dec 1899
2 จึงเทียบเท่า 1 Jan 1900

[ แล้วทำไมไม่กำหนดให้เหมือนกัน? ]

เรื่องนี้ต้องเล่าย้อนประวัติศาสตร์กันนิดนึง 🙂

MS Excel เป็นโปรแกรมสเปรตชีต (Spreadsheet) ที่ได้รับความนิยมอย่างมาก ออกเวอร์ชันแรก (Excel 1.0) ตั้งแต่ 40 ปีก่อน หรือปี 1985

แต่ Excel ไม่ใช่โปรแกรมสเปรตชีตแรกในตลาด ก่อนหน้านั้นก็มีหลายโปรแกรม และโปรแกรมที่ได้รับความนิยมมากที่สุดคือ Lotus 1-2-3
(ถ้าคุณร้องอ๋อ แสดงว่าอยู่แถวดอนเมือง (เลยหลักสี่ 😁))

Lotus 1-2-3 มองว่าค่าที่แท้จริงของวันที่คือตัวเลข และกำหนดให้
1 เทียบเท่า 1 Jan 1900
2 เทียบเท่า 2 Jan 1900
.
.
60 เทียบเท่า 29 Feb 1900
61 เทียบเท่า 1 Mar 1900

แต่.. Lotus 1-2-3 อาจลืมไปว่าปี 1900 ไม่มีวันที่ 29 กุมภาพันธ์!

ใช่, ปี 1900 ไม่ใช่ปีอธิกสุรทิน (Leap Year) ดังนั้นจึงไม่มีวันที่ 29 กุมภาพันธ์ 1900

Lotus 1-2-3 อาจรู้ความจริงข้อนี้ภายหลัง แต่ก็แก้ไขไม่ทัน ต้องปล่อยให้เลยตามเลย 😭

(ปัญหาเรื่องวันที่ 29 กุมภาพันธ์ 1900 มีชื่อทางเทคนิคว่า Leap Year Bug)

Excel เห็นปัญหานี้ตั้งแต่ต้น
Excel เวอร์ชันแรก (Excel 1.0, Excel for Mac) จึงกำหนดให้ 1 เป็นวันที่ 1 Jan 1904
(1904-based system)
(ตัดปี 1900-1903 ออกจากระบบไปเลย)

แต่เมื่อออกเวอร์ชันใหม่ในปี 1987 (Excel 2.0) ซึ่งเป็น Excel for Windows ไมโครซอฟท์ต้องการให้ผู้ใช้งานจาก Lotus 1-2-3 ปรับตัวง่าย และย้ายไฟล์โดยไม่เกิดปัญหา จึงเปลี่ยนมากำหนดให้ 1 เป็นวันที่ 1 Jan 1900 เหมือน Lotus 1-2-3
(1900-based system)

ยอมหลับตาให้มีวันที่ 29 กุมภาพันธ์ 1900 (แม้จะรู้ว่าผิด) และใช้งานมาถึงปัจจุบัน

Google เห็นปัญหาข้อนี้และไม่ต้องการซ้ำรอย

เพื่อแก้ปัญหาเรื่อง Leap Year Bug และให้ย้ายไฟล์จาก Excel มาที่ Google Sheets ได้ง่าย จึงมี ‘ทริก’ เล็กน้อย

[ ‘ทริก’ ที่ว่าคืออะไร?]

คือกำหนดให้ 1 เป็นวันที่ 31 Dec 1899 แทน
2 จึงเป็นวันที่ 1 Jan 1900
3 จึงเป็นวันที่ 2 Jan 1900
.
.
60 จึงเป็นวันที่ 28 Feb 1900
61 จึงเป็นวันที่ 1 Mar 1900

ด้วยทริกนี้ จึงทำให้ Google Sheets ไม่มีวันที่ 29 Feb 1900 และไม่มีปัญหาเรื่องย้ายไฟล์

เจ๋งอ่ะ!

(ยกเว้นเลข 1-60 ซึ่งแปลงเป็นวันที่ได้ไม่เท่ากัน)
(Note: ในภาษา M Code และ DAX ก็กำหนดให้ 1 เทียบเท่า 31 Dec 1899 เช่นกัน)

ความเจ๋งอีกข้อของ Google Sheets คือ ยอมให้เลขติดลบเป็นวันที่ได้ เช่น
0 เป็นวันที่ 30 Dec 1899
-1 เป็นวันที่ 29 Dec 1899
-2 เป็นวันที่ 28 Dec 1899

(Excel ไม่ยอมให้เลขติดลบเป็นวันที่)

ในทางปฏิบัติ เราคงอ้างอิงวันที่ในปี 1900 กันน้อยมาก ถ้าพูดถึงวันที่ในปัจจุบันหรือย้อนหลังไม่เกิน 100 ปี ตัวเลขของ Excel และ Google Sheets จึงมีค่าเท่ากัน

เช่น วันที่ 31 สิงหาคม 2025 มีค่า 45,900 เท่ากันทั้ง Excel และ Google Sheets

เรื่องมันก็เป็นเช่นนี้แล 🙂

วิศวกรรีพอร์ต

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

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.