วิธีแปลงเลขไทยเป็นเลขอารบิก และเลขอารบิกเป็นเลขไทยใน Word ด้วย Macro VBA อัตโนมัติ
คู่มือ Step by Step พร้อม Full VBA Code สำหรับครู งานธุรการ เอกสารราชการ และผู้ใช้งาน Microsoft Word ไม่ต้องเปลี่ยนตัวเลขทีละหลักอีกต่อไป
แปลงตัวเลขทั้งเอกสาร Word ได้ง่าย ๆ
หากเคยพิมพ์เอกสาร Word เสร็จแล้วเพิ่งพบว่า ต้องเปลี่ยนเลขอารบิกทั้งหมดเป็นเลขไทย หรือเปลี่ยนเลขไทยกลับเป็นเลขอารบิก การแก้ไขตัวเลขด้วยตนเองอาจเสียเวลามาก โดยเฉพาะเอกสารที่มีหลายสิบหน้า
บทความนี้จะแนะนำการสร้าง Macro VBA สำหรับ Microsoft Word ที่สามารถแปลงตัวเลขได้ทั้งสองทิศทาง ผ่านหน้าต่างเลือกคำสั่งภาษาอังกฤษ พร้อมตัวอย่างโค้ดและวิธีใช้งาน
Macro VBA คืออะไร?
VBA ย่อมาจาก Visual Basic for Applications เป็นภาษาสำหรับเขียนคำสั่งอัตโนมัติในโปรแกรม Microsoft Office รวมถึง Microsoft Word ช่วยลดขั้นตอนการทำงานซ้ำ ๆ และประหยัดเวลาในการจัดการเอกสาร
Microsoft Word รุ่นที่รองรับ
ตัวอย่างนี้ออกแบบสำหรับ Microsoft Word เวอร์ชัน Desktop บน Windows ที่รองรับ VBA Macro เช่น Word 2016, 2019, 2021, 2024 และ Word for Microsoft 365
| เวอร์ชัน | VBA Macro |
|---|---|
| Word 2016 | รองรับ |
| Word 2019 | รองรับ |
| Word 2021 | รองรับ |
| Word 2024 | รองรับ |
| Microsoft 365 Desktop | รองรับ |
| Word for the Web | ไม่สามารถรัน VBA โดยตรง |
Step by Step วิธีสร้าง Macro VBA
เปิดไฟล์ Microsoft Word ที่ต้องการแปลงตัวเลข และสำรองไฟล์ก่อนแก้ไข
กดแป้นพิมพ์ Alt + F11
เพื่อเปิดหน้าต่าง Microsoft Visual Basic
เลือกโปรเจกต์ที่ต้องการ
แล้วคลิก Insert → Module
คัดลอกโค้ดด้านล่างแล้วนำไปวาง ในหน้าต่าง Module ที่สร้างไว้
กด Alt + F8
เลือก ConvertThaiArabicNumbers
แล้วคลิก Run
Full VBA Code พร้อมใช้งาน
โค้ดนี้ใช้ข้อความภาษาอังกฤษในหน้าต่าง Macro
เพื่อหลีกเลี่ยงปัญหาภาษาไทยแสดงเป็น
เครื่องหมายคำถามใน VBA Editor
โดยสร้างเลขไทยด้วย Unicode ผ่านฟังก์ชัน
ChrW$()
Option Explicit
Sub ConvertThaiArabicNumbers()
Dim userChoice As String
Dim sourceDigits As String
Dim targetDigits As String
Dim thaiDigits As String
Dim story As Range
Dim currentRange As Range
Dim i As Long
Dim conversionType As String
' Create Thai Unicode digits
For i = &HE50 To &HE59
thaiDigits = thaiDigits & ChrW$(i)
Next i
' English selection dialog
userChoice = InputBox( _
"Select conversion type:" & vbCrLf & vbCrLf & _
"1 = Arabic to Thai" & vbCrLf & _
"2 = Thai to Arabic" & vbCrLf & vbCrLf & _
"Enter your choice (1 or 2):", _
"Thai / Arabic Number Converter", "1")
If userChoice = "" Then Exit Sub
Select Case userChoice
Case "1"
sourceDigits = "0123456789"
targetDigits = thaiDigits
conversionType = "Arabic to Thai"
Case "2"
sourceDigits = thaiDigits
targetDigits = "0123456789"
conversionType = "Thai to Arabic"
Case Else
MsgBox "Please enter 1 or 2.", _
vbExclamation, "Invalid Selection"
Exit Sub
End Select
' Confirmation
If MsgBox( _
"Conversion: " & conversionType & _
vbCrLf & vbCrLf & _
"Convert numbers in this document?" & _
vbCrLf & _
"Please save a backup first.", _
vbYesNo + vbQuestion, _
"Confirm Conversion") <> vbYes Then Exit Sub
On Error GoTo ErrorHandler
Application.ScreenUpdating = False
' Process document story ranges
For Each story In ActiveDocument.StoryRanges
Set currentRange = story
Do While Not currentRange Is Nothing
For i = 1 To 10
With currentRange.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = Mid$(sourceDigits, i, 1)
.Replacement.Text = _
Mid$(targetDigits, i, 1)
.Forward = True
.Wrap = wdFindStop
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.Execute Replace:=wdReplaceAll
End With
Next i
Set currentRange = _
currentRange.NextStoryRange
Loop
Next story
Application.ScreenUpdating = True
MsgBox _
"Number conversion completed successfully!" & _
vbCrLf & _
"Conversion: " & conversionType, _
vbInformation, _
"Conversion Completed"
Exit Sub
ErrorHandler:
Application.ScreenUpdating = True
MsgBox "Error: " & Err.Description, _
vbCritical, "Conversion Error"
End Sub
วิธีรัน Macro และเลือกการแปลง
Thai / Arabic Number Converter
หน้าต่าง Macro จะให้เลือกคำสั่งดังนี้
เลือก 1 เพื่อแปลงเลขอารบิกเป็นเลขไทย หรือเลือก 2 เพื่อแปลงเลขไทยกลับเป็นเลขอารบิก จากนั้นคลิก OK และยืนยันด้วย Yes
ตัวอย่างผลลัพธ์ก่อนและหลังแปลง
| ก่อนแปลง | หลังแปลงเป็นเลขไทย |
|---|---|
| พ.ศ. 2569 | พ.ศ. ๒๕๖๙ |
| นักเรียน 125 คน | นักเรียน ๑๒๕ คน |
| ชั้นประถมศึกษาปีที่ 5 | ชั้นประถมศึกษาปีที่ ๕ |
| งบประมาณ 12,500 บาท | งบประมาณ ๑๒,๕๐๐ บาท |
| เวลา 08.30 น. | เวลา ๐๘.๓๐ น. |
| เลขที่ 123/2569 | เลขที่ ๑๒๓/๒๕๖๙ |
ทดลองแปลงตัวเลขออนไลน์
ทดลองแปลงเลขไทยและเลขอารบิกได้ทันที โดยไม่ต้องเปิด Microsoft Word เครื่องมือนี้ใช้ JavaScript เพื่อสาธิตผลลัพธ์ โดยไม่แก้ไขไฟล์เอกสาร
ทำให้ Macro ใช้งานได้กับทุกเอกสาร
หากต้องการเรียกใช้ Macro โดยไม่ต้องสร้างใหม่ ทุกครั้ง สามารถบันทึกโค้ดไว้ใน Normal.dotm ซึ่งเป็นเทมเพลตเริ่มต้นของ Microsoft Word
กด Alt + F11
ค้นหาโปรเจกต์ Normal ใน Project Explorer
สร้าง Module ใหม่ใน Normal แล้ววางโค้ด VBA
บันทึก Normal.dotm เพื่อเรียกใช้ Macro กับเอกสารอื่น
ข้อควรระวังในการใช้ Macro
สำหรับเอกสารที่มีฟิลด์พิเศษ เช่น เลขหน้าอัตโนมัติ อาจต้องตรวจสอบผลหลังอัปเดตฟิลด์ เพราะ Word สามารถสร้างค่าฟิลด์ขึ้นใหม่ได้
ไม่ควรเปิดใช้งาน Macro จากไฟล์ที่ไม่รู้จัก หรือเปลี่ยนการตั้งค่าความปลอดภัยให้อนุญาต Macro ทั้งหมดโดยไม่มีการตรวจสอบ
คำถามที่พบบ่อย (FAQ)
Macro นี้แปลงตัวเลขทั้งเอกสารได้หรือไม่?
สามารถแปลงในเนื้อหาหลักและ StoryRanges ของ Word ที่เข้าถึงได้ แต่ควรตรวจสอบวัตถุพิเศษและฟิลด์ภายหลัง
ใช้กับ Microsoft Word 2024 ได้หรือไม่?
ได้ สำหรับ Word 2024 รุ่น Desktop บน Windows ที่รองรับ VBA Macro
ต้องติดตั้งโปรแกรมเพิ่มเติมหรือไม่?
ไม่ต้องติดตั้งโปรแกรมเพิ่มเติม เนื่องจาก Word Desktop บน Windows มี Visual Basic Editor อยู่แล้ว
ทำไมข้อความภาษาไทยใน VBA แสดงเป็น ??????
VBA Editor บางระบบมีข้อจำกัด เรื่องการเข้ารหัสภาษาไทย โค้ดนี้จึงใช้เมนูภาษาอังกฤษ และสร้างเลขไทยด้วย Unicode ChrW$ เพื่อหลีกเลี่ยงปัญหาดังกล่าว
ใช้กับไฟล์ DOCX ได้หรือไม่?
สามารถใช้ Macro จาก Normal.dotm เพื่อแก้ไขเอกสาร DOCX ได้ หากต้องการฝัง Macro ภายในไฟล์เอง ต้องบันทึกเป็น DOCM
สามารถแปลงเลขไทยกลับเป็นเลขอารบิกได้หรือไม่?
ได้ เพียงรัน Macro อีกครั้งแล้วเลือก 2 = Thai to Arabic
สรุป
การใช้ Macro VBA แปลงเลขไทยและเลขอารบิก ใน Microsoft Word เป็นเทคนิคที่ช่วยลดขั้นตอน การจัดทำเอกสารอย่างมาก โดยเฉพาะงานราชการ งานธุรการ และเอกสารของครู ที่ต้องจัดการตัวเลขจำนวนมาก
เพียงสร้าง Macro ครั้งเดียว ก็สามารถเลือกแปลงตัวเลขได้สองทิศทาง และสามารถเก็บไว้ใน Normal.dotm เพื่อใช้งานในครั้งต่อไปได้อีกด้วย


