0

考虑我有这样的数据

Company     Department  Size
=================================
HCL         BFS         50
HCL         Insurance   60
CTS         BFS         20
CTS         Insurance   30
CTS         Healthcare  50

不带任何过滤器的枢轴

在这里,假设我想过滤掉 BFS 并找到每个公司级别的剩余总数,如下所示

情况1:Pivot With filter - 在使用过滤器删除 BFS 作为部门之后

 Company    Department  Total
 CTS    Healthcare  50
        Insurance   30
 CTS Total           80
 HCL    Insurance   60
 HCL Total           60
 Grand Total        140

案例二:过滤部门后只有单个公司的数据透视表

 CTS    Healthcare  50
 CTS Total           50
 Grand Total        50

尝试相同的宏代码

 For Each V In Set visiblePivot = ActiveSheet.PivotTables("PivotTable2") _
           .PivotFields("Company").VisibleItems
 str = (str & "," & V)
 Next V
 MsgBox str

那么在运行宏时我会得到什么输出?

编辑:

对于案例 1,我将输出作为 HCL 和 CTS

 ---------------------------
 Microsoft Excel
 ---------------------------
 ,CTS,HCL
 ---------------------------
 OK   
 ---------------------------

对于案例 2,我将输出作为 HCL 和 CTS。

 ---------------------------
 Microsoft Excel
 ---------------------------
 ,CTS,HCL
 ---------------------------
 OK   
 ---------------------------

那么我期望输出是什么?

对于案例 1,我希望输出为 HCL 和 CTS

 ---------------------------
 Microsoft Excel
 ---------------------------
 ,CTS,HCL
 ---------------------------
 OK   
 ---------------------------

对于案例 2,我希望输出仅为 CTS。

 ---------------------------
 Microsoft Excel
 ---------------------------
 ,CTS
 ---------------------------
 OK   
 ---------------------------

总结

请让我知道如何在过滤Company字段时使用宏获得可见的名称Department

4

1 回答 1

0

这是我最终用来在数据透视表中查找过滤数据的代码

Sub getVisibleFields()
    ' this will return all the rows that are visible in the 
    'pivot table. Even the subtotal rows
    Set visibleCompany = ActiveSheet.PivotTables("PivotTable2") _
               .PivotFields("Company").DataRange
    For Each V In visibleCompany
        ' different values can be checked to filter out unwanted data
        'to find data like "CTS Total           80"
        If InStrRev(visibleCompany(i + 1), " Total") > 0 Then
            MsgBox ("Total is " & visibleCompany(i + 1)
        End If
        str = (str & "," & V)
    Next V
    MsgBox str
 End Sub
于 2012-11-06T06:16:18.573 回答