嗨,我目前正在尝试通过使用select case语句在我的数据透视表中隐藏不必要的PivotItem。
我的精选案例声明如下:
ws = ActiveWorksheet
For Each oPI In ws.PivotTables(1).PivotFields("Reference Number").PivotItems
Select Case oPI.Value
Case "Value1","Value2","Value3"
'Do Nothing
Case Else
oPI.Visible = False
End Select
Next
但是,我想修改该语句以做两件事。
在案例“ Value1”,“ Value2”,“ Value3”内使用“赞”,因为Value1,2和3与PivotItems中的值不完全匹配。例如,值1为12345,而在PivotItems中为12345a或12345b或12345c。
我不想在VBA中输入Value1、2和3的实际值,而是希望Case语句引用活动工作表中的单元格范围(例如,Range(“ A1:A100”))。
我已经尝试了许多组合,但是我的代码似乎不起作用。我也不知道该如何使用IF语句。
您的帮助将不胜感激。谢谢!
答案 0 :(得分:1)
您可以读取值范围,以将其检查到与当前数据透视表项进行比较的循环数组中。我使用Instr而不是Like和通配符(%)来查看是否存在子字符串。
Dim arr(), ws As Worksheet, i As Long
Set ws = ThisWorkbook.Worksheets("Sheet1")
arr = Application.Transpose(ws.Range("A1:A100").Value)
'other code
For Each oPI In ws.PivotTables(1).PivotFields("Reference Number").PivotItems
For i = LBound(arr) To UBound(arr)
If InStr(arr(i), oPI.Value) > 0 Then
oPI.Visible = False
Exit For
End If
Next
Next
答案 1 :(得分:0)
使用数组公式和Match
查找“喜欢”匹配项:
Dim ws, oPI, r
Set ws = ActiveSheet
For Each oPI In ws.PivotTables(1).PivotFields("Reference Number").PivotItems
r = ws.Evaluate("=MAX(IFERROR(MATCH(A1:A100 & ""*"",""" & oPI.Value & """,0),0))")
oPI.Visible = (r = 0)
Next
如果您的字段值是数字而不是文本,则可能不起作用。