Arrays 如果两个数组相减的结果超过Excel中的某个值,则计数

Arrays 如果两个数组相减的结果超过Excel中的某个值,则计数,arrays,excel,excel-formula,countif,Arrays,Excel,Excel Formula,Countif,我不熟悉数组公式,在以下情况下遇到问题: 我有以下矩阵: F G H I J ... R S T U V 1 0 0 1 1 0 1 1 1 2 3 1 2 2 0 2 3 1 2 0 1 0 0 2 1 0 0 1 0 0 3 0 0 我的目标是统计F:J列

我不熟悉数组公式,在以下情况下遇到问题:

我有以下矩阵:

F   G   H   I   J  ...  R   S   T   U   V
1   0   0   1   1                       
    0   1       1       1   2   3   1   2
2   0   2   3   1       2   0   1   0   0
2   1   0   0   1       0   0   3   0   0
我的目标是统计F:J列和R:V列之和之间的差值大于阈值的行数。关键的是,只应包括具有完整数据的行:应忽略第1行(其中只有F1:J1列的值)和第2行(其中只有F2:J2列的一些值)

如果阈值=2.5,则解决方案为1。也就是说,第3行是唯一具有完整数据的行,其中F3:J3(8)和R3:V3(3)之和之间的差值大于2.5(例如,5>2.5)

我试图根据和的教导,以相当可悲的方式总结出以下公式:

但它似乎总是产生一个值1,即使我编辑了矩阵,使得F4:J4和R4:v4之和之间的差值也超过了2.5。遗憾的是,我很难理解为什么会这样,我希望您能给我一些指导。

试试以下方法:

=SUMPRODUCT((MMULT(F1:J4-R1:V4),-(ROW(INDIRECT)(&COLUMNS(F1:J4)))>2.5)*(MMULT((LEN(F1:J4)>0)+(LEN(LEN(R1:V4)>0),-(ROW(INDIRECT)(&COLUMNS(F1:J4))>0))=(COLUMNS(F1:J4)+COLUMNS(R1:V4))

试试这个:

=SUMPRODUCT((MMULT(F1:J4-R1:V4),-(ROW(INDIRECT)(&COLUMNS(F1:J4)))>2.5)*(MMULT((LEN(F1:J4)>0)+(LEN(LEN(R1:V4)>0),-(ROW(INDIRECT)(&COLUMNS(F1:J4))>0))=(COLUMNS(F1:J4)+COLUMNS(R1:V4))

也许,比如X1(假设您已经标记了列):

在Y1中,无论您选择的截止点是什么(例如
2.5
),在Y2中:

=((COUNTBLANK(F2:J2)+COUNTBLANK(R2:V2)=0)*SUM(F2:J2)-SUM(R2:V2))>Y$1
复制下来以适应。

可能,比如X1(假设您已经标记了列):

在Y1中,无论您选择的截止点是什么(例如
2.5
),在Y2中:

=((COUNTBLANK(F2:J2)+COUNTBLANK(R2:V2)=0)*SUM(F2:J2)-SUM(R2:V2))>Y$1

复制下来以适应。

我想这样可以,用倍数(*)替换AND:


它可以简化一点,但时间会短一点。

我想这样就可以了,用倍数(*)代替AND:


它可以简化一点,但时间会短一点。

作为一个单元格中的数组公式,没有易失性函数:

=SUM((MMULT(--(LEN(F2:J5)*LEN(R2:V5)>0),--TRANSPOSE(COLUMN(F2:J2)>0))=5)*(MMULT(F2:J5-R2:V5,TRANSPOSE(--(COLUMN(F2:J2)>0)))>2.5))

应该做到这一点:D作为一个单元格中的数组公式,而不使用易失性函数:

=SUM((MMULT(--(LEN(F2:J5)*LEN(R2:V5)>0),--TRANSPOSE(COLUMN(F2:J2)>0))=5)*(MMULT(F2:J5-R2:V5,TRANSPOSE(--(COLUMN(F2:J2)>0)))>2.5))

应该这样做:D

只是另一个选项

=IF(NOT(或(IFERROR(匹配(TRUE,ISBLANK(F1:J1),0),FALSE)),IFERROR(匹配(TRUE,ISBLANK(R1:V1),0,FALSE))),小计(9,F1:J1)-小计(9,R1:V1),“缺失值”)

我的方法与您在@TomSharp中尝试采用的方法略有不同,因为我正在验证单元格是否有数据(不是空白),然后执行计算,否则返回错误消息。这仍然是一个数组函数调用,因此在输入公式时,请按ctrl+shft+enter

开头的条件部分检查每个区域的单元格是否为空:
如果匹配(true=isblank(cell))
表示单元格为空(不正确),如果不匹配。。。如果没有空白单元格,Match将返回一个#NA“错误”(良好)。False是good=发现错误?编号(即无空白单元格))

然后阈值条件变为:

=COUNTIF(X1:X4,“>”&Threshold)注意:此处没有数组公式


我给阈值(Cell
W6
)指定了一个可读性范围

只是另一种选择

=IF(NOT(或(IFERROR(匹配(TRUE,ISBLANK(F1:J1),0),FALSE)),IFERROR(匹配(TRUE,ISBLANK(R1:V1),0,FALSE))),小计(9,F1:J1)-小计(9,R1:V1),“缺失值”)

我的方法与您在@TomSharp中尝试采用的方法略有不同,因为我正在验证单元格是否有数据(不是空白),然后执行计算,否则返回错误消息。这仍然是一个数组函数调用,因此在输入公式时,请按ctrl+shft+enter

开头的条件部分检查每个区域的单元格是否为空:
如果匹配(true=isblank(cell))
表示单元格为空(不正确),如果不匹配。。。如果没有空白单元格,Match将返回一个#NA“错误”(良好)。False是good=发现错误?编号(即无空白单元格))

然后阈值条件变为:

=COUNTIF(X1:X4,“>”&Threshold)注意:此处没有数组公式


我给阈值(Cell
W6
)指定了一个可读性范围

简短的回答可能是那样,通常在数组公式中不起作用,但我们会看一看。简短的回答可能是那样,通常在数组公式中不起作用,但我们会看一看。@pnuts谢谢您的仔细检查@pnuts谢谢您的再次检查!这实际上是最好的答案-我没有走上mmult的道路,因为这是OP第一次体验数组公式,我认为偏移方式更容易理解。像@pnuts一样,在测试时可能会出错,因为F2看起来像是空白的,但包含一些文本。@TomSharpe我正在努力找到“最佳答案”。pnut的回答是最简短的,jblood94的回答是最清晰的,你的回答(对我来说)是最容易理解的。您还给出了我的原始代码可能无法工作的原因。但考虑到你的评论,我觉得只有未来的观众才能把它授予德克·雷切尔。但看起来我们都学到了一些东西。谢谢allIn在我的几次编辑中,我有一些非常相似的东西,但我决定使用
行(间接(“1:”&COLUMNS(F1:J4))
来避免数组公式(如果不将它作为数组公式输入,我永远无法让
SUMPRODUCT
正确计算
转置)。@jblood94检查您的编辑,你说得对:看起来很相似。我很困惑。对一个问题给出不同的答案或在一个答案中有多个解决方案是绝对有效的。这本应该是正确的
=SUM((MMULT(--(LEN(F2:J5)*LEN(R2:V5)>0),--TRANSPOSE(COLUMN(F2:J2)>0))=5)*(MMULT(F2:J5-R2:V5,TRANSPOSE(--(COLUMN(F2:J2)>0)))>2.5))