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不循环
- 对于 VLOOKUP,search_key 是 ARRAYFORMULA ((F1:F1000) - 范围数组。
- 对于 VLOOKUP 范围 -({ARRAYFORMULA(ROW (x!C2:C1000))(x!C2:C1000)})
- 从 2 列生成我们的 table,第一列是“ARRAYFORMULA(ROW(x!C2:C1000))”,第二列 (x!C2:C1000)。需要“\”符号才能写入不是第 1 列而是第 2 列的数组。
我有(我以为是)一个简单的查询 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不循环
- 对于 VLOOKUP,search_key 是 ARRAYFORMULA ((F1:F1000) - 范围数组。
- 对于 VLOOKUP 范围 -({ARRAYFORMULA(ROW (x!C2:C1000))(x!C2:C1000)})
- 从 2 列生成我们的 table,第一列是“ARRAYFORMULA(ROW(x!C2:C1000))”,第二列 (x!C2:C1000)。需要“\”符号才能写入不是第 1 列而是第 2 列的数组。