【问题标题】:Tablecolumn reference in Excel formula changes at new column in table after refreshExcel 公式中的表列引用在刷新后表中的新列发生更改
【发布时间】:2019-12-28 02:44:19
【问题描述】:

我有一个这样的公式:

=INDEX(tblProduct[Supplier];MATCH([@ProductID];tblProduct[ProductID];0))

这里的“tblProduct”是指包含查询结果的范围。该数据的来源是另一个 Excel 工作簿中的表。它有三列:

  1. 产品ID
  2. 产品名称
  3. 供应商

现在当我在供应商之前添加一列时,例如“IntroductionDate”,我刷新了“从”工作簿中的数据,上面提到的公式变为:

=INDEX(tblProduct[IntroductionDate];MATCH([@ProductID];tblProduct[ProductID];0))

如何防止这种情况发生?我知道我可以通过在“从”工作簿中设置查询中的列顺序来防止这种情况,但我认为这是一种解决方法。

那么有没有办法对“tblProduct[Supplier”进行“硬”引用?

【问题讨论】:

    标签: excel-formula refresh powerquery


    【解决方案1】:

    我知道你几周前就问过这个问题,可能不再需要答案,但无论如何都会回复,以防它帮助其他人。

    我不知道有任何功能可以让您以您所描述的方式创建绝对列引用。 (如果这种行为可以由用户指定,那就太好了,因为可能还会有需要当前行为的用例。

    我目前做的是替换:

    tblProduct[Supplier]
    

    与:

    INDEX(tblProduct,0,MATCH("Supplier",tblProduct[#Headers],0))
    

    (根据您问题中的公式,您可能需要将 , 替换为 ; - 但应该可以使用其他方式。)

    这种方法的一个好处是它总是会尝试查找Supplier 列(并从中返回所有行)——因此在这方面它是“绝对的”。缺点是它使公式复杂化(如果您的公式已经很长,这可能是一个问题),而且我还没有真正测试过这种方法是否会对性能产生任何影响。


    另一种方法可能涉及使用INDIRECT("tblProduct[Supplier]")。这种方法的好处是它似乎达到了同样的目的。但缺点包括 INDIRECT 是一个易失函数(因此每次都会重新计算,这会降低电子表格的性能),并且如果您重命名表格,公式中的表格名称不会自动更新。


    您也可以将这些视为解决方法(与您的想法相比)。

    【讨论】:

    • 感谢您的回复。然后将列名作为文字的 INDEX-MATCH 公式也是我正在使用的。我同意你提到的优点和缺点。
    猜你喜欢
    • 2014-03-26
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    相关资源
    最近更新 更多