You are currently viewing เปลี่ยนเลขไทย ใน Microsoft Word

เปลี่ยนเลขไทย ใน Microsoft Word

เปลี่ยนเลขไทย แบบง่าย ๆ จะทำอย่างไร ถ้าไม่ใช้ฟอนต์ TH Sarabun IT๙ ด้วยเหตุผลที่เขียนไปด้วยเหตุผลที่เขียนไปแล้ว

หลังจากเขียนถึงเหตุผลที่ไม่อยากให้ใช้ TH Sarabun IT๙ กันไปแล้ว ทีนี้มาถึงการหาทางออกสำหรับผู้ที่ต้องการเปลี่ยนเลขอาราบิกให้เป็นเลขไทยแบบรวดเดียวกันบ้าง ในกรณีที่ได้เอกสาร (หรือ copy ข้อความมาจากที่อื่น) ที่เป็นเลขอารบิก

วิดีโอแสดงวิธีการ

เปลี่ยนเลขไทย ด้วย Find and Replace

วิธีแรก เป็นวิธีแก้ไขแบบบ้าน ๆ ไม่ต้องอาศัยทริกอะไรเลย ก็คือ Find and Replace คือ Find  ๑  Replace ด้วย 1 ทำแบบนี้ไปจนครบ 10 เลข กด Ctrl + H เลยจ้ะ ง่าย ๆ

เปลี่ยนเลขไทย

แต่ถ้าต้องทำตั้งแต่ ๐ – ๙ บางคนก็ว่ายุ่งยาก โอเค

เปลี่ยนเลขอารบิกเป็นเลขไทย ด้วย VBA

วิธีที่สอง งั้นเรามาเขียน VBA เพื่อ “ค้นหาและแทนที่” โดยคลิกเพียงแค่คลิกเดียว เราจะสร้าง code ให้ find แล้ว replace ตั้งแต่ ๐- ๙ โดยอัตโนมัติเมื่อสั่งงาน เพียงคลิกเดียว (หมายเหตุ ตัวอย่างที่ใช้จะทำด้วย Microsoft 365 เวอร์ชันอื่น อาจมีหน้าตาไม่เหมือนนี้ก็ได้ )

เปิด Word ขึ้นมา คลิกที่ View > Macros ใส่ชื่ออะไรก็ได้ในช่อง macro name คลิก Create เพื่อเข้าสู่ visual basic

เปลี่ยนเลขไทย

ใส่คำสั่งนี้เข้าไป

Sub arabic_to_thai()
For i = 0 To 9
With Selection.Find
.Text = Chr(48 + i)
.Replacement.Text = Chr(240 + i)
.Wrap = wdFindContinue
End With
Selection.Find.Execute Replace:=wdReplaceAll
Next
End Sub
Sub thai_to_arabic()
For i = 0 To 9
With Selection.Find
.Text = Chr(240 + i)
.Replacement.Text = Chr(48 + i)
.Wrap = wdFindContinue
End With
Selection.Find.Execute Replace:=wdReplaceAll
Next
End Sub
เปลี่ยนเลขอารบิกเป็นเลขไทย

คำสั่งนี้มีคำสั่งย่อย 2 คำสั่ง คือ arabictothai กับ thaitoarabic คือบรรทัดที่เขียนว่า Sub arabictothai () กับ Sub thaitoarabic() ตัวนี้จะเป็นการตั้งชื่อมาโคร

คำสั่งไม่มีอะไรมาก แค่ค้นหาเลข 0 – 9 แล้วแทนที่ด้วย ๐ – ๙ หรือในทางกลับกัน ค้นหาเลข ๐ – ๙ แล้วแทนที่ด้วย 0 – 9 ตัว Chr(48) เป็น Ascii code ของ 0 (เลขศูนย์ อาราบิก) แล้วก็ไล่ไปทีละตัว ส่วน Chr(240)เป็น Ascii code ของ ๐ (เลขศูนย์ ไทย)

วิธีใช้งาน และปรับแต่ง

วิธีใช้ก็ง่ายแสนง่าย ไปที่ View > Macros คลิกที่ชื่อมาโครที่ต้องการแล้วกด Run

แต่อย่างนั้นอาจจะไม่สะดวกเพราะคลิกหลายที ลองมาทำคีย์ลัดใน tools bar เรียกใช้มาโครให้ง่ายขึ้น

คลิกเมนู Customize Quick Access Toolbar > More Commands

ไดอะล็อกบล็อก Customize จะแสดงขึ้นมา เลือกตรง Choos Command From ให้เป็น macro  คลิกเลือก macro ที่ต้องการแล้วกด Add ให้ไปอยู่หน้าต่างด้านขวา

เปลี่ยน Icon ชื่อของปุ่ม โดยคลิกเลือก Macro ที่ต้องการแล้วกด Modify เลือก icon และอาจจะเปลี่ยนชื่อก็ได้หากต้องการ

เพียงเท่านี้ก็จะได้มาโครเอาไว้ใช้งาน

TIP: ลิบรา ไรท์เตอร์ เรียกใช้จาก Tools > Macros > Organize Macro > Libre Office Basic > My Macro > New

สำหรับ Excel ถ้าต้องการเปลี่ยนเลขอาราบิกเป็นเลขไทย อ่านได้ที่นี่

Macro เปลี่ยนเลขไทย ใช้ไม่ได้

มีคนส่งคำถามมาว่า ได้ลองทำตามที่เขียนในเรื่อง เปลี่ยนเลขไทยใน Word แล้ว ใช้ไม่ได้ผล คือ พอเปลี่ยนแล้วแทนที่จะเป็นเลขไทย กลายเป็นอักขระต่างดาวอะไรก็ไม่รู้ ไม่สามารถใช้โค้ดที่ให้ไว้ได้

