something like this could work:
Dim SkipRemove As Boolean
Dim Rowindex As Integer
'loop through rows in datagrid starting from the bottom
For Rowindex = DataGridView1.Rows.Count - 1 To 0 Step -1
SkipRemove = False
'loop through each cell in row
For Each Cell As DataGridViewCell In DataGridView1.Rows(Rowindex).Cells
If Not Cell.Value = "£0.00" Then
SkipRemove = True
Exit For
End If
Next
'check if to remove the row or not
If Not SkipRemove = True Then
DataGridView1.Rows.RemoveAt(Rowindex)
End If
Next
this starts at the bottom of the datagridview
and works up preventing the skipping issue.