5

我正在尝试INDEX()ARRAYFORMULA(). 作为一个简单(无意义)的示例,在 column 中有 4 个元素A,我希望输入的以下数组公式B1将显示Acolumn 中的所有四个元素B

=ARRAYFORMULA(INDEX($A$1:$A$4,ROW($A$1:$A$4)))

B1但是,这只会用在 中找到的值填充字段A1

当我进入

=ARRAYFORMULA(ROW($A$1:$A$4))

B1,然后我确实看到所有数字 1 到 4 都出现在列中B。为什么我的第一个数组公式不像第二个那样扩展?

4

3 回答 3

9

如果将数组用作其参数之一,则 INDEX 函数不支持对数组进行“迭代”。据我所知,没有这方面的文件;它就是这样。所以第二个参数将始终默认为数组的第一个元素,即 ROW(A1)。

实现所需内容的一种笨拙的解决方法依赖于源数据旁边存在的第二个相邻列*(尽管第二列中的实际值并不重要):

=ArrayFormula(HLOOKUP(IF(ROW($A$1:$A$4);$A$1);$A$1:$B$4;ROW($A$1:$A$4);0))

或者确实是这样的:

=ArrayFormula(HLOOKUP(IF({3;2;4;1};$A$1);$A$1:$B$4;{3;2;4;1};0))


编辑 2015-06-09

* 这在最新版的表格中不再需要;HLOOKUP 中的第二个参数可以是 $A$1:$A$4。

于 2013-04-22T06:49:24.887 回答
2

这是vlookup与数组一起使用的提示,因此即使稍后在公式上移动列,公式仍然可以正常工作....

通常,配置 vlookup 使其仅读取 2 列并返回第二列。这可以通过仅输入所需的 2 列而不是范围和列索引来完成。

例子:

替换以下公式,如果移动列,则该公式将失败

=arrayformula( vlookup(C:C, booking!$A:$E ,5 ,false) )

使用这个公式,即使列被移动,它也将继续工作

=arrayformula( vlookup(C:C, {booking!$A:$A,booking!$E:$E} ,2 ,false) )
于 2019-08-25T11:58:52.483 回答
0

注意,您也可以使用 vlookup 模拟索引函数。

例子:

列 R:R 包含用于在列预订中查找数据的行索引号!$A:$A

=arrayformula(vlookup(R:R ,arrayformula({row(booking!$A:$A), booking!$A:$A}),2 , false))

它是一个嵌套数组,因此分阶段测试可能会有所帮助,例如,仅举一个示例的内部部分,例如第 10 行中的返回条目:

=vlookup(10 ,arrayformula({row(booking!$A:$A), booking!$A:$A}),2 , false)
于 2019-08-25T12:12:14.030 回答