使用自动过滤器循环显示列表

时间:2017-06-05 15:22:50

标签: excel vba excel-vba

我有一个公司列表(listA,位于工作表Workings2中)和公司列表(ListB - 每个公司有多个条目,位于工作表数据中)附带数据,列表A我希望能够采取公司(在B列的单元格中)并在自动过滤器上循环遍历listB,以便我可以检查某个列(AZ)是否在特定波段(100,000-500,000)中具有一定数量的值。一旦我有数字计数,我想将它添加到工作表工作。在ListB中的每个公司之后,我想重置过滤器并为下一个公司重新设置过滤器

我有下面的代码,我已经拼凑在一起,但是它给出了一个没有意义的古怪数字(大约30,000,当我看着大约100时)

Sub calculate1()

Dim wsCriteria As Worksheet, wsData As Worksheet, wsDest As Worksheet
Dim CompanyListLocation
Dim lr As Long, dlr As Long
Application.ScreenUpdating = False
Set wsCriteria = Sheets("Dashboard")
Set wsData = Sheets("Data")
Set wsDest2 = Sheets("Workings2")

Dim rCell As Range
Dim rRng As Range
Set rRng = wsData.Range("B3: B418")

For i = 0 To 419

   With wsData.Rows(1)
        .AutoFilter Field:=5, Criteria1:=i

lr = wsData.UsedRange.Rows.Count
dlr = wsDest2.Cells(Rows.Count, 1).End(xlUp).Row + 1
'wsData.AutoFilterMode = False

With wsData.Rows(1)
.AutoFilter Field:=3, Criteria1:="Forward", Operator:=xlOr, Criteria2:="NDF"
  If wsDest2.Range("C1:C" & lr).SpecialCells(xlCellTypeVisible).Cells.Count 
> 1 Then
  ff = Application.WorksheetFunction.CountIfs(wsData.Range("AZ:AZ"), ">" & 
100000, wsData.Range("AZ:AZ"), "<" & 500000)
wsDest2.Range("C3").Value = ff
     End If
.AutoFilter
End With
End With

Next i
End Sub

如果有人可以提供帮助,那将会很棒。

1 个答案:

答案 0 :(得分:1)

我还不清楚为什么这不是你想做的。这似乎是一个更简洁的解决方案。您需要将公司过滤器(例如.AutoFilter Field:=5, Criteria1:=i)添加到COUNTIFS以获得正确的结果。 COUNTIFS未按.AutoFilter过滤。

=SUM(COUNTIFS(E:E, BB2, AZ:AZ, ">="&BC2, AZ:AZ, "<="&BD2, C:C, {"forward","ndf"}))

enter image description here