Представьте себе следующие данные:

Если вы теперь фильтруете по Article State Change
, тогда ваш .SpecialCells(xlCellTypeVisible)
даст диапазон, состоящий из 4 несмежных областей {1}, {7,8}, {11} and {17}
. Поэтому сначала вы должны пройти по каждой из этих областей, а затем пройти по всем строкам в каждой области (используя второй цикл).
Кроме того, поскольку вставка строк изменяет номера строк ниже позиции вставки, вам необходимо выполнить цикл от нижней части ваших данных до верхней.
Option Explicit
Public Sub FilterAndInsert()
Dim ws As Worksheet
Set ws = ThisWorkbook.ActiveSheet 'better define by name: ThisWorkbook.Worksheets("MySheet")
Dim LastRow As Long
LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
ws.Range("A1:O" & LastRow).AutoFilter Field:=12, Criteria1:="Article State Change"
Dim FilteredData As Range
Set FilteredData = ws.Range("A2:A" & LastRow).SpecialCells(xlCellTypeVisible)
Dim iArea As Long
Dim iRow As Long
For iArea = FilteredData.Areas.Count To 1 Step -1 'loop from last to first area
For iRow = FilteredData.Areas(iArea).Rows.Count To 1 Step -1 'loop from last row to first row in each area
With FilteredData.Areas(iArea).Rows(iRow) '<-- this represents the current row we are in the loop
.Offset(RowOffset:=1).EntireRow.Insert Shift:=xlDown
.Offset(RowOffset:=1).EntireRow.Interior.Color = RGB(192, 192, 192)
End With
Next iRow
Next iArea
'remove filters
ws.Range("A1:O" & LastRow).AutoFilter
End Sub
Таким образом, результат будет:
