在“选择案例”语句中使用值列表

时间:2019-03-06 06:48:30

标签: excel vba

嗨,我目前正在尝试通过使用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

但是,我想修改该语句以做两件事。

  1. 在案例“ Value1”,“ Value2”,“ Value3”内使用“赞”,因为Value1,2和3与PivotItems中的值不完全匹配。例如,值1为12345,而在PivotItems中为12345a或12345b或12345c。

  2. 我不想在VBA中输入Value1、2和3的实际值,而是希望Case语句引用活动工作表中的单元格范围(例如,Range(“ A1:A100”))。

我已经尝试了许多组合,但是我的代码似乎不起作用。我也不知道该如何使用IF语句。

您的帮助将不胜感激。谢谢!

2 个答案:

答案 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

如果您的字段值是数字而不是文本,则可能不起作用。