我的电子表格如下图所示。我有一些公式在这张表上执行计数,并将此数据与另一个数据源进行比较。其中一个例子是:
=Countifs(A2:A10676,"0",C2:C10676,"OPEN",D2:D10676,"Current")
我如何返回与计数相关的贷款号码列表?例如,上面的计数返回3038.我尝试了下面的公式。我选择了C2:C3039,键入公式并点击 Shift + Ctrl + Enter :
=If(And(A2:A10676="0",C2:C10676="OPEN",D2:D10676="Current"),B2:B10676,"")
我的想法是,这会评估每一行的逻辑,并在B列中构建一个值数组。当我输入它时,数组中的每个单元格都是空白的。
有人可以解释一下如何使用基于多个条件的值返回数组吗?
答案 0 :(得分:3)
我发现你的公式存在两个问题
=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但这里需要匹配数据类型 - 如果数据是文本格式的,则仅使用引号 - I假设情况并非如此
第二个问题是,对于这两个问题,结果数组仍然有10675个值,因为当不符合条件时,它仍然包含行的所有空白。
要获得仅包含3038个值的数组,您可以使用此公式数组输入正确大小的范围:
=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
公式
请注意,这仅适用于返回工作表范围内的数组 - 它不能用于返回要在其他函数中使用的数组
答案 1 :(得分:2)
这是一种使用“辅助列”而不是数组公式的方法:
在 E2 中输入公式:
=IF(AND(A2=0,C2="OPEN",D2="Current"),1+MAX($E$1:E1),"")
并向下复制(这标志符合条件的多行)
在 F2 中输入:
=IFERROR(INDEX(B$2:B$24,MATCH(ROWS($1:1),$E$2:$E$24,0)),"")
并复制下来。
答案 2 :(得分:1)
您可以设置数据过滤器:
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
当然,您也可以手动打开过滤器。
答案 3 :(得分:1)
在顶部插入四个空白行,将A5:D6复制到A1并删除B2。数据>排序&过滤,高级,复制到其他位置,列表范围:A5:D10680
,条件范围:A1:D2
,复制到:F1:I1
,仅检查唯一记录,确定。