Here is a code snippet that works for me. I have a table named "Metrics" that is on the worksheet linked to the metricsWKS variable.
I use the table filter to select the rows to be deleted. In my case it is determined by blank values for both the client and job fields. The only tricky part is selecting the field. I still don't want to believe that the offset works only on the visible cells and skips the rows hidden by the filter.
If I had to check to see if a whole row was blank, I would add a table column calculating the length of the concatenation of the other columns and test for that. A purely VBA solution, which could be implied from the original question, could skip that step and check that the other field filters are blank as well.
I just checked it for a larger dataset, and it isn't very fast. Might be OK for a smaller dataset.
Dim metricsWKS As Worksheet
Application.ScreenUpdating = False
Application.Calculation = xlManual
' eliminate rows that have a blank client and a blank job
With metricsWKS.ListObjects("Metrics")
.Range.AutoFilter Field:=.ListColumns("Client").Index, Criteria1:="=" ' client name is blank
.Range.AutoFilter Field:=.ListColumns("Job Name").Index, Criteria1:="=" ' job name is blank
End With
Range("Metrics[[#Headers],[Task Name]]").Offset(1).Select ' select the first blank row under the header row
Range(Selection, Selection.End(xlDown)).Select ' add in all the other blank rows through the bottom of the filtered table
Selection.EntireRow.Delete ' delete all the rows
metricsWKS.ShowAllData ' clear the filter
Application.Calculation = xlAutomatic
Application.ScreenUpdating = True