ARRAYFORMULA 中 INDEX 的等价物是什么?

What is an equivalent for INDEX in ARRAYFORMULA?

我有(我以为是)一个简单的查询 table 持有一些汇率。我正在查找基于行和列索引的值。

如何在这样的 ARRAYFORMULA 中执行此操作?:

=ARRAYFORMULA(INDEX(x!C2:C, F1:F))

x 是 sheet 保存值,我对列 C 感兴趣,行索引保存在我的列 F 中。单值查找如 INDEX(x! C2:C, F7) 正在按预期工作。

但不幸的是,ARRAYFORMULA 无法正常工作,因为我猜 ARRAYFORMULA 不支持 INDEX。

vlookup 可以通过使查找的第一列 table 成为行号(具有 suitable 偏移量)来模仿 index 功能。示例:

=arrayformula(vlookup(F1:F, {row(x!C2:C) - row(x!C2) + 1, x!C2:C}, 2))

执行您尝试使用“=ARRAYFORMULA(INDEX(x!C2:C, F1:F))”执行的操作。

查找 table {row(x!C2:C) - row(x!C2) + 1, x!C2:C} 具有第一列 1,2,3,...,第二列是您希望索引的范围。因此,对于 F1:F 中的每个值,vlookup 会访问 index 会访问的 x!C2:C 的条目。

您可以编写自定义脚本来执行此操作,然后可以使用它来代替常规的 index() 函数。只需对工具 --> 脚本编辑器进行操作,然后粘贴代码,保存,然后您就可以像 Google 工作表中的普通函数一样使用该函数了。

代码:

function INDEXMULTI(array, rows, columns) {
  var ret = new Array;
  var i;
  if (rows[0].length != columns[0].length)
    return "Error: Row and column count must be the same";
  for (i=0; i<rows[0].length; i++)
    ret.push(array[(rows[0][i]-1)][(columns[0][i]-1)]);
  return ret;
}

该函数将要提取数据的数组作为第一个参数,然后将要提取的数据的行和列作为第二个和第三个参数。代码中的 [0] 只是从一维数组中提取值,而 -1 是因为 javascript 数组是基于零的,而 Google 工作表是基于 1 的。

你可以在这里看到它的演示:https://docs.google.com/spreadsheets/d/1o6uiRr_OKh6lOUY4pOp_5z7hAIzGifFaXUIMOO7SCoc/edit#gid=0

您可以通过在 x!C1 中写入 "Anything" 并使用 Vlookup 替换索引: =ARRAYFORMULA(Vlookup("Anything", TRANSPOSE(x!C2:C),F1:F))

请原谅我的英语。 可以以几乎与 INDEX 相同的方式使用 VLOOKUP。 =IFERROR(ARRAYFORMULA(VLOOKUP(ARRAYFORMULA((F1:F1000)));({ARRAYFORMULA(ROW(x!C2:C1000))(x!C2:C1000)});2;0));"")

主要是限制from和to的范围,让arrayformula不循环

  1. 对于 VLOOKUP,search_key 是 ARRAYFORMULA ((F1:F1000) - 范围数组。
  2. 对于 VLOOKUP 范围 -({ARRAYFORMULA(ROW (x!C2:C1000))(x!C2:C1000)})
  • 从 2 列生成我们的 table,第一列是“ARRAYFORMULA(ROW(x!C2:C1000))”,第二列 (x!C2:C1000)。需要“\”符号才能写入不是第 1 列而是第 2 列的数组。