访问由VBAsearch返回的数据行

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

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

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

这是一个典型的方法:

 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 

我会build议筛选,然后遍历所有可见的单元格。 例如,请考虑以下几点:

 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”的行。 它首先检查是否有一个filter已经打开,如果是的话,将其closures。 然后按照您的标准过滤。 然后循环遍历所有行,只适用于非隐藏行。 因此,立即窗口中的输出是5。

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