问候人们。
寻找有人指出我正确的方向,以帮助我继续搜索信息...我认为我正在接近问题,这可能是我的术语或我正在寻找的东西。
我正在使用一组vba代码来计算数据转储中的特定值,并使用它来填充“跟踪器”表单上的网格/表格(基于过滤器和条件)。
我已经能够使用以下代码获得正确匹配值的数量:
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
但我很难找到一种方法来“嵌套”多个条件并计算重新精炼的过滤数据。作为一个例子,我尝试使用一些嵌套来调整上面的代码,使用它进一步向下钻取(这不起作用)。编辑编辑 - 澄清 - 过滤数据在多列上。所以'有线'在AC列中,In-Progress可能在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'表单上的表值,另一个用于将行/列数据填充到子调用创建的NEW表单上。
将值发送到新工作表的代码工作正常,但由于需要“嵌套”过滤器,我只能在特定“跟踪器”工作表上填充表值方面取得部分成功。如何向第一位添加更高级的过滤以计算精炼值。
我在网上发现的唯一接近这种情况的是这条线,但我不确定如何正确地将它与我所拥有的(或者如果它是正确的解决方案)合并: Rowz = ws.AutoFilter.Range.Columns(5).SpecialCells(xlCellTypeVisible).Cells.Count - 1
如何修改第一个代码块以具有多个嵌套条件并COUNT这些值?我想我必须在上面的第一个代码块中使用这样的东西,但我不确定如何添加类似自动过滤器代码的东西以获得更好的For循环?
答案 0 :(得分:1)
我不确定我是否完全正确地提出了这个问题,但这里有一些评论:
要遍历某个范围并检查多个条件,我会在行上循环,而不是每个使用
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
对于自动过滤器,您可以使用自动过滤器,然后使用上面列出的计数功能
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
答案 1 :(得分:0)
我可能会离开这里,但似乎你可以在最后一组嵌套中使用带有计数器的If
语句。
答案 2 :(得分:0)
对于你遇到的具体问题,我认为你可以在没有第二个循环的情况下解决它,只需使用Offset方法。 (我用手指 - E到AC是24对吗?)
dataset.table00
dataset.table01
dataset.table02
...
dataset.table99