【问题标题】:Create dynamic table & column reference without INDIRECT创建没有 INDIRECT 的动态表和列引用
【发布时间】: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


【解决方案1】:

感谢我提出的最初问题的 cmets:

SUMIFS(INDEX(CHOOSE(A1,TABLE1,TABLE2),,MATCH(VAR_COLUMN_NAME,INDEX(CHOOSE(A1,TABLE1,TABLE2),1,0),0)),INDEX(CHOOSE(A1,TABLE1,TABLE2),,MATCH("filter1",INDEX(CHOOSE(A1,TABLE1,TABLE2),1,0),0)),UPPER(ABC))

【讨论】:

    猜你喜欢
    • 2016-03-23
    • 1970-01-01
    • 2022-10-13
    • 2021-03-14
    • 2019-02-04
    • 1970-01-01
    • 2017-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多