TL;DR
您可以使用ARRAYFORMULA 和HLOOKUP 来获取您需要的值:
=ARRAYFORMULA(IFERROR(HLOOKUP(C14:Q14, Output!B1:Q, ROW(A2:A), FALSE)))
完整答案
您的代码的主要问题是您手动为每一个选择导入列。一个更好的方法是使用标题作为查找它的一种方式。
此答案旨在成为有关其工作原理的迷你教程。我将使用链接的电子表格来解释它,因此其他电子表格可能需要更改所有范围。
第一步:使用列标题选择Output中的列
为此,我们将使用HLOOKUP。此公式查找具有适当标题的列(第一行),然后返回包含其列和指定行的值。
所以如果你去C15 并添加公式:
=HLOOKUP(C14, Output!B1:Q, 2, FALSE)
您可以看到此单元格上的值成为Output 工作表上Score 列的第一个值。我们添加的参数:
-
C14:我们搜索的值,本例中的头部。
-
Output!B1:Q:我们想要的值的范围。在这种情况下是标题和值。
-
2:我们想要在找到的列上的单元格的索引。以 1(标题)开头。
-
FALSE:如果Output 中的标题已排序。在这种情况下,它们不是。
第 2 步:扩展到C 列中的每一行
现在我们让它适用于单个单元格,让我们将其扩展到多个单元格。为此,我们将ARRAYFORMULA 与ROW 一起使用:
=ARRAYFORMULA(HLOOKUP(C14, Output!B1:Q, ROW(A2:A), FALSE))
ARRAYFORMULA 允许我们做的是在单个单元格中设置一个函数但填充多个单元格。在这种情况下,我们将其扩展到整个列。
但是现在你会意识到我们每次都需要更改索引,也就是我们之前的2需要每个单元格都不同。
这就是ROW 发挥作用的地方:它返回给定单元格的行号。但我们实际上可以要求任何单元格,所以我们从 A2 开始(所以它返回 2)并继续它可以做的一切。它与ARRAYFORMULA 一起生成一个从 2 到文档行数的数字数组。
第 3 步:对每一列重复
ARRAYFORMULA 不仅仅在一个维度上起作用。所以我们可以将它扩展到其他列。更改C14 的列范围就足够了:
=ARRAYFORMULA(HLOOKUP(C14:Q14, Output!B1:Q, ROW(A2:A), FALSE))
第 4 步:过滤错误
现在您会看到一些 #REF 错误。它们是由Output 表中实际不存在的标题引起的。我们可以使用IFERROR 删除错误:
=ARRAYFORMULA(IFERROR(HLOOKUP(C14:Q14, Output!B1:Q, ROW(A2:A), FALSE)))
请注意,这会迫使您在任何地方都使用完全相同的名称,这可能是您不想要的。
第 5 步:根据您的需要进行修改
这个公式是我能想到的最简单的公式,但仍需要对其进行维护和定制。您基本上可以修改公式中的两件事:
-
C14:Q14:此范围是要比较以生成列的值。我们正在使用标题,但不是必须的。您甚至可以从另一张纸上使用另一行。这可以使标题具有不同的名称。
-
Output!B1:Q这个范围是所有数据。如果您添加新行,则需要更改它。
请注意,您无法在第一个区域的列中手动添加值,因此实际上可能需要多个公式。您只需要更改第一个范围。
您可以改进此公式并为其添加更多功能,但它会很快变得复杂。
参考文献