如何在Excel中不使用VBA动态获取数据透视表的最新值
解决方案
你可以通过以下两种无VBA的方案实现需求,任选适配你场景的即可:
方案1:直接定位总计行上方值(通用所有透视表,最简单)
不需要调整GETPIVOTDATA参数,直接通过MATCH定位总计行位置,再用INDEX提取上一行的数值即可,假设你的:
- 透视表行标签列在A列,总计行的行标签为「总计」
- 要提取的数值在B列
公式如下:
=INDEX($B:$B,MATCH("总计",$A:$A,0)-1)
该公式会自动定位总计所在行,向上偏移一行取对应数值,透视表新增行更新后会自动同步最新值,不需要手动修改参数。如果你的数值列是其他列,把公式里的$B:$B替换为对应列即可。
如果你当前Excel的公式参数分隔符为分号(和你给出的示例公式一致),把上述公式里的逗号全部替换为分号即可,对应公式为:
=INDEX($B:$B;MATCH("总计";$A:$A;0)-1)
方案2:动态参数适配GETPIVOTDATA(适配OLAP多维数据集透视表)
如果你必须保留GETPIVOTDATA的调用逻辑,可以把固定的月份参数替换为动态提取的最新月份成员:
如果你的月份行是按时间升序排列,最新月份在总计上方,可以先通过CUBERANKEDMEMBER获取最新的月份维度成员,再代入公式:
=GETPIVOTDATA("[Measures].[Count of DESIGNER]",$A$3,"[Components_Drawings_Data].[DATE (Month)]",CUBERANKEDMEMBER("你的数据集连接名称",[Components_Drawings_Data].[DATE (Month)].[All],CUBECOUNT("你的数据集连接名称",[Components_Drawings_Data].[DATE (Month)].[All])))
把公式里的「你的数据集连接名称」替换为当前透视表对应的OLAP连接名即可,同样如果你的Excel用分号做分隔符,替换公式内的逗号为分号即可。
注意事项
- 如果你的透视表行标签列有其他非透视表内容,可以把
MATCH的查找范围缩小到透视表行所在区域,比如MATCH("总计",$A$3:$A$1000,0),避免匹配到无关内容 - 若总计行标签为其他语言(比如你示例里的意大利语对应「Totale」),把
MATCH的第一个参数替换为实际的总计标签文本即可
内容的提问来源于stack exchange,提问作者codeghi
相关产品推荐
相关产品推荐

