กระทู้เก่าบอร์ด อ.สุภาพ ไชยา
597 1
URL.หัวข้อ /
URL
ข้อผิดพลาดของสูตร Bahttext และวิธีแก้
มีคนแจ้งเข้ามาที่พันธ์ทิพย์วันนี้เกี่ยวกับ Bugs ของ BahtText() ใน Excel ที่
http://pantip.inet.co.th/tech/software/topic/SA880447.html
มีข้อความดังนี้
ป้าไก่เผอิญไปอ่านข้อความที่ xls.how.to นะค่ะ เขียนโดยคุณนัท คุณอรวีร์ และคุณกิติพันธ์ช่วยกันแก้
ปัญหาที่ประสบกับหน่วยงานทางราชการที่ใช้ฟังก์ชัน Bahttext ขออนุญาต 3 ท่านนำมาเผยแพร่และขอขอบคุณมา ณ โอกาสนี้
เนื่องจากสูตร Battext เวลาอ่านเลข 1 ที่อยู่ในหลักหน่วยแล้วมีเลขศูนย์นำหน้าจะอ่านผิดหลักไวยากรณ์เช่น 701.25 ใช้ฟังก์ชัน BahtText แล้วจะอ่านได้เป็น เจ็ดร้อย หนึ่ง บาท ยี่สิบห้าสตางค์ แต่ในความเป็นจริงตามหลักไวยากรณ์ที่ถูกต้องควรอ่าน เจ็ดร้อย เอ็ด บาท ยี่สิบห้าสตางค์
สูตรที่ใช้แก้ไขคือ
=IF(A1="","",IF(OR(LEFT(A1,2)="1.",LEFT(A1,3)="-1."),BAHTTEXT(A1),
SUBSTITUTE(BAHTTEXT(A1),"หนึ่งบาท",
IF(AND(ABS(A1)>1,MOD(TRUNC(A1/10),10)=0),"เอ็ดบาท","หนึ่งบาท")))) ---> สูตรของคุณนัท
สูตรของคุณอรวีร์
=IF(A1="","",SUBSTITUTE(BAHTTEXT(A1),"หนึ่งบาท", IF(AND(ABS(A1)>=101,MOD(TRUNC(A1/10),10)=0),"เอ็ดบาท","หนึ่งบาท")))
ต้นฉบับขอคุณกิตติพันธ์
=SUBSTITUTE(BAHTTEXT(A1),"หนึ่งบาท",IF(AND(ABS(A1)>1,MOD(TRUNC(A1/10),10)=0),"เอ็ดบาท","หนึ่งบาท"))
จากคุณ : ป้าไก่ [1 มี.ค. 2545 - 12:23:21]
สำหรับโค้ดตัวอย่างการทำ BahtText() ในตัวอย่างของผมที่ได้ไว้ที่
http://agserver.kku.ac.th/basiceng/Computer/download/BahtText.zip
ก็จะมีบักเช่นกัน แต่ผมได้แก้ให้แล้วครับ โดยเพิ่มบรรทัดที่มีสีแดงลงไปครับ
...
' base ten and number 1
If DigitBase = 1 And CurrDigit = 1 And PrevDigit <> 0 Then
DigitSave = "เอ็ด"
ElseIf DigitBase = 1 And CurrDigit = 1 And PrevDigit = 0 Then
DigitSave = "เอ็ด"
End If
...
โค้ดนี้เขียนโดยทีมที่พัฒนาภาษาไทย (IRC) ให้กับไมโครซอฟท์ประเทศไทยนะครับ ไม่ใช่ตัวผม
http://pantip.inet.co.th/tech/software/topic/SA880447.html
มีข้อความดังนี้
ป้าไก่เผอิญไปอ่านข้อความที่ xls.how.to นะค่ะ เขียนโดยคุณนัท คุณอรวีร์ และคุณกิติพันธ์ช่วยกันแก้
ปัญหาที่ประสบกับหน่วยงานทางราชการที่ใช้ฟังก์ชัน Bahttext ขออนุญาต 3 ท่านนำมาเผยแพร่และขอขอบคุณมา ณ โอกาสนี้
เนื่องจากสูตร Battext เวลาอ่านเลข 1 ที่อยู่ในหลักหน่วยแล้วมีเลขศูนย์นำหน้าจะอ่านผิดหลักไวยากรณ์เช่น 701.25 ใช้ฟังก์ชัน BahtText แล้วจะอ่านได้เป็น เจ็ดร้อย หนึ่ง บาท ยี่สิบห้าสตางค์ แต่ในความเป็นจริงตามหลักไวยากรณ์ที่ถูกต้องควรอ่าน เจ็ดร้อย เอ็ด บาท ยี่สิบห้าสตางค์
สูตรที่ใช้แก้ไขคือ
=IF(A1="","",IF(OR(LEFT(A1,2)="1.",LEFT(A1,3)="-1."),BAHTTEXT(A1),
SUBSTITUTE(BAHTTEXT(A1),"หนึ่งบาท",
IF(AND(ABS(A1)>1,MOD(TRUNC(A1/10),10)=0),"เอ็ดบาท","หนึ่งบาท")))) ---> สูตรของคุณนัท
สูตรของคุณอรวีร์
=IF(A1="","",SUBSTITUTE(BAHTTEXT(A1),"หนึ่งบาท", IF(AND(ABS(A1)>=101,MOD(TRUNC(A1/10),10)=0),"เอ็ดบาท","หนึ่งบาท")))
ต้นฉบับขอคุณกิตติพันธ์
=SUBSTITUTE(BAHTTEXT(A1),"หนึ่งบาท",IF(AND(ABS(A1)>1,MOD(TRUNC(A1/10),10)=0),"เอ็ดบาท","หนึ่งบาท"))
จากคุณ : ป้าไก่ [1 มี.ค. 2545 - 12:23:21]
สำหรับโค้ดตัวอย่างการทำ BahtText() ในตัวอย่างของผมที่ได้ไว้ที่
http://agserver.kku.ac.th/basiceng/Computer/download/BahtText.zip
ก็จะมีบักเช่นกัน แต่ผมได้แก้ให้แล้วครับ โดยเพิ่มบรรทัดที่มีสีแดงลงไปครับ
...
' base ten and number 1
If DigitBase = 1 And CurrDigit = 1 And PrevDigit <> 0 Then
DigitSave = "เอ็ด"
ElseIf DigitBase = 1 And CurrDigit = 1 And PrevDigit = 0 Then
DigitSave = "เอ็ด"
End If
...
โค้ดนี้เขียนโดยทีมที่พัฒนาภาษาไทย (IRC) ให้กับไมโครซอฟท์ประเทศไทยนะครับ ไม่ใช่ตัวผม
1 Reply in this Topic. Dispaly 1 pages and you are on page number 1
1 @R00180
ไม่ใช่ผมจะบอกว่าทีมงานเขาเขียนไม่ดีนะครับ เขาเขียนได้เก่งมาก ผมเองยังไม่ได้ครึ่งของทีมงานด้วยซ้ำ แต่คงไม่เข้าใจครอบคลุมแค่นั้นเอง ถ้าผมยังคิดออกว่าควรจะเพิ่มตรงไหนเมื่อทราบว่าผลที่ถูกต้องจริงๆ คืออะไร ทีมงานเขาคงเพิ่มเข้าไปได้สบายมากครับถ้าเขาทราบเช่นกัน
Time: 0.1464s