Excel的INDEX函数可以返回数组吗?
如果范围A1:A4
的数据如下所示:
Apple Banana Orange Strawberry
然后, INDEX
可以用来单独返回该列表中的任何值,例如
= INDEX(A1:A4,3)
会返回Orange
。
是否有类似的Excelfunction或function的组合,可以有效地让你做这样的事情:
= INDEX(A1:A4,{2;3})
哪个会返回一个数组{Banana;Orange}
?
这是可能的(最好没有VBA),如果是这样,如何? 即使使用辅助单元,我也很难搞清楚如何完成这个任务。
如果数据是数字(使用MMULT
),我可以找出一个有点复杂的解决scheme,但数据是文本的事实使我绊倒了,因为MMULT
不适用于文本。
OFFSET可能是你想要的function。
=OFFSET(A1:A4,1,,2)
但是要回答你的问题,INDEX确实可以用来返回一个数组。 或者说,两个INDEX函数之间有一个冒号:
=INDEX(A1:A4,2):INDEX(A1:A4,3)
这是因为INDEX实际上返回一个单元格引用或一个数字,而Excel根据你所要求的上下文来确定你想要的是哪一个。 如果你在两个INDEX函数中间放一个冒号,Excel会说“嘿,冒号……通常在这些冒号的每一边都有一个单元格引用”,所以就把INDEX解释为这个。 你可以在http://blog.excelhero.com/2011/03/21/the_imposing_index/阅读更多
我其实更喜欢INDEX OFFSET,因为OFFSET是不稳定的,这意味着它不断地重新计算一个帽子的下落,然后迫使下游任何公式做同样的事情。 欲了解更多信息,请阅读我的posthttps://chandoo.org/wp/2014/03/03/handle-volatile-functions-like-they-are-dynamite/
你实际上可以只使用一个 INDEX并返回一个数组,但是它很复杂,需要一些叫做解引用的东西。 以下是我正在撰写的一本书的一些内容:
此屏幕截图中的工作表有一个名为“数据”的命名范围,分配给顶部的范围A2:E2。 该范围包含数字10,20,30,40和50.此外还有一个名为范围的元素,分配给范围A5:B5。 该元素范围告诉A8:B8中的公式从数据范围中显示这五个数字中的哪一个。
如果你看看A8:B8中的公式,你会发现它是一个数组input的INDEX函数:{= INDEX(Data,Elements)}。 这个公式表示:“根据用户在元素范围内select的元素,转到数据范围并从中获取元素”。在这种特殊情况下,用户请求了第五项和第二项。 果然,这就是INDEX提取到单元格A8:B8:相应的值50和20。
但是看一下如果你把这个完美的INDEX函数放在它的周围会发生什么情况,如A11所示。 你得到一个不正确的结果:50 + 20不等于50. 20,Excel发生了什么?
出于某种原因,虽然=INDEX(Data,Elements)
将非常高兴地从不同的地方获取不同的元素,然后将这些数字分别返回到一个范围,但是如果您要求将这些数字赋予另一个函数,则不太合适。 事实上,它只是把第一个元素传递给函数,所以很不情愿。
因此,如果你想对它做其他的事情,你似乎只好把= INDEX(数据,元素)函数的结果返回给网格。 乏味。 但几乎每个Excel专业人员都会告诉你,没有解决方法…就是这样,你别无select。
Buuuuuuuut,他们错了。 在http://excelxor.com/2014/09/05/index-returning-an-array-of-values/ ,神秘的公式超级英雄XOR概述了两个相当简单的方法来“去引用”INDEX,以便你可以然后直接在其他公式中使用其结果; 其中一种方法如上面的A18所示。 事实certificate,如果通过添加一个额外的位来修改INDEX函数来包装这个Elements参数,INDEX就会popup一个球。 所有你需要做的就是包装这个Elements的参数,正如我在下面所做的那样:
N(IF({1},元素))
考虑到这一点,你原来的行为不合适的公式:
=SUM(INDEX(Data,Elements))
变成这个复杂而又礼貌的亲爱的:
=SUM(INDEX(Data, N(IF({1},Elements))))
没有数组公式就可以得到这种types的行为。 在说D1
=IFERROR(INDEX($A$1:$A$4,CHOOSE(ROWS($1:1),2,3)),"")
并抄下来。 注意2,3被埋在CHOOSE()
函数中。
你可以用任何一组索引replace2,3 。
正确
更新3
你应该使用数组公式:
For = INDEX(A1:A4,{2;3})
write = INDEX(A1:A4,ROW($A$2:$A$3))
使用数组公式(1) select要返回结果的单元格范围,垂直(例如B1:B2),然后按(2) F2键 , input上面的公式 ,然后按 (3) 按 Ctrl + Shift + Enter 。
更新
说明:
您可以使用数组公式来控制INDEX
row_num
和column_num
部分,以返回更多特别需要的结果。
有两种方法返回数组公式结果:
-
(一世)
- select您想要显示返回结果的范围。
- 按F2
- 键入您的数组表单公式。
- 然后按Ctrl + Shift + Enter 。
例:
=INDEX($A$1:$A$4,SMALL(IF($B$2=$A$1:$A$4,ROW($A$1:$A$4)-ROW($A$1)+1),ROW($A:$A)))
-
(II)
- 在要显示返回结果的第一个单元格中input数组forms公式(然后按Ctrl + Shift + Enter ),然后扩展公式。
例:
=INDEX($A$1:$A$4,SMALL(IF($B$2=$A$1:$A$4,ROW($A$1:$A$4)-ROW($A$1)+1),ROW(A1)))
结论
INDEX
公式以数组forms工作。
您需要在数组中inputrow_num
或column_num
。 为此使用合适的数组公式: IF
, SMALL
, CHOOSE
。 请注意, MATCH
不是数组forms公式。
临时示例文件(30天): book.xlsx