これはかなり簡単なことだと思いますが、何らかの理由で、私にはうまくいかないようです:(
指定した基準に基づいてデータを自動フィルタリングする以下のコードがあります。
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