Excel 宏 VBA - 仅选择筛选数据的前 3 行

问题描述 投票:0回答:1

只是想知道是否有人可以帮忙? 我使用 VBA 过滤 A 列中的产品“红色”,它已成功返回 5 行。 下一步是使用 VBA 仅复制前 3 个过滤结果以及标题 (第 1、2、7 和 10 行)到另一张纸。

我在让宏(尝试偏移)选择前 3 个过滤范围时遇到困难 - 它只选择了第 1 行到第 4 行,而不是过滤范围(第 1,2 7,10 行)。

选择所有筛选的行时我没有任何问题,只有当我只想要 Top3 筛选结果时才会卡住。

有人可以给我一些指点吗? 谢谢。

示例如下: 行列A列B行

  1.  Product  Team       1
    
  2.  Red      1000.      2
    
  3.  Red      2000       7
    
  4. Red      3000.      10
    
  5. Red      4000.      12
    
  6. Red      5000.      15
    
excel vba range filtered
1个回答
0
投票
Option Explicit
Sub Demo()
    Dim visRng As Range, copyRng As Range, iR As Long
    Dim ColCnt As Long, rRow As Range, rArea As Range
    Const ROWS_COPY = 4
    With ActiveSheet.Range("A1").CurrentRegion
        ColCnt = .Columns.Count
        .AutoFilter Field:=1, Criteria1:="Red"
        Set visRng = .SpecialCells(xlCellTypeVisible)
        If Not visRng Is Nothing Then
            If visRng.Cells.Count / ColCnt > ROWS_COPY Then
                For Each rArea In visRng.Areas
                    For Each rRow In rArea.Rows
                        If copyRng Is Nothing Then
                            Set copyRng = rRow
                        Else
                            Set copyRng = Application.Union(copyRng, rRow)
                        End If
                        iR = iR + 1
                        If iR = ROWS_COPY Then Exit For
                    Next
                    If iR = ROWS_COPY Then Exit For
                Next
            Else
                Set copyRng = visRng
            End If
            Sheets.Add
            copyRng.Copy Range("a1")
        End If
        .AutoFilter
    End With
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.