У меня была похожая проблема, и я использовал эту логику, когда очищал клетки.Приведенный ниже фрагмент очищает ячейки в столбцах AC & F из строк 2-1000, за исключением строки 5. Используйте это, если вы хотите получить штраф за мелкозернистый контроль над тем, что хотите очистить.:
Const clearCells = "A?:C?,F?"
Sub clearCells()
For i = 2 To 1000
If i <> 5 Then
Range(Replace(clearCells, "?", i)).ClearContents
End If
Next i
End Sub
Более простой способ - очистить столбцы AC и F от строк 2-2000:
Range ("A2:C2000,F2:F2000").ClearContents
Наконец, чтобы переписать программу, вы можете перебрать диапазонсоздайте новый диапазон и добавьте в него ячейки, только если они не имеют такой формулы:
Private Function downRange(ByRef sheet As Excel.Worksheet, ByVal rangeString As String)
Dim inRange As Excel.range
Dim outRange As range
Set inRange = sheet.range(rangeString)
Set inRange = sheet.range(inRange, inRange.End(Excel.XlDirection.xlDown))
Dim r As range
For Each r In inRange
If Left(r.Formula, 1) <> "=" Then
If outRange Is Nothing Then
Set outRange = r
Else
Set outRange = Application.Union(outRange, r)
End If
End If
Next r
downRange = outRange
End Function