我想设置报表过滤器,以便枢轴只包含使用通配符的某个单词。
Excel枢轴行(VBA中的xlRowField)可以使用PivotFilters.Add2进行过滤,例如,
ActiveSheet.PivotTables("PivotTable1").PivotFields("RowField").PivotFilters.Add2 _
Type:=xlCaptionContains, Value1:="this"
但我需要过滤报告f(VBA中的xlPageField)。我知道我可以迭代pivotitems:
For i = 1 To PivotItems.Count
If PivotItems(i) Like "*this*" Then
PivotItems(i).Visible = true
else
PivotItems(i).Visible = false
End If
next
但我说的是一个非常大的数据集,其中迭代需要永远,而GUI过滤不会超过一秒钟:
我尝试将GUI过滤记录到一个宏中,结果是Excel只记录了一个手动过滤,好像我手动去了每个项目并进行了检查。
演示数据集
----------------------------
| Name | Class | Grade |
----------------------------
| Joe | B1 | 100 |
----------------------------
| Steve | B2 | 80 |
----------------------------
| Rebecca | C | 99 |
----------------------------
| Sharon | D | 78 |
----------------------------
您可以将其下载为CSV:
Name,Class,Grade
Joe,B1,100
Steve,B2,80
Rebecca,C,99
Sharon,D,78
演示Pivot
-------------------------------------
| Class | (Multiple Items) e.g. B* | How do I do it without iteration?
-------------------------------------
---------------------------------
| Row Labels | Sum of Grade |
---------------------------------
| Joe | 100 |
---------------------------------
| Steve | 80 |
---------------------------------
| Grand Total | 180 |
---------------------------------
答案 0 :(得分:1)
也许这会更快(尽管我还没有在大型数据集上对其进行测试)。
制作名为" searchText"在某个地方的纸张上。
列出一个名为" helper"在数据集的末尾。
放下公式:
=NOT(ISERROR(SEARCH(searchText,B2)))
帮助列中的,其中B表示包含您要搜索的数据的列。
使用此代码:
Dim shtSearch As Worksheet
Dim shtPivot As Worksheet
Dim myPivot As PivotTable
Dim helperPF As PivotField
Set shtSearch = Sheets("Sheet1")
shtSearch.Range("searchText").Value = "b" 'put in whatever you are searching for.
Set shtPivot = Sheets("Sheet4")
Set myPivot = shtPivot.PivotTables("myPivot")
Set helperPF = myPivot.PivotFields("helper")
With helperPF
.Orientation = xlPageField
.Position = 1
End With
helperPF.CurrentPage = "TRUE"
myPivot.PivotCache.Refresh