【发布时间】:2015-06-18 13:17:15
【问题描述】:
我正在尝试计算过滤数据中特定字符串的出现次数。我可以使用单元格中的公式来做到这一点,但是当我将它与工作簿中的其他宏结合起来时,整个事情就会冻结。
所以我想将计算移至 VBA,以便它仅在宏运行时计算。以下是适用于单元格的公式:
=SUMPRODUCT(SUBTOTAL(3,OFFSET('2015 Master'!H:H,ROW('2015 Master'!H:H)-MIN(ROW('2015 Master'!H:H)),,1)),ISNUMBER(SEARCH("*Temp*",'2015 Master'!H:H))+0)
基本上,我想计算“Temp”出现在 H 列中的次数,但仅出现在过滤后的数据中。
感谢您的帮助!
补充:
这是迄今为止我为宏编写的代码。它过滤不同工作表上的数据,然后使用日期范围更新数据透视表。我想将计数计算添加到此代码的末尾,并将计数返回到“报告”表上的单元格。
子按钮1_Click() '刷新数据透视表和活动工作表中的所有计算
ActiveWorkbook.RefreshAll
'Gather the start and end times from the active sheet
dStart = Cells(2, 5).Value
dEnd = Cells(3, 5).Value
'Change the active sheet to the alarms database, clear all filters and then filter for the defined date range and filter for only GMP alarms
Sheets("2015 Master").Select
If ActiveWorkbook.ActiveSheet.FilterMode Or ActiveWorkbook.ActiveSheet.AutoFilterMode Then
ActiveWorkbook.ActiveSheet.ShowAllData
End If
ActiveSheet.ListObjects("Table44").Range.AutoFilter Field _
:=3, Criteria1:=">=" & dStart, Operator:=xlAnd, Criteria2:= _
"<=" & dEnd
Range("Table44[[#Headers],[GMP or non-GMP]]").Select
ActiveSheet.ListObjects("Table44").Range.AutoFilter Field:=2, Criteria1:= _
"GMP"
'Change the active sheet to the Reporting sheet
Sheets("Reporting").Select
'Within the alarms pivot table clear the label filters then filter for the date range and GMP alarms
ActiveSheet.PivotTables("PivotTable1").PivotFields("Active Time"). _
ClearLabelFilters
ActiveSheet.PivotTables("PivotTable1").PivotFields("Active Time").PivotFilters. _
Add Type:=xlDateBetween, Value1:=dStart, Value2:=dEnd
ActiveSheet.PivotTables("PivotTable1").PivotFields("GMP or non-GMP"). _
CurrentPage = "GMP"
End Sub
【问题讨论】:
-
假设的 VBA 宏如何知道数据是否被过滤?请说清楚。最好的问候,
-
查看我在问题中的补充
-
该代码运行良好。我只是想补充一下。我想计算在 H 列的“2015 Master”表上过滤的数据中出现“temp”的次数。这是过滤的地方:ActiveSheet.ListObjects("Table44").Range.AutoFilter Field _ :=3, Criteria1:=">=" & dStart, Operator:=xlAnd, Criteria2:= _ "
-
那么,你能把你的问题缩小到那个特定的任务吗?其他东西似乎无关紧要:根据您的解释,它已经完成/正常工作。最好的问候,