При этом удаляются все пустые строки, начиная с 4
до last row - 1
Option Explicit
Public Sub RawDataDeleteRows()
Dim ur As Range
Set ur = ActiveSheet.UsedRange
If ur.Rows.Count > 4 Then
With ur.Offset(2).Resize(ur.Rows.Count - 2)
.AutoFilter Field:=1, Criteria1:="="
If .SpecialCells(xlCellTypeVisible).Rows.Count > 1 Then
.Offset(1).Resize(ur.Rows.Count - 4).EntireRow.Delete
End If
.AutoFilter
End With
End If
End Sub
Диапазоны объяснили
- Начальный диапазон, используемый для автофильтра
ur.Offset(2).Resize(ur.Rows.Count - 2)
.Offset(2)
- перемещает ряды Range 2 вниз, сверху (в ряд 3)
.Resize(ur.Rows.Count - 2)
- изменить размер нижней, 2 строки вверх, до последней использованной строки
- Диапазон проверки удаляемых строк
.SpecialCells(xlCellTypeVisible).Rows.Count > 1
- Убедитесь, что выходят другие (видимые) строки, кроме заголовка автофильтра
- Диапазон, используемый для удаления пустых строк:
.Offset(1).Resize(ur.Rows.Count - 4).EntireRow.Delete
- Этот диапазон основан на начальном диапазоне автофильтрации, указанном выше (1)
.Offset(1)
- перемещает ряд диапазона 1 вниз со строки 3 (строка 4)
.Resize(ur.Rows.Count - 4)
- изменить размер нижней части, 4 строки вверх - исключить 3 hdrs и lastrow
Примечание. Определение последней строки на основе UsedRange
является преднамеренным, если последняя строка пуста и имеет зеленый цвет