Перевод римских цифр на арабские

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

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

Другой способ выполнить преобразование – использовать макрос. Вы можете создать макрос, который просматривает каждое слово в вашем документе и пытается определить, является ли оно кандидатом на то, чтобы оно состояло из римских цифр. Однако вы можете получить несколько ложных срабатываний, особенно если ваш документ содержит сокращения, которые можно спутать с римскими цифрами. (Например, если вы используете аббревиатуру 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 Для каждого wrdX в ActiveDocument.Words wrd = UCase (Trim (wrdX)) Если wrd = "" Или wrd = "I" Или wrd = vbCr Тогда 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 ("Преобразовать" & wrd & "в арабский", vbYesNoCancel) Если J = vbCancel Then Exit Sub If J  = vb Да Тогда Выбор. TypeText Текст: = RomanToArabic (wrd) End If Next wrdXEnd Sub 
 Функция 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)) Если cc 
= Len (Rm) Если J = Len (Rm) Тогда ab = ab + GetValue (Mid (Rm, J, 1)) End If RomanToArabic = Trim (Str (ab)) End 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) Для J = от 0 до 6, если  ss = Cde (J) Then GetValue = Cvalue (J) Выход из функции End If Next J GetValue = 999999End Function 

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

Оцените статью
Frestage.ru
Добавить комментарий