嵌套For循环和过滤的数据

问候乡亲。

寻找人指点我正确的方向,以帮助我继续寻找信息…我想我正在接近错误的问题,这可能是我的术语或我正在寻找的东西。

我正在使用一组vba代码来计算数据转储中的特定值,并使用它来在“Tracker”工作表(基于filter和条件)上填充表格/表格。

我已经能够得到正确的匹配值的数量,使用这样的代码:

LastRow = Sheets("Colums").Range("AC" & Rows.Count).End(xlUp).Row: vD14 = 0 For Each c1 In Sheets("Colums").Range("AC1:AC" & LastRow) If c1.Value = "Wired" Then vD14 = vD14 + 1 End If Next c1 Sheets("Tracker-Import Data").Range("D14").Value = vD14 'paste the count value into D14 of this sheet 

但是,我们无法find一种方法来“嵌套”多个条件并计算重新提炼的filter数据。 作为一个例子,我试图用一些嵌套调整上面的代码,进一步钻取,使用(这是行不通的)。 编辑编辑 – 澄清 – filter数据在多列。 因此,“有线”在AC列中,进行中可能在E中。

 ' LastRow = Sheets("Colum").Range("E" & Rows.Count).End(xlUp).Row: vF13 = 0 'count items in col E ' For Each c1 In Sheets("Colum,").Range("E1:E" & LastRow) ' If c1.Value = "In-Progress" Then ' For Each c2 In Sheets("Colum,").Range("AC1:AC" & LastRow) ' If c2.Value = "Wired" Then ' vF13 = vF13 + 1 ' End If ' Next c2 ' End If ' Next c1 ' Sheets("Tracker-Import and Data").Range("F13").Value = vF13 

在代码的一个单独的部分,我可以已经拉高级/自动过滤的数据,并粘贴到一个新的表格就好了。 我使用下面的这个位来过滤和粘贴行到一个新的/空白的工作表,这也工作:

 With Sheets("Colums") .Rows(1).Insert 'temporary "header" row to allow for subsequent Autofilter operations Set dataRng = Range(.Cells(1, 1), .Cells(2, 1).CurrentRegion) With dataRng .Rows(1).Value = "temp header" ' assign temporary headers. no matter they actual value, since autofilter will use columns index .AutoFilter Field:=6, Criteria1:="aaaa", Operator:=xlOr, Criteria2:="bbb" .AutoFilter Field:=5, Criteria1:="ccc" .AutoFilter Field:=29, Criteria1:="Wired" If Application.WorksheetFunction.Subtotal(103, .Columns("A")) > 1 Then .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible).EntireRow.Copy Destination:=Worksheets(newTab1).Range("A2") .AutoFilter 'remove filters End With .Rows(1).Delete 'remove temporary "header" row Sheets("Colums").Range("A1").EntireRow.Copy Destination:=Sheets(newTab1).Range("A1") 

我现在基本上有两段代码…并且想保持这种方式:一个在“Tracker”工作表上填充表值,另一个填充行/列数据到子调用时创build的NEW工作表上。

将值发送到新工作表的代码工作得很好,但是由于需要“嵌套”filter,我只能在特定的“Tracker”工作表上填充表值。 如何向第一位添加更多高级筛选以计算精确值。

我在网上发现的唯一一个接近这种情况的就是这一行,但我不知道如何正确地将它与我所拥有的(或者是否是正确的解决scheme)结合在一起:
Rowz = ws.AutoFilter.Range.Columns(5).SpecialCells(xlCellTypeVisible).Cells.Count – 1

我怎样才能修改第一个代码块有多个嵌套的条件和计数这些值? 我想我必须在上面的第一块代码中使用类似这样的东西,但我不确定如何添加类似于自动filter代码的更好的For循环? .AutoFilter字段:= 6,Criteria1:=“aaaa”,运算符:= xlOr,Criteria2:=“bbb”.AutoFilter字段:= 5,Criteria1:=“ccc”.AutoFilter字段:= 29,Criteria1:=“ “

不知道我有完全正确的问题,但这里有一些意见:

要遍历一个范围,并检查多个条件,我会循环的行而不是每个使用

 Sub test() vF13 = 0 With Sheets("colums") LastRow = .Range("AC" & .Rows.Count).End(xlUp).Row For i = LastRow To 2 Step -1 If .Range("E" & i).Value = "In Progress" And .Range("AC" & i).Value = "Wired" Then vF13 = vF13 + 1 End If Next End With Sheets("Tracker-Import and Data").Range("F13").Value = vF13 End Sub 

对于自动filter,您将使用自动filter,然后使用上面列出的计数function

 Sub autofilter() 'clear autofilters from sheet Sheets("sheet2").AutoFilterMode = False With Sheets("sheet2") LastRow = .Range("A" & .Rows.Count).End(xlUp).Row With .Range("A1:C" & LastRow) 'add 1 autofilter .autofilter field:=1, Criteria1:="1" 'add another autofulter .autofilter field:=2, Criteria1:=">=3" 'count rows visibleRows = .Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count - 1 End With End With End Sub 

我可能会离开这里的基础,但似乎你可以在最后一套嵌套中使用带有计数器的If语句。

对于具体的问题,我认为你可以解决它没有第二个循环,只是使用偏移方法。 (我用我的手指 – E到AC是24吗?)

 LastRow = Sheets("Colum").Range("E" & Rows.Count).End(xlUp).Row: vF13 = 0 'count items in col E For Each c1 In Sheets("Colum,").Range("E1:E" & LastRow) If c1.Value = "In-Progress" And c1.Offset(0,24).Value = "Wired" Then vF13 = vF13 + 1 End If Next c1 Sheets("Tracker-Import and Data").Range("F13").Value = vF13