У Брэдли есть документ, в тексте которого много римских цифр. Ему нужен простой способ заменить тысячи римских цифр на арабские.

Это не поля какой-либо природы; они просто набираются в тексте римскими цифрами. Он задается вопросом, есть ли способ легко заменить их арабскими эквивалентами.

К сожалению, в Word нет функции преобразования римских цифр в арабские. Вы можете, если хотите, просто использовать «Найти и заменить» для поиска римских цифр, но вам придется выполнять индивидуальный поиск для каждой из них. Вы можете использовать поиск с подстановочными знаками для поиска слова, полностью состоящего из прописных римских цифр, что значительно упростит поиск. Все, что вам нужно сделать, это найти «<[CDILMVX] \ {1,}>» (без кавычек) и убедиться, что у вас установлен флажок «Использовать подстановочные знаки». Когда вы нажимаете «Найти далее», появляется следующая римская цифра, и вы можете вручную изменить ее на арабский эквивалент.

Другой способ выполнить преобразование — использовать макрос. Вы можете создать макрос, который просматривает каждое слово в вашем документе и пытается определить, является ли оно кандидатом на то, чтобы оно состояло из римских цифр. Однако вы можете получить несколько ложных срабатываний, особенно если ваш документ содержит сокращения, которые можно спутать с римскими цифрами. (Например, если вы используете аббревиатуру CC для обозначения кредитной карты, это можно считать римской цифрой для 200.)

Следующий набор макросов будет проходить через каждое слово в документе, и если слово содержит только римские цифры (I, V, X, L, C, D и M), тогда пользователя спрашивают, должен ли макрос преобразовывать цифры.

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

Поскольку слово I в верхнем регистре является очень распространенным словом в тексте, макросы не останавливаются на каждом из них, чтобы определить, следует ли выполнять преобразование.

Однако если заглавная буква I является частью более длинного слова, состоящего только из римских цифр (например, XLVII), то оно считается кандидатом на преобразование. Макросы также предполагают, что все ваши римские цифры написаны в верхнем регистре.

_Примечание: _

Если вы хотите знать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах WordTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / wordribbon-WordTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

WordTips — ваш источник экономичного обучения работе с Microsoft Word.

(Microsoft Word — самая популярная программа для обработки текстов в мире.) Этот совет (12509) применим к Microsoft Word 97, 2000, 2002 и 2003. Вы можете найти версию этого совета для ленточного интерфейса Word (Word 2007 и позже) здесь:

link: / wordribbon-Changing_Roman_Numerals_to_Arabic [Изменение римских цифр на арабские].