繁体   English   中英

如何在 ARRAYFORMULA() 中使用 INDEX()?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM