OFFSET可能是您想要的函数。
=OFFSET(A1:A4,1,,2)
回答你的问题,INDEX函数确实可以用来返回一个数组。或者说,使用两个带有冒号的INDEX函数:
=INDEX(A1:A4,2):INDEX(A1:A4,3)
这是因为INDEX实际上返回一个单元格引用或者数字,Excel会根据你询问的上下文来确定你想要什么。如果你在两个INDEX函数之间加上冒号,Excel会认为“嘿,一个冒号...通常这两边都有一个单元格引用”,所以解释INDEX就是那样。你可以在
http://www.excelhero.com/blog/2011/03/the-imposing-index.html了解更多相关内容。
我实际上更喜欢使用INDEX而不是OFFSET,因为OFFSET是不稳定的,意味着它会在任何时候重新计算,并强制其下游的任何公式也这样做。更多信息请参见我的文章
https://chandoo.org/wp/2014/03/03/handle-volatile-functions-like-they-are-dynamite/。
你实际上可以只使用一个INDEX并返回一个数组,但这很复杂,需要一些叫做“取消引用”的东西。这里是我正在撰写的书中的一些内容:
此屏幕截图中的工作表具有名为Data的命名区域,该区域分配给顶部的范围A2:E2。该范围包含数字10、20、30、40和50。它还有一个名为Elements的命名区域,该区域指定了范围A5:B5。该Elements区域告诉A8:B8中的公式应显示Data区域中的这五个数字中的哪些。
![enter image description here](https://istack.dev59.com/gEKvd.webp)
如果您查看A8:B8中的公式,您会发现它是一个数组输入的INDEX函数:{=INDEX(Data,Elements)}。该公式表示:“根据用户在元素范围内选择的任何元素,转到数据范围并从中获取元素。”
在这种特定情况下,用户请求其中的第五个和第二个项目。确实,这就是INDEX获取到A8:B8单元格中对应值的方式:50和20。
但是,请注意,如果您将完好无损的INDEX函数放入SUM中,如A11所示,会出现错误的结果:50 + 20不等于50。Excel中的20去哪了?
由于某种原因,虽然`=INDEX(Data,Elements)`很高兴地从某个地方获取不同的元素,然后将这些数字分别返回到一个范围中,但如果您要求它将这些数字提供给另一个函数,它却相当不愿意遵从。事实上,它非常不愿意,以至于它仅将第一个元素传递给函数。
因此,如果想要对其进行其他操作,似乎只能首先将`=INDEX(Data,Elements)`的结果返回到网格中。这很繁琐。但几乎每个Excel专业人士都会告诉您,没有解决方法...那就是这样,您别无选择。
Buuuuuuuut,他们错了。在文章
http://excelxor.com/2014/09/05/index-returning-an-array-of-values/中,神秘的公式超级英雄XOR概述了两种相当简单的方法来“解除”索引,以便您可以直接在其他公式中使用其结果;其中一种方法如上面的A18所示。事实证明,如果您稍微修改INDEX函数,通过添加额外的位来包含那些Elements参数,INDEX就会获得成功。你需要做的就是像我下面所做的那样将那些Elements参数包含起来:
N(IF({1},Elements))
有了这个想法,你最初不正确的公式:
=SUM(INDEX(Data,Elements))
…变成了这个复杂但举止优雅的宝贝:
=SUM(INDEX(Data, N(IF({1},Elements))))
=INDEX(A:A,{1,3})
并返回{"Apple","Orange"}
,这是不可能的。是的,你可以使用INDEX来设置范围的开始和结束,我经常在回答问题时使用它。但是,这不是你所要求的。这就是为什么我试图从你那里获取更多信息的原因。 - Scott Craner