数组公式返回基于多个条件的列表
我有一个电子表格,如下图所示。 我有一些公式在这张纸上执行计数,并将此数据与另一个数据源进行比较。 其中一个例子是:
=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,确定。