Change all dates in a document from MMMM DD, YYYY to DD MMMM YYYY

Article contributed by Bill Coan

Create a macro based on Word's wildcard search-and-replace capabilities. Target only those month names that are followed by a one or two-digit day and then a comma. In other words, change the format of a date like January 12, 1904 but do nothing to a date like January 1904.

Notes
Use text similar to the following for find what and replace with:
Find What: "(January) ([0-9]{1,2}),"
Replace With "\2 \1"

The text above is specific, of course, to the month of January. Here's how Word interprets the Find What text and Replace With text:

Find What
Find the word January followed by a space followed by one or two occurrences of a digit from 0-9, followed by a comma. January occurs within parentheses so that it can be reused in the Replace With text. Likewise, the expression that specifies one or two occurrences of a digit from 0-9 also occurs within parentheses so that it fcan be reused in the Replace With text. The space after January and the comma after the one-or-two-digit expression do NOT occur within parentheses, because we don't need to reuse them in the Replace With text.

Replace With
In place of the found text, insert the one-or-two-digit expression followed by a space followed by the word January. (No space is needed after the word January, because a space already follows the found text.)

Sub ChangeDateFormatWithReplaceCommand()

Dim myMonth(1 To 12) As String

myMonth(1) = "January"
myMonth(2) = "February"
myMonth(3) = "March"
myMonth(4) = "April"
myMonth(5) = "May"
myMonth(6) = "June"
myMonth(7) = "July"
myMonth(8) = "August"
myMonth(9) = "September"
myMonth(10) = "October"
myMonth(11) = "November"
myMonth(12) = "December"

For i = 1 To 12
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "(" & myMonth(i) & ")" & " ([0-9]{1,2}),"
        .Replacement.Text = "\2 \1"
        .Forward = True
        .Wrap = wdFindAsk
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = True
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
Next i

End Sub


Click to view Terms of Use page

Click to view Disclaimer page