我试图获取仅符合特定条件的值的数组。
我有一个数组,其中这些条件的满足情况总结在每个条目的 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 设置更有效率,原因(如果你感兴趣)解释如下:
问候