Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 数组公式:嵌套ifs和同一行计算_Excel_Excel Formula_Excel 2010_Excel 2013_Array Formulas - Fatal编程技术网

Excel 数组公式:嵌套ifs和同一行计算

Excel 数组公式:嵌套ifs和同一行计算,excel,excel-formula,excel-2010,excel-2013,array-formulas,Excel,Excel Formula,Excel 2010,Excel 2013,Array Formulas,有两个输入:A1和B1 在D列中,有许多类型的对象A。 在B列中,有许多类型的对象B 下面是公式的作用: 如果(D2为“A1”,G2为“B1”),则如果(E2大于F2),减去E2和F2(本例中为5-4),否则将F2减去E2(如第12行所示)。 如果没有匹配项,不要做任何事情,只跳过这一行 我想把它作为一个数组公式(Ctrl+Shift+Enter),这样它最终会对所有内容求和 在本例中,输出为-1,因为sum(和(5-4)(2-4)) 到目前为止,我有以下几点: {=SUM(IF((D2:D12

有两个输入:
A1
B1

在D列中,有许多类型的对象A。 在B列中,有许多类型的对象B

下面是公式的作用:
如果(D2为“A1”,G2为“B1”),则如果(E2大于F2),减去E2和F2(本例中为5-4),否则将F2减去E2(如第12行所示)。
如果没有匹配项,不要做任何事情,只跳过这一行

我想把它作为一个数组公式(Ctrl+Shift+Enter),这样它最终会对所有内容求和

在本例中,输出为-1,因为sum(和(5-4)(2-4))

到目前为止,我有以下几点:

{=SUM(IF((D2:D12="A1")+(G2:G12="B1");E2:E12-F2:F12;0))} 

但它不能正常工作,因为我不确定Excel如何读取减法部分。我想能够减去找到组合的行的值。

如果您只需要对所有匹配的列F减去列E,则考虑下面的数组公式:

=SUM((D2:D12=$B$2)*(G2:G12=$B$3)*(E2:E12-F2:F12))
(如有必要,可通过额外检查来更新此项)

这将
SUM
包含与输入匹配的所有减法(E列)-(F列)

以下是分项数字:

D2:D12=$B$2
G2:G12=$B$3
将生成包含1的数组,用于匹配,包含0的数组用于不匹配:

{A1,A2,A3, -,A1, -, -,A4,A5,A1,A1}  {B1, -,B1, -,B4, -, -,B6,B5,B2,B1}
 V           V              V  V     V     V                       V
{1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1 }  {1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1 }
E2:E12-F2:F12
将生成第三个数组,其中包含减去的值:

 {5, 5, 3, 1, 3, 3, 7, 3, 9, 7, 4}
-{4, 3, 4, 5, 6, 5, 9, 6, 7, 8, 2}
={1, 2,-1,-4,-3,-2,-2,-3, 2,-1, 2}
将所有这些值相乘的结果如下:

 {1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1}
x{1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}
x{1, 2,-1,-4,-3,-2,-2,-3, 2,-1, 2}
={1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2}
当然,
SUM
将完成它的工作:

SUM({1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2}) = 3

如果我正确理解了你的要求,那么你的答案是:

=SUM((D2:D12="A1")*(G2:G12="B1")*ABS(E2:E12-F2:F12))
请记住,Excel的
TRUE
与numer 1相同,而
FALSE
为0

因此,如果我的公式中有任何一行的D或G列不匹配,则该行将乘以0

而且你关于E和F列的规则听起来像 从较大的数字中减去较小的数字 这与:

|4-5|=1    
或在Excel公式表示法中:

ABS(4-5)

为什么是
2-4
?“如果(E2大于F2),减去E2和F2(在本例中为5-4),否则将F2减去E2”,但在这种情况下,E(4)大于F(2),所以不做4-2吗?这是正确的。上传时我忘了重新截图。谢谢你注意到输入错误。绝对值不是一个解决方案,因为我需要对负值求和,而不是使它们为正值。尽管如此,还是要感谢您的投入,因为其余的都很好用!非常详细的回答和解释!非常感谢您知道为什么“{=中间值($B$46:$B$1930=$B4)*($D$46:$D$1930-$F$46:$F$1930))}返回0结果,而sum或max工作正常?(中位数实际上不是0)。应该没什么不同吧?@ichimok我不相信
MEDIAN
可以直接获取数组的值。但是您可以使用IF语句接收数组并将其传递给
MEDIAN
例如:
=MEDIAN(IF($B$46:$B$1930=$B4,$D$46:$D$1930-$F$46:$F$1930))