ARRAYFORMULA 中 INDEX 的等价物是什么?

问题描述 投票:0回答:5

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

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

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

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

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

google-sheets google-sheets-formula array-formulas gs-vlookup
5个回答
14
投票
通过将查找表的第一列设置为行号(具有适当的偏移量),可以调整

vlookup
来模仿
index
功能。示例:

=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 都会访问
index
会访问的 x!C2:C 条目。


2
投票

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


1
投票

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

代码:

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 数组是从 0 开始的,而 Google Sheets 是从 1 开始的。

您可以在此处查看其演示:https://docs.google.com/spreadsheets/d/1o6uiRr_OKh6lOUY4pOp_5z7hAIzGifFaXUIMOO7SCoc/edit#gid=0


0
投票

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

主要是限制from和to的范围,让数组公式不循环

  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 列。

0
投票

这是一个无需更改所需原始数据的解决方案:

=数组公式(VLOOKUP("*", TRANSPOSE(x!C2:C), F1:F, FALSE))

这应该给出与

相同的结果

=ARRAYFORMULA(VLOOKUP("任意", TRANSPOSE(x!C2:C), F1:F))

(稍作修改:由用户 Luigi 于 2019 年 6 月 9 日 23:03 回答。在 Luigi 的回答中,您实际上也不必修改数据。您不必在 x!C1 中写入“任何内容”。VLOOKUP使用默认值 is_sorted=TRUE 应该始终带来所需的结果,无论您作为 search_key 提交什么,因为查找区域在转置后仅包含一行)。

© www.soinside.com 2019 - 2024. All rights reserved.