0

私はこのようなデータを持っていると考えてください

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

フィルタなしでピボット

ここで、BFSを除外して、以下に示すように各企業レベルで残っている合計を見つけたいとします。

ケース1:フィルタ付きピボット-フィルタを使用する部門としてBFSを削除した後

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

ケース2:部門のフィルタリング後の単一の会社のみのピボットテーブル

 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 に答える