在Excel数据透视表中显示计算项目

时间:2016-06-01 14:51:22

标签: excel pivot-table

我创建了一个数据透视表,使用2个类别(A,B)显示年度预算,并创建一个显示预算百分比的计算项目(=支出/预算)。

在图像的第一个数据透视表中,百分比计算可以正常进行,但是当添加另一个子类别时,所有百分比的总和而不是仅显示单行“A”的计算,该计算必须为79%(图像的第二个数据透视表)

在折叠数据透视表时,是否有任何方法不显示其类别中所有百分比值的汇总值,并且在展开数据透视表时,只显示计算项目但行级别显示为第3个数据透视表图像?

enter image description here

1 个答案:

答案 0 :(得分:1)

数据透视表是因为没有"那个明显的功能而出了名。"。

在这种情况下,"计算的总和" (例如,已使用百分比的总和)应该是"计算聚合" (例如,使用的百分比)。不幸的是,似乎没有办法从枢轴表中强制解决这个问题。

作为后备职位,您可以使用VBA。

  • 在VBEditor中,双击包含数据透视表的工作表
  • 在第一个下拉菜单中,选择工作表。
  • 在第二个下拉列表中,选择PivotTableUpdate

为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