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

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

在图像的第一个数据透视表中,百分比计算没有问题,但是当添加另一个子类别时,所有百分比的总和不是显示单个行“A”的计算结果,必须是79%(第二个数据透视表图片)

有没有什么办法,当数据透视表折叠时,不显示其分类中的所有百分比值的汇总值,并且当数据透视表展开时,只做计算项目,但行级别出现在图像的第三数据透视表中?

在这里输入图像说明

枢轴表由于没有“那一个明显的特征”而臭名昭着。

在这种情况下,“计算总量”(例如%使用总和)应该是“总量的计算”(例如总和)。 不幸的是,似乎没有办法强制这个数据透视表。

作为回退位置,您可以使用VBA。

  • 在VBEditor中,双击包含数据透视表的工作表
  • 在第一个下拉列表中,select工作表。
  • 在第二个下拉列表中,selectPivotTableUpdate

插入以下代码为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 

用于计算%Used的公式是(例如) =C5/B5 ,而不是=GETPIVOTDATA(...)/GETPIVOTDATA(...)

以下屏幕截图显示了filter和布局被修改的结果…

在这里输入图像说明

在这里输入图像说明

在这里输入图像说明

在这里输入图像说明