【问题标题】:Filter-out odd numbers in a PivotTable过滤掉数据透视表中的奇数
【发布时间】:2012-10-12 02:13:38
【问题描述】:

在我的数据透视表的源表中;包含两列;一个用于names,另一个用于scores。正如线程标题所暗示的,我想显示具有偶数分数的人的所有名称及其相应分数。

实现此目的的另一种方法是创建第三列并运行 IF 公式来检查哪些数字是奇数。然后将第三列包含到数据透视表中并将其用作过滤器。

但是有没有办法在不修改源的情况下做同样的事情?

【问题讨论】:

    标签: vba excel excel-2007 pivot-table


    【解决方案1】:

    您可以遍历枢轴项目,然后将它们除以 2 以检查它们是否为偶数,如果不是,则简单地隐藏它们。请参阅此示例。请修改它以满足您的需要。另外,我还没有进行任何错误处理。我相信你可以解决这个问题......

    代码

    Option Explicit
    
    Sub HideOddNumbers()
        Dim ws As Worksheet
        Dim pvtItem As PivotItem
        Dim pvt As PivotTable
        Dim pvtFld As PivotField
    
        '~~> Change this to the respective sheet
        Set ws = ThisWorkbook.Sheets("Sheet1")
    
        '~~> Change this to the respective pivot name
        Set pvt = ws.PivotTables("PivotTable1")
    
        '~~> This is the column
        Set pvtFld = pvt.PivotFields("Scores")
    
        With pvtFld
            .CurrentPage = "(All)"
            .EnableMultiplePageItems = True
    
            '~~> Loop through all items in the pivot and
            '~~> divide the values by 2 and check if they are even or not
            For Each pvtItem In pvtFld.PivotItems
                If Val(pvtItem.Value) Mod 2 <> 0 Then pvtItem.Visible = False
            Next
        End With
    End Sub
    

    屏幕截图

    之前

    之后

    【讨论】:

    • 我试用了您的代码并插入了我的 on 值;代码运行并没有错误地完成,但数据透视表上没有任何变化。该代码确实会循环遍历所有奇数分数(正如我使用 MsgBox 所检查的那样)。 ' 尝试添加 ThisWorkbook.RefreshlAll 甚至使用刷新按钮手动刷新表格,但这些都没有帮助。
    • 不确定这是否有帮助,但我正在使用命令按钮触发代码
    • 这就是我用过的。然而,我在第一条评论中定义的问题仍然存在。
    • 我可以看看你的示例文件吗?如果是,请在 wikisend.com 上传并在此处分享链接...
    • 我实际上已经准备上传文件,但是我重新检查了代码和数据透视表,终于能够找出问题所在。看来我只需要为“分数”添加一个过滤器。在您提供的屏幕截图中我之前没有注意到它,我很傻 :) 谢谢 Siddharth!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多