[英]How to use INDEX() inside ARRAYFORMULA()?
我正在尝试在ARRAYFORMULA()
使用INDEX()
公式。 作为一个简单的(无意义的)示例,在A
列中有 4 个元素,我预计在B1
输入的以下数组公式将在B
列中显示A
中的所有四个元素:
=ARRAYFORMULA(INDEX($A$1:$A$4,ROW($A$1:$A$4)))
但是,这仅使用在A1
找到的值填充字段B1
。
当我进入
=ARRAYFORMULA(ROW($A$1:$A$4))
在B1
,然后我确实看到所有数字 1 到 4 都出现在B
列中。 为什么我的第一个数组公式不像第二个那样展开?
如果将数组用作其参数之一,则 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。
这是将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) )
注意,您也可以使用 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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.