Didn't you have trouble when you changed:
03Q1 to Feb-03?
When I did it, the cell showed: 03-Feb, but the date in the formula bar was:
February 3, 2004.
I think I'd do something like:
Option Explicit
Sub testme01()
Dim myCell As Range
Dim myRng As Range
Dim myYear As Long
Dim myMonth As Long
Dim myDay As Long
Set myRng = Selection
For Each myCell In myRng.Cells
With myCell
If LCase(.Value) Like "##q#" Then
myYear = CLng(Left(.Value, 2))
If myYear < 70 Then
myYear = 2000 + myYear
Else
myYear = 1900 + myYear
End If
myMonth = (CLng(Right(.Value, 1)) - 1) * 3 + 2
myDay = 1
.Value = DateSerial(myYear, myMonth, myDay)
.NumberFormat = "MMM-YY"
End If
End With
Next myCell
End Sub
or using edit|replaces:
Option Explicit
Sub testme02()
Dim myCell As Range
Dim myRng As Range
Dim iCtr As Long
Dim yCtr As Long
Dim qCtr As Long
Dim BeginYear As Long
Dim EndYear As Long
Dim TotalEntries As Long
Dim myFromStrings() As String
Dim myToValues() As Long
Set myRng = Selection
BeginYear = 1990
EndYear = 2010
'1990 to 2010 is 21 years * 4 qtrs per year = 84
TotalEntries = (EndYear - BeginYear + 1) * 4
ReDim myFromStrings(1 To TotalEntries)
ReDim myToValues(1 To TotalEntries)
iCtr = 0
For yCtr = 1990 To 2010
For qCtr = 1 To 4
iCtr = iCtr + 1
myFromStrings(iCtr) = Right(CStr(yCtr), 2) & "Q" & CStr(qCtr)
myToValues(iCtr) = DateSerial(yCtr, ((qCtr - 1) * 3) + 2, 1)
Next qCtr
Next yCtr
With myRng
.NumberFormat = "mmm-yy"
For iCtr = LBound(myFromStrings) To UBound(myFromStrings)
.Replace What:=myFromStrings(iCtr), _
Replacement:=myToValues(iCtr), LookAt:=xlWhole, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Next iCtr
End With
End Sub