[Excel] ใครอยากได้ Code แปลงวันที่ปกติ เป็นวันที่ทางจันทรคติไทย มาทางนี้


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

เมื่อได้ตัวเลขมาแล้ว จึงได้มาปรับเป็น VBA Code งม code อยู่เป็นเดือนๆ กว่าจะสามารถคำนวณได้ตรงกับปฏิทินหลวง ก็ใช้เวลาพอสมควร
หลักวิธีการคำนวณวันที่จันทรคติไทยแบบใหม่ที่ไม่ต้องอิงตำราโหรใดๆ เพราะอันนี้ผมคิดขึ้นมาเอง ตามหลักการที่ อ.ลอยได้กล่าวไว้
การคำนวณจันทรคติไทยนั้น จำเป็นต้องรู้วิธีการคำนวณ ปีอธิกมาส กับ ปีอธิกวาร ก่อน ปีอธิกมาส คือ ปีที่มีเดือนเพิ่มมาเป็น 13 เดือน เพื่อชดเชยความคลาดเคลื่อนระหว่างปีจันทรคติกับปีสุริยคติ ซึ่งจะมีทุกๆ 2-3 ปี ส่วนปีอธิกวารนั้น คือ ปีที่มีวันเพิ่มมา 1 วัน เพื่อชดเชยความความคลาดเคลื่อนของวันเพ็ญ การคำนวณธิกมาสนั้นไม่ยาก เป็นสูตรตายตัว แต่อธิกวารนั้นซับซ้อนมากๆ เพราะจะต้องใส่ในปีที่ไม่เป็นอธิกมาส และต้องเป็นปีที่มีความคลาดเคลื่อนของวันเพ็ญเกินระดับหนึ่ง สิ่งที่คำนวณยากก็คือ ความคลาดเคลื่อนนี่แหล่ะครับ เพราะต้องคำนวณทั้งปีก่อนหน้าและปีปัจจุบัน อยากรู้ว่าความคลาดเคลื่อนคำนวณยังไง ก็ไปดูในคลิปของ อ.ลอยได้เลยครับ

พอผมได้ข้อมูลครบ ทั้ง อธิกมาส อธิกวาร และความคลาดเคลื่อนมาครบแล้ว ก็ได้นำมาแยกเป็นสูตร Function แต่ละอัน ประมาณว่าพอใส่คำสั่ง Athikamas(ปี ค.ศ.) ก็จะรู้ทันทีว่าปีนั้นเป็นปีอธิกมาสหรือไม่ หรือ Athikavar(ปี ค.ศ.) ก็จะรู้ว่าเป็นปีอธิกวารหรือไม่ โดยจะแสดงผลลัพธ์เป็น True หรือ False

เมื่อได้ สูตรสำหรับตรวจสอบปีได้แล้ว เราก็ต้องมาหาข้อมูลว่า เราจะเริ่มต้นนับจากปีอะไร เนื่องจากปีจันทรคติจะต้องอ้างอิงปีสุริยคติ ผมจึงเลือกเริ่มต้นที่ปี 1903 (เนื่องจาก Excel รองรับข้อมูลวันที่จากปี 1900 เป็นต้นไป และจากการตรวจสอบพบว่า ปี 1902 ของปฏิทินหลวงมีความคลาดเคลื่อนจากการคำนวณ) ซึ่งก็ต้องรู้ว่าวันขึ้น 1 ค่ำ เดือน 1 ตรงกับวันที่เท่าไร แล้วหลังจากนั้น ก็บวกปีเข้าไป หากปีไหนเป็นปีปกติวาร ก็บวก 354 ปีไหนเป็นอธิกวาร ก็บวก 355 อธิกมาส ก็บวก 384 ไปจนถึงปีก่อนปีปัจจุบัน หลังจากนั้นค่อยบวกเดือนและวันอีกที ซึ่งเดือน ก็จะเป็นไปตามกฎ คือ ถ้าปีปกติก็จะมีเดือนคู่ 30 วัน เดือนคี่ 29 วัน รวม 12 เดือนก็ 354 วัน ปีอธิกวารก็มีเดือน 7 ที่เพิ่มเป็น 30 วัน ปีอธิกมาส ก็เพิ่มเดือน 88 มาอีกเดือนถัดจากเดือน 8 ... แล้วก็รับถือวันที่ระบุ ก็จะได้วันที่แบบจันทรคติออกมา

ในส่วนของปีนักษัตร ประเทศไทยมีการใช้ปีนักษัตรหลายแบบมากๆ ดังนี้
1. แบบปฏิทินหลวง จะเปลี่ยนปีเมื่อวันขึ้น 1 ค่ำ เดือน 1 ของทุกปี (ราวๆ เดือนธันวาคม) ใช้ในระบบราชการ เช่น ในสูติบัตร ก็จะใช้ระบบนี้
2. แบบปฏิทินโหร จะเปลี่ยนปีเมื่อวันขึ้น 1 ค่ำ เดือน 5 ของทุกปี (ราวๆ เดือนมีนาคม) ใช้ในการดูดวง หรืออะไรที่เกี่ยวข้องกับโหราศาสตร์ ดังนั้นคนที่เกิดช่วงเดือน ธ.ค. ถึง เม.ย. ก็จะได้ปีที่ไม่ตรงกับในสูติบัตร ถ้าจะไปดูดวง
3. แบบปฏิทินสากล จะเปลี่ยนปีเมื่อวันที่ 1 มกราคม ของทุกปี
4. แบบปฏิทินจีน จะเปลี่ยนปีเมื่อวันตรุษจีนของทุกปี ราวๆ เดือน ก.พ.ของทุกปี ใช้ในการดูปีชง และการดำเนินกิจกรรมตามประเพณีจีน เช่น สารทจีน ตรุษจีน
5. แบบปฏิทินล้านนา จะเปลี่ยนปีเมื่อถึงวันเถลิงศก (ราวๆ วันที่ 16 เมษายนของทุกปี) ใช้ในแถบภาคเหนือของไทย

ในส่วนของการคำนวณจันทรคติของผมนั้น ผมรองรับปีนักษัตร แค่ 3 แบบคือ 1-3 เท่านั้น ส่วนข้อ 4 และ 5 จำเป็นต้องใช้วิธีคำนวณที่ต่างออกไป เลยแยกสูตรไปเลยดีกว่า

ไปคัดลอกโค้ดได้ที่ https://gist.github.com/touchiep/99f4f5bb349d6b983ef78697630ab78e
...
วิธีคัดลอกโค้ด
1. คัดลอกโค้ดจากหน้าเว็บ
2. วางลงในหน้าจอ Excel ปกติ แล้วคัดลอกจากหน้าจอ Excel อีกครั้ง
3. กด ALT+F11 เพื่อเปิดหน้าจอ VBA คลิก insert module แล้ว Paste
4. ทดลองใช้งานได้เลย
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่