INDEX和SMALL只返回一个结果

时间:2015-08-18 21:25:34

标签: excel excel-2007

我有以下Excel编写的公式,我写的有错误。     = IFERROR(INDEX([Testbook2.xlsx] Sheet 1中$ A $ 2:$ B $ 6,体积(IF([Testbook2.xlsx] Sheet 1中$ B $ 2:!$ B $ 6 =" A",ROW( [Testbook2.xlsx] Sheet 1中$ A $ 2:$ A $ 6)-ROW([Testbook2.xlsx] Sheet 1中$ A $ 2)+1),ROW([Testbook2.xlsx] Sheet 1中1:!1)),1) ,"没有活跃的志愿者")

代码应该在列中的另一个工作簿(Testbook2)中查找输入的文本应该是A或I.然后应该返回所有名称,并在它们旁边添加A.但是它只返回名字。

关于为什么会发生这种情况的任何想法?

1 个答案:

答案 0 :(得分:1)

我不太喜欢让公式比他们需要的更复杂。 ROW function的目的是产生一系列连续数字。它用于记录范围内的位置,而不是工作表上的实际行。行引用的位置无关紧要;它不必引用您正在收集数据的工作簿/工作表。

这些,

ROW([Testbook2.xlsx]Sheet1!$A$2:$A$6) - ROW([Testbook2.xlsx]Sheet1!$A$2) + 1
ROW([Testbook2.xlsx]Sheet1!1:1)

......可以缩短为,

ROW($1:$5)
ROW(1:1)

[Testbook2.xlsx] Sheet1中有5个单元格!$ A $ 2:$ A $ 6所以你需要的是1到5之间的数字。ROW(1:1)是一个1,它将成为2然后是等等,因为它被填满了。它提供SMALL function k 参数。它来自哪里并不重要。

一旦我将那些削减到实际需要的东西,很明显你的公式在当前状态下工作。但是,它是数组公式,而不是SQL公式。

=IFERROR(INDEX([Testbook2.xlsx]Sheet1!$A$2:$A$6, SMALL(IF([Testbook2.xlsx]Sheet1!$B$2:$B$6="A", ROW($1:$5)), ROW(1:1))), "No Active Volunteers")

需要使用 Ctrl + Shift + Enter↵来最终确定数组公式。一旦正确进入第一个单元格,就可以像任何其他公式一样向下或向右填充或复制它们。如果没有特殊的CSE终结,您将只获得第一个值,然后是错误。

如果您正在寻找不需要CSE的标准公式,那么AGGREGATE¹ function函数可以提供类似伪数组的处理,而无需使用CSE。

=IFERROR(INDEX([Testbook2.xlsx]Sheet1!$A$2:$A$6, AGGREGATE(15, 6, ROW($1:$5)/([Testbook2.xlsx]Sheet1!$B$2:$B$6="A"), ROW(1:1))),"No Active Volunteers")

¹ Excel 2010引入了AGGREGATE function。早期版本不提供。

对于2010年之前的Excel版本,此标准公式也不需要CSE。

=IFERROR(INDEX([Testbook2.xlsx]Sheet1!$A$2:$A$6, SMALL(INDEX(ROW($1:$5)+([Testbook2.xlsx]Sheet1!$B$2:$B$6<>"A")*1E+99, , ), ROW(1:1))),"No Active Volunteers")

现在您已决定传递实际工作簿名称,工作表名称和要使用的范围,这里是工作公式,

作为数组公式(所有范围的大小相同),

=IFERROR(INDEX('[Volunteer Contact list July 2015.xlsm]Volunteers'!$A$2:$A$65, SMALL(IF('[Volunteer Contact list July 2015.xlsm]Volunteers'!$Q$2:$Q$65="A",ROW($1:$64)),ROW(1:1))),"No Active Volunteers")

作为标准公式(所有范围的大小相同),

=IFERROR(INDEX('[Volunteer Contact list July 2015.xlsm]Volunteers'!$A$2:$A$65, SMALL(INDEX(ROW($1:$64)+('[Volunteer Contact list July 2015.xlsm]Volunteers'!$Q$2:$Q$65<>"A")*1E+99, , ), ROW(1:1))),"No Active Volunteers")

根据公式的类型适当地输入每个单元格。根据需要填写后续记录。