Archive for มกราคม 4, 2009

Function “Datedif” for OpenOffice.org

ที่สำนักงาน ผมติดตั้ง OpenOffice.org ให้ทุกเครื่อง ยกเว้นอยู่เครื่องหนึ่งที่ยังจำเป็นต้องลง MS Office คู่กันไปด้วย เพราะมีโปรแกรมพิมพ์เช็คที่คนเก่าเขาทำไว้ให้อิงกับ MS Access (ผมยังหาวิธีแก้ไม่ได้)

ปรากฏว่าพอมี MS Office ที่เครื่องนั้น เจ้าของเครื่องก็ไม่ยอมใช้ OpenOffice.org แต่ใช้ Excel ในการทำงาน พอส่งงานไปให้ผู้จัดการก็มีปัญหาสูตรเข้ากันไม่ได้ โดยสูตรที่มีปัญหาจะปรากฏเป็น ERROR

ผมจึงขอร้องแกมบังคับขู่เข็ญให้เธอใช้ OpenOffice.org อย่างจริงจังตั้งแต่นี้ต่อไป เพราะ MS Office ที่ใช้อยู่ทุกวันนี้ เป็นเวอร์ชั่นทดลอง เขาให้ใช้ได้ ๖๐ วัน เมื่อครบเวลา ต้องนำ backup image ที่ยังไม่มี MS Office กลับมา แล้วค่อยลงโปรแกรมออฟฟิศใหม่ เพราะทางบริษัทไม่มีนโยบายซื้อ MS Office (จ่ายเป็นหมื่น แต่ใช้งานไม่คุ้มราคา)

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

“ผมขอรบกวนถามสูตรคำนวณอายุงานเป็น ปี เดือน วัน ด้วยครับ ผมหาบนอินเตอร์เน็ตแล้วเจอแต่คำนวณได้เป็นปีเท่านั้นครับ”

ไม่นานนักผมก็ได้คำตอบกลับมาว่า

“ให้อ่านที่ http://www.stks.or.th/web/index.php?option=com_content&task=view&id=1727&Itemid=132

เฉพาะ Excel จะมีฟังก์ชัน datedif ให้ แต่ถ้าเป็น calc ต้องใช้สูตรสุดท้ายครับ”

เมื่อทดลองแล้ว ผลที่ได้ยังไม่ได้ตรงตามความต้องการ คือจำนวนเดือน และวันจะมีเศษเป็นจุดทศนิยม จึงอีเมลไปถามอีก และได้คำตอบกลับมาในเวลารวดเร็วว่า

“อันนี้คือปัญหาของ Excel ครับเพราะเราไมได้คำนวณจากปีอธิกสุทินจริงๆๆ

ดังนั้นหากต้องการละเอียดและถูกต้องต้องเขียนโปรแกรมคำนวณเองครับ

excel จะทำปกติไม่ได้ครับ (ต้องเขียน vb action )

ยังไงต้องให้ทีมโปรแกรมเมอร์ดำเนินการให้ดีกว่าครับ

โดยหลักคือ จะต้องเช็คก่อนว่าปีที่จะนำมาคำนวณเป็นปีอาธิกสุทินไหม”

หลังจากที่รบกวนมาหลายอีเมล แต่ยังแก้ปัญหาไม่ได้ตามต้องการ
ผมจึงลองใช้คีย์เวิร์ดที่ได้มาจากอีเมลฉบับก่อน คือ “datedif openoffice.org” เข้าไปหาใน google

แล้วในที่สุดผมก็เจอเว็บนี้เข้า
http://www.openofficetips.com/2007/07/24/who-needs-datedif-revisited/

เมื่อทดสอบทำตามแล้วก็ได้ผลดังนี้

กำหนดให้ A2= วันที่เริ่มงาน, B2= วันสุดท้ายของปี

สูตรคำนวณ :
ปี
=MOD(YEARS(A2;$B$2;0);12)

เดือน
=MOD(12*(YEAR($B$2)-YEAR($A2))+MONTH($B$2)-MONTH($A2)-(DAY($B$2)<DAY($A2));12)

วัน
=INT($B$2-DATE(YEAR($A2);MONTH($A2)+12*(YEAR($B$2)-YEAR($A2))+MONTH($B$2)-MONTH($A2)-(DAY($B$2)<DAY($A2));DAY($A2)))

พอให้น้องที่ทำงานทดสอบแล้วน้องบอกว่าใช้งานได้ดี (มีบ่นว่าสูตรมันยาวนิดหน่อย)

จึงนำเรื่องราวนี้มาโพส เผื่อว่าจะได้ช่วยเผยแพร่วิธีแก้ปัญหานี้ให้คนอื่นๆ ได้อีกต่อไป :)

Comments (27)