На самом деле невозможно удалить строки из Excel через ADO (http://support.microsoft.com/kb/257819),, однако вы можете создать новый лист, не содержащий строк, которые вы хотите удалить. Это может оказаться проще с заголовками столбцов и именованные диапазоны. Вот пример, который не включает заголовки столбцов или диапазоны, поэтому SQL ссылается на различные столбцы как F n (по умолчанию) и листы как [Лист n $ ]
strFile = Workbooks(1).FullName
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFile _
& ";Extended Properties=""Excel 8.0;HDR=No;IMEX=1"";"
Set cn = CreateObject("ADODB.Connection")
cn.Open strCon
Set rs = CreateObject("ADODB.Recordset")
strSQL = "SELECT x.F1, x.F2, x.F3, x.F4, x.F5 FROM [Sheet1$] As x " _
& "LEFT JOIN " _
& "[Sheet2$] As y " _
& "ON x.F3=y.F1 " _
& "WHERE y.F1 Is Null"
rs.Open strSQL, cn
For i = 0 To rs.Fields.Count - 1
Sheets("Sheet3").Cells(1, i + 1) = rs.Fields(i).Name
Next
Sheets("Sheet3").Cells(2, 1).CopyFromRecordset rs