2016-06-01 6 views
1

ピボットテーブルを作成して、2つのカテゴリ(A、B)を使用して年の予算を提示し、使用された予算の割合を示す計算アイテム(=支出/予算)を作成しました。Excelピボットテーブルの計算されたアイテムの表示

画像の最初のピボットテーブルでは計算はすべて正しく行われますが、別のサブカテゴリが追加された場合、単一行 "A"の計算を79%にするだけでなく、

ピボットテーブルが折りたたまれているときに、カテゴリ内のすべてのパーセンテージ値の集計値が表示されず、ピボットテーブルが展開されている場合、計算されたアイテムのみが表示されますイメージの3番目のピボットテーブルに行レベルが表示されますか?

enter image description here

+0

>値をそのまま表示しますか? – Matt

+0

私は合計オプションを持っていますが、リストの別の設定を選択すると、これはすべてのピボットテーブルに適用されます。 –

+0

問題が再現できないようです。サンプルデータセットはありますか? – Matt

答えて

1

ピボットテーブル「は、その1つの明白な機能を」持っていないことで有名です。

この場合、「計算の集計」(たとえば、使用された%の合計)は実際には「集計の計算」(たとえば、合計の使用率)である必要があります。残念ながら、ピボットテーブルからこれを強制する方法はないようです。

フォールバックポジションとして、VBAを使用できます。 VBEditorで

  • 、ダブル、最初のドロップダウンでピボットテーブル
  • を含むワークシートをクリックしてワークシートを選択します。 2番目のドロップダウンで
  • 、Pivo​​tTableUpdate

を選択PivotTableUpdateイベントの次のコードを挿入。それは変化の多くの種類のためにきれいに動作するはずです - 私は夢見ていない場合があると確信しています...

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable) 
Dim rCell As Range, rCol As Range, rRow As Range 
Dim lNewCol As Long, lBudgetCol As Long, lSpendCol As Long, lRow As Long 
Dim sFormula As String 

' Initial 
Application.ScreenUpdating = False 

' Clean up remnants of old calculation 
For Each rRow In ActiveSheet.UsedRange.Rows 
    For Each rCell In rRow.Cells 
     If InStr(rCell.Formula, "=") Then 
      rCell.Delete shift:=xlShiftToLeft 
      GoTo NextCell 
     End If 
     If rCell.Value = "%Used" Then 
      rCell.Columns(1).EntireColumn.Delete shift:=xlShiftToLeft 
      GoTo NextCell 
     End If 
     If rCell.Value = "Budget" Then lBudgetCol = rCell.Column 
     If rCell.Value = "Spending" Then lSpendCol = rCell.Column 
NextCell: 
    Next rCell 
Next rRow 

lNewCol = ActiveSheet.UsedRange.End(xlDown).End(xlToRight).Column + 1 

' Implement new calculation and format 
For Each rRow In ActiveSheet.UsedRange.Rows 
    lRow = rRow.Rows(1).EntireRow.Row 
    ActiveSheet.Cells(lRow, lNewCol - 1).Copy 
    ActiveSheet.Cells(lRow, lNewCol).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ 
     SkipBlanks:=False, Transpose:=False 
    If lRow = 4 Then ActiveSheet.Cells(lRow, lNewCol).Value = "%Used" 
    If lRow > 4 And IsNumeric(ActiveSheet.Cells(lRow, lNewCol - 1).Value) Then 
     sFormula = "=R" & lRow & "C" & lSpendCol & "/R" & lRow & "C" & lBudgetCol 
     ActiveSheet.Cells(lRow, lNewCol).FormulaR1C1 = sFormula 
     ActiveSheet.Cells(lRow, lNewCol).Style = "Percent" 
    End If 
Next rRow 

' clean up 
ActiveSheet.UsedRange.End(xlToLeft).Select 
Application.ScreenUpdating = True 

End Sub 

とは対照的に、使用される%を計算するために使用される式は=C5/B5(例えば)であります単純化のために=GETPIVOTDATA(...)/GETPIVOTDATA(...)です。

次のスクリーンショットは

...フィルタやレイアウトに変更されているような結果を示しますが、値フィールドの設定を持っているどのような設定を行うenter image description here

enter image description here

enter image description here

enter image description here

関連する問題