根据源数组中的列值返回数组

根据源数组中的列值返回数组

我试图获取仅符合特定条件的值的数组。

我有一个数组,其中这些条件的满足情况总结在每个条目的 TRUE/FALSE 列中,因此

INDEX MEETS_CRITERIA
1     TRUE
2     TRUE
3     FALSE
4     FALSE
5     FALSE
6     TRUE
7     TRUE
8     TRUE
9     FALSE
10    FALSE

我希望在单独的工作表中获取“MEETS_CRITERIA”列中为真的所有索引的无间隙列表,如下所示

INDEX
1
2
6
7
8

我正在尝试使用以下数组公式来实现这一点:

{=INDEX(ORIGINAL_ARRAY!$A$2:$A$10, MATCH("TRUE",ORIGINAL_ARRAY!$B$2:$B$10, 0))}

然而这会返回#N/A。

我的公式或方法有什么错误?

答案1

正如 Clif 的观察一样,您的当前公式在任何情况下都只适合提供单一回报,而不是您给出的列表。

为此,您需要(假设您拥有 Excel 2010 或更高版本):

=INDEX(ORIGINAL_ARRAY!$A:$A,AGGREGATE(15,6,ROW(ORIGINAL_ARRAY!$B$2:$B$10)/ORIGINAL_ARRAY!$B$2:$B$10,ROWS($1:1)))

并抄了下来。

至于掩盖错误,假设您给出的示例代表了您的实际设置 - 因为源数据中只有十几行 - 您可以负担得起原本效率低下的 IFERROR 设置,即:

=IFERROR(INDEX(ORIGINAL_ARRAY!$A:$A,AGGREGATE(15,6,ROW(ORIGINAL_ARRAY!$B$2:$B$10)/ORIGINAL_ARRAY!$B$2:$B$10,ROWS($1:1))),"")

如果所讨论的数据范围实际上相当大,那么最好在工作表中的某个地方使用额外的单元格,例如 D1,其中使用单个公式来确定预期的回报数量,即:

=COUNTIF(ORIGINAL_ARRAY!B2:B10,TRUE)

然后可以在主公式本身中引用,即:

=IF(ROWS($1:1)>D$1,"",INDEX(ORIGINAL_ARRAY!$A:$A,AGGREGATE(15,6,ROW(ORIGINAL_ARRAY!$B$2:$B$10)/ORIGINAL_ARRAY!$B$2:$B$10,ROWS($1:1))))

并且将比 IFERROR 设置更有效率,原因(如果你感兴趣)解释如下:

在列表中查找一个值并返回所有对应的多个值

问候

相关内容