ความคิดแรกที่โผล่มาในหัวเลยก็คือ มันต้องเป็นเรื่องของ encoding แน่ ๆ เลย อย่างที่เคยเขียนไปแล้วว่าภาษาไทยในคอมพิวเตอร์มันดันมีหลายมาตรฐาน TIS-620 Window 874 Unicode 8 ก็เลยขอให้ทางผู้ถาม ลองแปลงเลข 0123456789 ให้เป็นเลขไทย แล้วจับภาพหน้าจอมาว่า อักขระแปลก ๆ ไม่ใช่เลขไทยที่ว่านั้นหน้าตาเป็นอย่างไร

เมื่อได้เห็นแล้วก็เข้าใจ ก็เลยอนุมานได้ว่า ปัญหาไม่ได้ยากเย็นอะไร คือ Chr(240) ที่เคยใช้แทนเลข ๐ (ศูนย์ไทย) จะต้องเปลี่ยนใหม่ แก้แค่ตรงนี้ที่เดียวก็น่าจะได้ ไม่ใช่เรื่องยากอะไร แต่คิดว่าคงต้องอธิบายเพิ่มเติมสักหน่อยว่า ทำไม Code VBA ที่เขียนไปแล้ว พอไปใช้บางเครื่องแล้วใช้ไม่ได้

คือในโค้ด VBA ที่ใช้นั้น ใช้ Chr แทนลำดับตัวเลข ในระบบ ASCII คือ ตรงโค้ดที่เขียน Chr(48 + i) (ซึ่งก่อนหน้าได้กำกับว่า For i = 0 To 9) นั่นคือเรากำหนด encoding ของตัวอักขระที่ 48 เป็น 0 ซึ่งก็คือ ลำดับ 48 ใน Decimal code (โปรดดูที่หน้า ASCII Code ประกอบ) และที่เราให้แทนที่ด้วย Chr(240 + i) ก็คือให้แทนที่ด้วย ๐ (เลขศูนย์ไทย)

ดังนั้น แทนที่มันจะออกมาเป็นเลข 0 แต่กลายเป็นตัว ð อันนี้ก็เข้าใจได้ไม่ยากว่าตัว 240 มันไม่ใช่ เลข ๐ ซะแล้ว ตัว encoding ที่เครื่องคอมพิวเตอร์นั้นทำงานอยู่ในอีกแบบหนึ่ง ซึ่งเมื่อเทียบกับตารางนี้ ก็จะเห็น่ามันตรงกัน https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/character-set-128255

อันนี้คือเหตุผลว่าทำไม โค้ดที่เคยใช้มันถึงไม่ทำงาน หรือ ทำงานแปลก ๆ แทนที่จะแปลงตัวเลขเป็นไทยกลายเป็นตัวต่างดาวไปซะงั้น

เมื่อรู้ว่าปัญหาเกิดจากอะไร เราก็มาวิธีแก้ ปัญหาคือเมื่อเป็น Unicode แล้วแล้วจะเปลี่ยนเป็นอะไรดีล่ะ? อันนี้ก็ต้องมาทำความเข้าใจกับไวยากรณ์ของมันอีกสักหน่อย

โค้ดอักขระ ที่เราคุ้นเคยกันจะมีอยู่ 3 แบบ คือ

Chr และ Chr$ จะส่งค่าของอักขระที่ใช้โค้ด ASCII (หรือ ANSI)

ChrB และ ChrB$ ส่งข้อมูลไบต์ที่มีอยู่ในสตริงแทนที่จะส่งกลับอักขระซึ่งอาจเป็นหนึ่งหรือสองไบต์ ChrB จะส่งกลับค่าไบต์เดียวเสมอ

Chr$ and ChrB$ จะเป็น String

ChrW จะส่งกลับสตริงที่มีอักขระ Unicode ยกเว้นบนแพลตฟอร์มที่ไม่ได้รับการสนับสนุน Unicode ใน Mac ไม่สนับสนุนการใช้ ChrW(n) จะไม่สามารถส่งกลับอักขระ Unicode ทั้งหมดสำหรับค่า n ในช่วง 128 – 65535 สำหรับค่า Unicode n ที่มากกว่า 127 ไม่ควรใช้ ChrW ใน Mac ดังนั้น สิ่งที่ต้องเปลี่ยนก็คือ Chr ที่จะใช้กับเลขไทย ให้เปลี่ยนมาใช้ ChrW แทน ซึ่งตัวเลขไทยใน Unicode จะเริ่มเลข ๐ ที่ 3664 (แบบ decimal code ดูรายละเอียดที่ https://www.codetable.net/unicodecharacters?page=12) ดังนั้น เราจะเปลี่ยนเล็กน้อยดังนี้

Sub arabic_to_thai()
For i = 0 To 9
With Selection.Find
.Text = Chr(48 + i)
.Replacement.Text = ChrW(3664 + i)
.Wrap = wdFindContinue
End With
Selection.Find.Execute Replace:=wdReplaceAll
Next
End Sub
Sub thai_to_arabic()
For i = 0 To 9
With Selection.Find
.Text = ChrW(3664 + i)
.Replacement.Text = Chr(48 + i)
.Wrap = wdFindContinue
End With
Selection.Find.Execute Replace:=wdReplaceAll
Next
End Sub

เมื่อลองให้ผู้สอบถาม เปลี่ยนเลขไทย ก็ใช้งานได้ไม่มีปัญหา