我正在尝试按公司名称过滤数据工作表。当我使用Criteria1“name”自动筛选时,假设我正在搜索的公司是Google,我将获得一些数据行(为了参数,我说我得到6行)。当我获得这6行数据时,我需要单独访问每一行,并复制该行(粘贴在另一张表中)。但是,我不能使用.Rows()元素,因为行号不是有序的;一行可能是第6行,另一行是第37行,另一行是第1234行等。这是我的过滤方法,万一有人需要看到它:
Sheets("Weekly").Range("$A$1:$A$473").AutoFilter Field:=1, Criteria1:=name
如何在不知道其行号的情况下访问每个已过滤行的数据?或者我如何访问该行号?
答案 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
我们假设我的工作表看起来像这样:
以上代码将进行过滤,以便只有列B包含" B"显示。它首先检查过滤器是否已经打开,如果是,则将其关闭。然后按您的标准过滤。然后它遍历所有行,并且仅适用于非隐藏行。因此,立即窗口中的输出为5.
2注意:首先,这适用于大多数情况。如果你有一个巨大的电子表格,循环将花费更长的时间,并且有更强大的方法只能循环显示所显示的单元格,但它们稍微复杂一些。另请注意,AutoFilter命令假定第一行包含列标题。