如何让GETPIVOTDATA函数的pivot_table参数动态引用单元格而非硬编码
问题描述
需要将GETPIVOTDATA函数的pivot_table参数改为引用可变单元格,替代硬编码的工作表/数据透视表位置。现有公式:
=GETPIVOTDATA("Message ID",'Intake Inventory Pivots'!$B$2,"Queue Desc",R4,"Role Desc",C4)
目标是把'Intake Inventory Pivots'!$B$2替换为对单元格S4的引用,实现每行可指向不同数据透视表,向下填充公式时无需手动修改。尝试多种拼接公式及命名范围方法均未成功,失败的尝试包括:
- 公式:
=GETPIVOTDATA("Message ID",S4,"Queue Desc",R4,"Role Desc",C4),S4内容为''Intake Inventory Pivots'!$B$2或'Intake Inventory Pivots'!$B$2 - 公式:
=GETPIVOTDATA("Message ID","'"&S4&"'!$B$2","Queue Desc",R4,"Role Desc",C4),S4内容为Intake Inventory Pivots - 公式:
=GETPIVOTDATA("Message ID",S4&"!$B$2","Queue Desc",R4,"Role Desc",C4),S4内容为''Intake Inventory Pivots'或'Intake Inventory Pivots' - 公式:
=GETPIVOTDATA("Message ID",S4,"Queue Desc",R4,"Role Desc",C4),S4内容为命名范围Intake_Inventory_Pivot(指向'Intake Inventory Pivots'!$B$2)
解决方法
GETPIVOTDATA的pivot_table参数要求传入单元格对象,而非文本字符串,直接拼接文本无法被函数识别,以下两种方法可以解决问题:
方法1:用INDIRECT转换文本为单元格引用
情况1:S4仅存储工作表名称(如Intake Inventory Pivots)
使用INDIRECT将工作表名称拼接成完整的单元格引用,公式如下:
=GETPIVOTDATA("Message ID",INDIRECT("'"&S4&"'!$B$2"),"Queue Desc",R4,"Role Desc",C4)
情况2:S4存储完整的单元格引用文本(如'Intake Inventory Pivots'!$B$2)
直接用INDIRECT解析S4中的文本:
=GETPIVOTDATA("Message ID",INDIRECT(S4),"Queue Desc",R4,"Role Desc",C4)
方法2:正确使用命名范围
如果为每个数据透视表创建了命名范围(如Intake_Inventory_Pivot指向'Intake Inventory Pivots'!$B$2),需通过INDIRECT将S4中的命名范围名称转换为单元格引用:
=GETPIVOTDATA("Message ID",INDIRECT(S4),"Queue Desc",R4,"Role Desc",C4)
注意:命名范围名称不能包含空格,需用下划线或其他合法字符替代。
内容的提问来源于stack exchange,提问作者Storphid
相关产品推荐
相关产品推荐

