数组公式返回基于多个条件的列表

我有一个电子表格,如下图所示。 我有一些公式在这张纸上执行计数,并将此数据与另一个数据源进行比较。 其中一个例子是:

=Countifs(A2:A10676,"0",C2:C10676,"OPEN",D2:D10676,"Current") 

我将如何返回与计数相关的贷款号码列表? 例如,上面的计数返回3038.我尝试了下面的公式。 我select了C2:C3039,input公式并按Shift + Ctrl + Enter

 =If(And(A2:A10676="0",C2:C10676="OPEN",D2:D10676="Current"),B2:B10676,"") 

我的想法是,这将评估每行的逻辑,并在B列中build立一个值的数组。当我input这个时,数组中的每个单元格是空的。

有人可以请解释如何返回一个基于多个标准的值的数组?

在这里输入图像说明

我看到你的公式有两个问题

=If(And(A2:A10676="0",C2:C10676="OPEN",D2:D10676="Current"),B2:B10676,"")

首先,你不能用AND来返回一个数组 – AND(就像OR)返回一个结果( TRUE或者FALSE ),所以你需要嵌套的IF或者用*来模拟AND,也就是说

=IF(A2:A10676=0,IF(C2:C10676="OPEN",IF(D2:D10676="Current",B2:B10676,"")))

….要么…..

=IF((A2:A10676=0)*(C2:C10676="OPEN")*(D2:D10676="Current"),B2:B10676,"")

注意:对于第一个条件,我使用了0而没有引号 – 对于COUNTIFS您可以使用“0”或0,但是在这里需要匹配数据types – 如果数据是文本格式的,只能使用引号 – 我假设不是案子

第二个问题是,对于这两个结果数组仍然有10675个值,因为它仍然包括所有的条件未满足时的行空白。

要获得一个只有3038个值的数组,你可以使用这个公式数组input到正确的大小范围内:

=INDEX(B2:B10676,SMALL(IF(A2:A10676=0,IF(C2:C10676="OPEN",IF(D2:D10676="Current",ROW(B2:B10676)-ROW(B2)+1)),ROW(INDIRECT("1:"&E2))))

E2包含您的COUNTIFS公式

请注意,这只适用于在工作表范围内返回一个数组 – 它不会返回要在另一个函数中使用的数组

这是一个使用“帮助列”而不是数组公式的方法:

在这里输入图像说明

E2中input公式:

 =IF(AND(A2=0,C2="OPEN",D2="Current"),1+MAX($E$1:E1),"") 

并复制下来(这标志着满足条件的多行)

F2中input:

 =IFERROR(INDEX(B$2:B$24,MATCH(ROWS($1:1),$E$2:$E$24,0)),"") 

并抄下来。

在这里输入图像说明

你可以设置一个数据filter:

 Dim wrk As Worksheet Set wrk = ActiveSheet If Not wrk.AutoFilterMode Then wrk.range("a1").AutoFilter wrk.range("a1").AutoFilter field:=1, Criteria1:="0" wrk.range("a1").AutoFilter field:=3, Criteria1:="OPEN" wrk.range("a1").AutoFilter field:=4, Criteria1:="Current" Set wrk = Nothing 

当然,您也可以手动打开filter,以满足您的喜好。

在顶部插入四个空白行,将A5:D6复制到A1并删除B2。 DATA> Sort&Filter,Advanced,复制到另一个位置,列表范围: A5:D10680 ,条件范围: A1:D2 ,复制到: F1:I1 ,检查唯一logging,确定。