It's a bit clunky but it works. Excel stores dates as numbers; I cannot think of a way to sort on every 28/30/31's digit depending on day, so I have opted to split the date up and attack it from there.
I've done my work with the dates in coulmn E. Adjust to suit.
CODE:
Sub sortbymonth()
Range("e1").Select
Range(ActiveCell, ActiveCell.End(xlDown)).Select
noofrows = Selection.Rows.Count
'insert the colums we need
Columns("F:H").Select
Selection.Insert Shift:=xlToRight
'select the column with the dates in; this one column E
Columns("E:E").Select
'use the text to columns to split the data in columns, column 1 months, 2 day, 3 year
Selection.TextToColumns Destination:=Range("E1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
:="/", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), _
TrailingMinusNumbers:=True
'format the first row in number format (it is still hung up in the date format)
Columns("e:H").Select
Selection.NumberFormat = "0"
'selct the columns to sort
Columns("E:I").Select
'sort by column e, the month column, other data in column i. expand to contain...
Selection.Sort Key1:=Range("E1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
For i = 0 To (noofrows - 1)
Monthval = Range("e1").Offset(i, 0).Value
Dayval = Range("f1").Offset(i, 0).Value
yearval = Range("g1").Offset(i, 0).Value
Dateval = Monthval & "/" & Dayval & "/" & yearval
Range("H1").Offset(i, 0).Formula = Dateval
Next i
'formats the cells properly
Columns("H:H").Select
Selection.NumberFormat = "m/d/yyyy"
'delets the working columns
Columns("E:G").Select
Range("G1").Activate
Selection.Delete Shift:=xlToLeft
End Sub