/ /オートフィルターExcel VBA後に非表示/非表示の行を削除-Excel、VBA、Excel-VBA

オートフィルタExcel VBAの後に隠れた/見えない行を削除する - excel、vba、excel-vba

これはかなり簡単なことだと思いますが、何らかの理由で、私にはうまくいかないようです:(

指定した基準に基づいてデータを自動フィルタリングする以下のコードがあります。

Dim lastrow As Long
lastrow = Sheet2.Cells(Sheet2.Rows.Count, "A").End(xlUp).Row

With Sheet2
.AutoFilterMode = False

With .Range("A1:AF" & lastrow)
.AutoFilter
.AutoFilter Field:=7, Criteria1:="Yes", Operator:=xlFilterValues

End With

私が今探しているのは、すべてを削除することです フィルターなし (非表示)行が基準に適合しない。

私はこれまで試しました:

Sub RemoveHiddenRows
Dim oRow As Object
For Each oRow In Sheets("Sheet2").Rows
If oRow.Hidden Then oRow.Delete
Next
End Sub

しかし、このコードの問題は、行が削除され、下位のすべての行が1つ上に移動した場合でも、それぞれが考慮される行を増分するため、連続する非表示行の1行おきにのみ削除します。

また、可能であれば、ループのないものを好みます。 反対の.SpecialCells(xlCellTypeVisible).EntireRow.Delete

すべてのヘルプは高く評価されます。

回答:

回答№1の19

だから私はすべての基準を逆にして目に見えるセルを削除しようとするのではなく、フィルタリングされていないデータを取り除くことを探していました

私はこれを使います:

Sub RemoveHiddenRows()
Dim oRow As Range, rng As Range
Dim myRows As Range
With Sheets("Sheet3")
Set myRows = Intersect(.Range("A:A").EntireRow, .UsedRange)
If myRows Is Nothing Then Exit Sub
End With

For Each oRow In myRows.Columns(1).Cells
If oRow.EntireRow.Hidden Then
If rng Is Nothing Then
Set rng = oRow
Else
Set rng = Union(rng, oRow)
End If
End If
Next

If Not rng Is Nothing Then rng.EntireRow.Delete
End Sub