Bradley có một tài liệu có nhiều chữ số La Mã bên trong văn bản. Anh ta cần một cách dễ dàng để thay đổi hàng nghìn chữ số La Mã này sang tiếng Ả Rập.

Đây không phải là các lĩnh vực thuộc bất kỳ bản chất nào; chúng chỉ đơn giản được nhập vào văn bản dưới dạng số La Mã. Anh ấy tự hỏi liệu có cách nào để dễ dàng thay đổi chúng thành các từ tương đương tiếng Ả Rập của chúng không.

Thật không may, không có chức năng nào trong Word sẽ chuyển đổi chữ số La Mã sang tiếng Ả Rập. Bạn có thể, nếu muốn, chỉ cần sử dụng Tìm và Thay thế để tìm kiếm các chữ số La Mã, nhưng bạn sẽ phải thực hiện một tìm kiếm riêng lẻ cho từng chữ số. Bạn có thể sử dụng tìm kiếm theo thẻ đại diện để tìm kiếm một từ hoàn toàn bao gồm các chữ số La Mã viết hoa, điều này sẽ làm cho việc tìm kiếm dễ dàng hơn một chút. Tất cả những gì bạn cần làm là tìm kiếm “<[CDILMVX] \ {1,}>” (không có dấu ngoặc kép) và đảm bảo rằng bạn đã chọn hộp kiểm Sử dụng ký tự đại diện. Khi bạn nhấp vào Tìm tiếp theo, chữ số La Mã tiếp theo sẽ được đặt và sau đó bạn có thể thay đổi thủ công thành chữ số Ả Rập tương đương.

Một cách khác để cố gắng thực hiện chuyển đổi là sử dụng macro. Bạn có thể tạo macro xem xét từng từ trong tài liệu của mình và cố gắng xác định xem nó có phải là ứng cử viên để bao gồm các chữ số La Mã hay không. Tuy nhiên, bạn có thể nhận được một số kết quả dương tính giả, đặc biệt nếu tài liệu của bạn chứa các từ viết tắt có thể bị nhầm lẫn là số La Mã. (Ví dụ: nếu bạn sử dụng từ viết tắt CC cho thẻ tín dụng, đó có thể được coi là chữ số La Mã của 200.)

Tập hợp các macro sau sẽ xem xét từng từ trong một tài liệu và nếu từ đó chỉ chứa các chữ số La Mã (I, V, X, L, C, D và M) thì người dùng sẽ được hỏi liệu macro có nên chuyển đổi chữ số.

Sub ConvertRoman()

Dim wrdX     Dim wrd As String     Dim tstSW As Boolean     Dim J As Long

For Each wrdX In ActiveDocument.Words         wrd = UCase(Trim(wrdX))

If wrd = "" Or wrd = "I" Or wrd = vbCr Then             tstSW = False         Else             tstSW = True         End If         For J = 1 To Len(wrd)

If InStr("MDCLXVI",Mid(wrd, J, 1)) = 0 Then                 tstSW = False                 Exit For             End If         Next J

If tstSW Then             wrdX.Select             Selection.MoveLeft unit:=wdCharacter, _               Count:=Len(wrdX) - Len(wrd), _               Extend:=wdExtend             J = MsgBox("Convert " & wrd & " to Arabic", vbYesNoCancel)

If J = vbCancel Then Exit Sub             If J = vbYes Then Selection.TypeText Text:=RomanToArabic(wrd)

End If     Next wrdX End Sub
Function RomanToArabic(Rm As String) As String     Dim J As Long     Dim ab As Long     Dim cc As Long     Dim dd As Long

ab = 0     Rm = Trim(Rm)

J = 1     Do         cc = GetValue(Mid(Rm, J, 1))

dd = GetValue(Mid(Rm, J + 1, 1))

If cc < dd Then             ab = ab + dd - cc             J = J + 1         Else             ab = ab + cc         End If         J = J + 1     Loop Until J >= Len(Rm)

If J = Len(Rm) Then         ab = ab + GetValue(Mid(Rm, J, 1))

End If     RomanToArabic = Trim(Str(ab))

End Function
Function GetValue(ss As String) As Long     Dim Cde()

Dim Cvalue()

Dim J As Long

Cde = Array("M", "D", "C", "L", "X", "V", "I")

Cvalue = Array(1000, 500, 100, 50, 10, 5, 1)



For J = 0 To 6         If ss = Cde(J) Then             GetValue = Cvalue(J)

Exit Function         End If     Next J     GetValue = 999999 End Function

Vì chữ hoa I là một từ rất phổ biến trong văn bản, các macro sẽ không dừng lại trên mỗi chữ để xác định xem có nên thực hiện chuyển đổi hay không.

Tuy nhiên, nếu chữ viết hoa I là một phần của từ dài hơn chỉ bao gồm các chữ số La Mã (chẳng hạn như XLVII), thì nó được coi là một ứng cử viên để chuyển đổi. Các macro cũng giả định rằng tất cả các chữ số La Mã của bạn đều là chữ hoa.

_Lưu ý: _

Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên các trang WordTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.

WordTips là nguồn của bạn để đào tạo Microsoft Word hiệu quả về chi phí.

(Microsoft Word là phần mềm xử lý văn bản phổ biến nhất trên thế giới.) Mẹo này (12509) áp dụng cho Microsoft Word 97, 2000, 2002 và 2003. Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện ribbon của Word (Word 2007 và sau này) tại đây: