6

ワークシートのデータがフィルター処理されている場合、データの最後の行をどのように見つけますか? 私は遊んでSpecial CellsVisible Cellsますが、解決策が見つかりません。私はそれが私が以下に持っているもののある種のバリエーションでなければならないと思います:

    ...
    With ws
        LR = .Range("A" & Rows.Count).End(xlUp).Row
        .Range("A1:E" & LR).AutoFilter Field:=2, Criteria1:="=4"
        LRfilt = .Range("A" & Rows.SpecialCells(xlCellTypeVisible).Count).End(xlUp).Row
        Debug.Print LR
        Debug.Print LRfilt
    End With
    ...

ファイルは次の場所にあります。

wikisend.com/download/443370/FindLRFilteredData.xls

編集:

Siddharth との話し合いLast Rowの結果、以下の Sid のソリューションにつながった、表示されている行数のカウントを見つけるために必要なプロパティが欲しくなかったことに気づきました...

4

6 に答える 6

4

フィルターの後、lastrow に同じ数式を使用すると、最後にフィルター処理された行が返されます。

...
With ws
    LR = .Range("A" & Rows.Count).End(xlUp).Row
    .Range("A1:E" & LR).AutoFilter Field:=2, Criteria1:="=4"
    LRfilt =  .Range("A" & Rows.Count).End(xlUp).Row
    Debug.Print LR
    Debug.Print LRfilt
End With
...
于 2012-09-25T16:31:32.467 に答える
1

編集: チャットのフォローアップを投稿する

Option Explicit

Sub FilterTest()
    Dim rRange As Range, fltrdRng As Range, aCell As Range, rngToCopy As Range
    Dim ws As Worksheet
    Dim LR As Long

    '~~> Change this to the relevant sheet
    For Each ws In ThisWorkbook.Worksheets
        If Not ws.Name = "Sheet1" Then
            With ws                    
                '~~> Remove any filters
                .AutoFilterMode = False

                LR = .Range("A" & Rows.Count).End(xlUp).Row

                '~~> Change this to the relevant range
                Set rRange = .Range("A1:E" & LR)

                With rRange
                    '~~> Some Filter. Change as applicable
                    .AutoFilter Field:=2, Criteria1:=">10"

                    '~~> Get the filtered range
                    Set fltrdRng = .SpecialCells(xlCellTypeVisible)
                End With

                For Each aCell In fltrdRng
                    If aCell.Column = 1 Then
                        If rngToCopy Is Nothing Then
                            Set rngToCopy = aCell
                        Else
                            Set rngToCopy = Union(rngToCopy, aCell)
                        End If
                    End If
                Next

                Debug.Print ws.Name
                Debug.Print rngToCopy.Address

                'rngToCopy.Copy

                Set rngToCopy = Nothing

                '~~> Remove any filters
                .AutoFilterMode = False
            End With
        End If
    Next
End Sub
于 2012-09-25T16:17:26.690 に答える
0

データが既にフィルタリングされていると仮定すると、これを試すことができます:

Range("A1").Select

Dim FinalRowFiltered as Long

Dim FR as as String

FinalRowFiltered = Range("A" & Rows.Count).End(xlUp).Row

FR = "A" & CStr(FinalRowFiltered)

Range(FR).Select
于 2021-05-14T07:47:19.757 に答える
-3

これは最も簡単な解決策です

...
        With ws
            .Range("A1:E1").AutoFilter Field:=2, Criteria1:="=4"
             LRfilt=.Range("A1", .Range("A1").End(xlDown)).End(xlDown).Row
             Debug.Print LRfilt
        End With
        ...
于 2014-04-15T11:15:42.430 に答える