I am not actually a big fan of doing this, it looks like you have it in a database format which is ideal for analysis eg pivot tables, filtering etc.
Are you sure you can't use a pivot table to do what you are trying to do ?
Be that as it may, try this code:
I have hard coded the starting cell as being A3,
please change this to what your real starting cell is.
Also if you were intending to use merged cells in the inserted lines, that is generally considered a really bad idea, so in the code I have centered across selection (columns A:D)
VBA Code:
Sub InsertRowEOM()
Dim lastRow As Long
Dim firstRow As Long
Dim iRow As Long
Dim ws As Worksheet
Set ws = ActiveSheet
firstRow = ws.Range("A3").Row
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
For iRow = lastRow To firstRow Step -1
If ws.Cells(iRow, "A") = DateSerial(Year(ws.Cells(iRow, "A")), Month(ws.Cells(iRow, "A")) + 1, 0) Then
ws.Cells(iRow + 1, "A").EntireRow.Insert
With ws.Cells(iRow + 1, "A")
.Value = "This is the record of all purchase of the month of " & Format(ws.Cells(iRow, "A"), "mmm")
.Resize(, 4).HorizontalAlignment = xlCenterAcrossSelection
.Resize(, 4).WrapText = True
End With
End If
Next iRow
End Sub