9

我有(我认为是)一个简单的查找表,其中包含一些汇率。在那里,我正在查找基于行和列索引的值。

我怎样才能在这样的 ARRAYFORMULA 中做到这一点?:

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

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

但是 ARRAYFORMULA 遗憾的是它不起作用,因为我猜 ARRAYFORMULA 不支持 INDEX。

4

4 回答 4

11

vlookupindex可以通过使查找表的第一列成为行号(具有合适的偏移量)来适应模拟功能。例子:

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

做你试图用“=ARRAYFORMULA(INDEX(x!C2:C, F1:F))”做的事情。

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

于 2017-01-07T22:20:26.493 回答
1

您可以编写一个自定义脚本来执行此操作,然后可以使用它来代替常规的 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

于 2018-06-20T01:07:23.577 回答
1

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

于 2019-06-09T23:03:37.447 回答
0

请原谅我的英语。可以以与 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 列生成我们的表,第一列是“ARRAYFORMULA(ROW(x!C2:C1000))”,第二列是 (x!C2:C1000)。“\”符号需要写入不是在 1 列而是在 2 列中的数组。
于 2021-09-14T13:25:33.203 回答