我有(我认为是)一个简单的查找表,其中包含一些汇率。在那里,我正在查找基于行和列索引的值。
我怎样才能在这样的 ARRAYFORMULA 中做到这一点?:
=ARRAYFORMULA(INDEX(x!C2:C, F1:F))
x
是保存值的工作表,我对 C 列感兴趣,行索引保存在我的 F 列中。像INDEX(x!C2:C, F7)这样的单值查找按预期工作。
但是 ARRAYFORMULA 遗憾的是它不起作用,因为我猜 ARRAYFORMULA 不支持 INDEX。
我有(我认为是)一个简单的查找表,其中包含一些汇率。在那里,我正在查找基于行和列索引的值。
我怎样才能在这样的 ARRAYFORMULA 中做到这一点?:
=ARRAYFORMULA(INDEX(x!C2:C, F1:F))
x
是保存值的工作表,我对 C 列感兴趣,行索引保存在我的 F 列中。像INDEX(x!C2:C, F7)这样的单值查找按预期工作。
但是 ARRAYFORMULA 遗憾的是它不起作用,因为我猜 ARRAYFORMULA 不支持 INDEX。
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 都会访问 x!C2:C 的条目index
。
您可以编写一个自定义脚本来执行此操作,然后可以使用它来代替常规的 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就不会循环