Word.Tips.Net WordTips (Menu Interface)

Changing Roman Numerals to Arabic

Please Note: This article is written for users of the following Microsoft Word versions: 97, 2000, 2002, and 2003. If you are using a later version (Word 2007 or later), this tip may not work for you. For a version of this tip written specifically for later versions of Word, click here: Changing Roman Numerals to Arabic.

Bradley has a document that has, within text, many Roman numerals. He needs an easy way to change these thousands of Roman numerals to Arabic. These are not fields of any nature; they are simply typed in text as Roman numerals. He wonders if there is a way to easily change them to their Arabic equivalents.

Unfortunately, there is no function in Word that will convert Roman numerals to Arabic. You could, if you want, simply use Find and Replace to search for Roman numerals, but you would have to do an individual search for each one. You could use a wild card search to search for a word that consists entirely of uppercase Roman numerals, which would make searching quite a bit easier. All you need to do is search for "<[CDILMVX]{1,}>" (without the quote marks) and make sure you have the Use Wild Cards check box selected. When you click Find Next, the next Roman numeral is located, and you can then manually change it to its Arabic equivalent.

Another way to try to do the conversion is with a macro. You could create a macro that looks at each word in your document and tries to determine if it is a candidate for consisting of Roman numerals. You may get some false positives, though, particularly if your document contains acronyms that could be confused as Roman numerals. (For example, if you use the acronym CC for credit card, that could be considered the Roman numeral for 200.)

The following set of macros will step through each of the words in a document and if the word contains only Roman numerals (I, V, X, L, C, D, and M) then the user is asked if the macro should convert the numerals.

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
            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
            Selection.MoveLeft unit:=wdCharacter, _
              Count:=Len(wrdX) - Len(wrd), _
            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
        cc = GetValue(Mid(Rm, J, 1))
        dd = GetValue(Mid(Rm, J + 1, 1))
        If cc < dd Then
            ab = ab + dd - cc
            J = J + 1
            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

Since an uppercase I is a very common word in text, the macros won't stop on each of them to determine if a conversion should be done. However, if the capital I is part of a longer word that consists of only Roman numerals (such as XLVII), then it is considered a candidate for conversion. The macros also assume that all your Roman numerals are uppercase.

WordTips is your source for cost-effective Microsoft Word training. (Microsoft Word is the most popular word processing software in the world.) This tip (12509) applies to Microsoft Word 97, 2000, 2002, and 2003. You can find a version of this tip for the ribbon interface of Word (Word 2007 and later) here: Changing Roman Numerals to Arabic.

Related Tips:

Create Custom Apps with VBA! Discover how to extend the capabilities of Office 2013 (Word, Excel, PowerPoint, Outlook, and Access) with VBA programming, using it for writing macros, automating Office applications, and creating custom applications. Check out Mastering VBA for Office 2013 today!


Leave your own comment:

  Notify me about new comments ONLY FOR THIS TIP
Notify me about new comments ANYWHERE ON THIS SITE
Hide my email address
*What is 5+3 (To prevent automated submissions and spam.)
           Commenting Terms

Comments for this tip:

Lajos    01 Feb 2014, 04:01
And yes, Jon is right - V will 99994 and X will 999989. :(
Lajos    01 Feb 2014, 03:33
Salut, Allen!

Sorry, your macro finds lowercase words in my hungarian Word 2003. As word "mi" is very often in hungarian (it means "what" and "we"), I can not use your work. :(

I tried to add

    Or wrd = "Mi" Or wrd = "mi"

with no effect.
Jon    04 Nov 2013, 10:45
for some reason it converts v to 999994
Word User    14 Sep 2013, 07:57
Many thanks, this is just what I've been looking for!

I modified the 8th line to the following, to stop it picking up false-positives:

If wrd = "" Or wrd = "I" Or wrd = vbCr Or wrd = "DID" Or wrd = "VIVID" Or wrd = "ILL" Or wrd = "MILD" Or wrd = "LIVID" Or wrd = "MILL" Or wrd = "CIVIC" Or wrd = "ILL" Or wrd = "DIM" Or wrd = "MID" Or wrd = "MIX" Then
            tstSW = False

Running the Macro in Word 2010, I found it did still pick up lower-case words. How do I make it just find capitals?

And how do I make it only find instances that occur after the word 'Chapter'?

Thanks again!
Jeremy    11 Jul 2013, 07:57
Allen, you have an error in the second paragraph:

If you search using <[CDILMVX]{1,}>" (without the quote marks), you will not get everything (e.g. xiv).

It has to be in this order <[MDCLXVI]{1,}>!

Also, Can you do a version for lower case, please? This can be useful for conversions of page numbers, if deployed appropriately. Actually, I'm trying to do something a bit different, and your code for lower case would be very useful. It seems that replacing the upper case letters in your code with lower case doesn't work. There must be something else needed.

Our Company

Sharon Parq Associates, Inc.

About Tips.Net

Contact Us


Advertise with Us

Our Privacy Policy

Our Sites


Beauty and Style




DriveTips (Google Drive)

ExcelTips (Excel 97–2003)

ExcelTips (Excel 2007–2016)



Home Improvement

Money and Finances


Pests and Bugs

Pets and Animals

WindowsTips (Microsoft Windows)

WordTips (Word 97–2003)

WordTips (Word 2007–2016)

Our Products

Helpful E-books

Newsletter Archives


Excel Products

Word Products

Our Authors

Author Index

Write for Tips.Net

Copyright © 2016 Sharon Parq Associates, Inc.