Anne, you might want to replace:
Private Sub RemoveVBAExpress()
Dim irow As Integer
irow = 6
While (Cells(irow, 4).Value <> "")
If (InStr(1, Cells(irow, 4).Value, "vbaexpress") > 0) Then
Rows(irow).Delete
Else
irow = irow + 1
End If
Wend
End Sub
With
Private Sub RemoveVBAExpress2()
' Macro recorded by Nate Oliver
Application.ScreenUpdating = False
With Worksheets(1)
.Range("D6:D65536").AutoFilter Field:=1, _
Criteria1:="=*vbaexpress*"
On Error Resume Next
.Range("D7:D65536").SpecialCells(xlVisible).EntireRow.Delete
On Error GoTo 0
If CBool(InStrB(.Range("d6").Value, "vbaexpress")) Then _
.Range("d6").EntireRow.Delete
.AutoFilterMode = False
End With
Application.ScreenUpdating = True
End Sub
The filter should perform much better than the loop, especially as the range in question grows in terms of row count.