如何创建引用 Excel 数据透视表中的单元格值的计算字段

rod*_*edo 3 excel pivot-table calculated-field

我的数据如下所示:

Col1 | Value
A    | 1
B    | 1
A    | 3
C    | 7
Run Code Online (Sandbox Code Playgroud)

以及汇总 col1 值的数据透视表。此外,我在另一个单元格(在另一个工作表中)中有一个汇率表,我想在我的数据透视表中创建一个计算字段,该字段乘以该单元格中的汇率值。这可能吗?如何?原因是用户可能会在单元格中更改汇率,但他们不知道如何在计算字段中更改它。我知道我可以简单地在源数据中添加一个包含计算值的列,但如果可能的话,我想将其作为计算数据透视表字段。

jef*_*eir 5

通过使用一点 VBA 将表“从属于”数据透视表,您可以实现与您所追求的类似的效果。请参阅我发布的这个答案,可以对其进行调整以有效地实现您想要的目标。

或者,您可以将源数据中的各个总计乘以名为 Exchange_Rate 的命名范围,并使用一小部分 VBA 来在用户更改 Exchange_Rate 输入参数时刷新数据透视表。

看起来是这样的:

第一汇率

...如果我更改橙色输入单元格中的 ExchangeRate 变量:

在此输入图像描述

为此,我在相关工作表模块中有一小段 VBA,它只是监视输入单元格是否有任何更改,然后刷新数据透视表,以便数据透视表反映基础源数据中的更新值:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("ExchangeRate")) Is Nothing Then ActiveSheet.PivotTables("PivotTable1").PivotCache.Refresh
End Sub
Run Code Online (Sandbox Code Playgroud)

或者,您可以在以特定汇率设置计算字段时记录宏,然后修改该代码,以便替换汇率部分以匹配对该橙色单元格的任何更改: 计算字段

...这是执行此操作的事件处理程序代码:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("ExchangeRate")) Is Nothing Then _
    ActiveSheet.PivotTables("PivotTable1").CalculatedFields("Local Cost"). _
        StandardFormula = "='Value ($USD)'/ " & Range("ExchangeRate")
End Sub
Run Code Online (Sandbox Code Playgroud)

或者,如果您有能力使用 PowerPivot,则可以使用Rob Collie 的 Disconnected Slicer 技巧

  • 你的问题只是问是否可能。你没有提到你不想使用VBA。当你提出问题时,你需要澄清这些事情,这样像我这样的人就不会浪费时间去追求你不会使用的方法。 (3认同)