访问VBA搜索返回的数据行

时间:2015-07-27 15:27:24

标签: excel vba excel-vba

我正在尝试按公司名称过滤数据工作表。当我使用Criteria1“name”自动筛选时,假设我正在搜索的公司是Google,我将获得一些数据行(为了参数,我说我得到6行)。当我获得这6行数据时,我需要单独访问每一行,并复制该行(粘贴在另一张表中)。但是,我不能使用.Rows()元素,因为行号不是有序的;一行可能是第6行,另一行是第37行,另一行是第1234行等。这是我的过滤方法,万一有人需要看到它:

Sheets("Weekly").Range("$A$1:$A$473").AutoFilter Field:=1, Criteria1:=name

如何在不知道其行号的情况下访问每个已过滤行的数据?或者我如何访问该行号?

2 个答案:

答案 0 :(得分:2)

这是一种典型的方式:

Sub dural()
    Dim Name as string, r as Range, k as Long
    Name = "Google"
    Sheets("Weekly").Range("$A$1:$A$473").AutoFilter Field:=1, Criteria1:=Name

    k = 1
    For Each r In Sheets("Weekly").Range("$A$1:$A$473")
        If r.EntireRow.Hidden = False Then
            r.EntireRow.Cells.Copy Sheets("Sheet2").Range("A" & k)
            k = k + 1
        End If
    Next r
End Sub

答案 1 :(得分:1)

我建议过滤然后循环遍历所有可见的单元格。例如,请考虑以下事项:

Sub Add_Bs()
    Dim sum As Double
    Dim i As Integer

    sum = 0
    If Sheet1.AutoFilterMode Then
        Sheet1.ShowAllData
    End If

    Sheet1.Range("A1:C10").AutoFilter 2, "B"
    For i = 2 To Sheet1.UsedRange.Rows.count
        If Sheet1.Cells(i, 1).EntireRow.Hidden = False Then
            sum = sum + Sheet1.Cells(i, 3)
        End If
    Next
    Debug.Print sum
End Sub

我们假设我的工作表看起来像这样:

Sheet1

以上代码将进行过滤,以便只有列B包含" B"显示。它首先检查过滤器是否已经打开,如果是,则将其关闭。然后按您的标准过滤。然后它遍历所有行,并且仅适用于非隐藏行。因此,立即窗口中的输出为5.

2注意:首先,这适用于大多数情况。如果你有一个巨大的电子表格,循环将花费更长的时间,并且有更强大的方法只能循环显示所显示的单元格,但它们稍微复杂一些。另请注意,AutoFilter命令假定第一行包含列标题。