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_numcolumn_num部分,以返回更多特别需要的结果。

有两种方法返回数组公式结果:

  • (一世)

    1. select您想要显示返回结果的范围。
    2. F2
    3. 键入您的数组表单公式。
    4. 然后按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)

    1. 在要显示返回结果的第一个单元格中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_numcolumn_num 。 为此使用合适的数组公式: IFSMALLCHOOSE 。 请注意, MATCH不是数组forms公式。

临时示例文件(30天): book.xlsx

片