【发布时间】:2020-10-09 19:47:53
【问题描述】:
我在我的工作簿中多次使用以下动态表引用,这会导致性能问题:
SUMIFS(INDIRECT(VLOOKUP($A$1,$A$2:$B$4,2,0)&"[kpi_name]"),INDIRECT(VLOOKUP($A$1,$A$2:$B$4,2,0)&"[filter1]"),UPPER($H13))
根据 A1 中的输入,我需要在 table1、table2 和 table3 之间切换。
我通过在 A2:B4 中构建一个返回适当表名的 vlookup 映射并在间接公式中使用这个 + 列名来做到这一点。
我想使用 INDEX 或其他命名范围转向更好的解决方案。 我尝试使用带有返回正确表引用的公式的命名范围:
=IF(A1=1,table1,IF(A1=2,table2,IF(A1=3,table3,0)))
但是这样我就不能使用named_range[column of table]
我也无法使用 INDEX 获得有效的解决方案...
【问题讨论】:
-
你不能,你被这个模型卡住了。如果它是行或列引用,那么我们可以使用 INDEX,但由于它是父表,父表是相同的,INDIRECT 是唯一的方法。
-
您可以根据 A1 中的选择在 worksheet_change 事件中用 vba 填充第四个表,然后在所有公式中引用该表。这应该会加快速度。
-
要不要加个截图
-
FWIW,我会使用 CHOOSE 而不是嵌套的 IF 语句,但是您仍然需要指定列名,或者使用 INDEX/MATCH 来查找使用该名称的列。
-
由于您使用的是表格和结构化引用,因此您可以使用@Rory 提出的建议,例如
=SUMIFS(CHOOSE(A1,Table1[kpi_name],Table2[kpi_name],Tabe3[kpi_name]),CHOOSE(A1,Table1[filter1],Table2[filter1],Table3[filter1]),UPPER($H13))。
标签: excel excel-formula