请问我想将一表格内满足两个字段条件的数量合计,以前有用过不过已忘记了,请有知道的朋友赐教,谢谢!
比如
字段A 字段B 字段C
A01 T131 100
A01 T132 500
A02 T131 620
A01 T131 360
我是想在另一个地方做个汇总表格如出现
A01 T131 460
谢谢!
------解决方案--------------------------------------------------------
用SUMPRODUCT函数最实用,可以实现多条件求和,计数等.
=SUMPRODUCT((A:A=A01)*(B:B=T131)*(C:C))
A 'B列是条件,还可以继续增加的,如果为真,结果为1,假为0,这样通过相乘实现条件判断,然后对符合条件的C列进行合计.
给分,不明的PM偶.
------解决方案--------------------------------------------------------
序号 产品编号 生产日期 产品单价 产品数量
1 AA 2000-6-15 1 100多条件合计是个很“古老”的题目。
2 AA 2000-6-20 1 125如左侧的数据表。要求出产品 "BB "的8月份总数量。
3 BB 2000-6-30 2 150
4 BB 2000-7-10 2 175常用的解法是SUM数组:{=SUM(条件1*条件2*数据)} 【见C22公式】
5 CC 2000-7-15 3 200后来又有了一种不需要按三键的公式:
6 CC 2000-7-20 3 225 =SUMPRODUCT(条件1*条件2*数据) 【见C23公式】
7 AA 2000-7-30 1 250 这两种做法从本质上来说,没有根本的差别。都是数组相乘并求和。
8 AA 2000-8-10 1 275
9 BB 2000-8-15 2 300 最近,gouweicao78版主提出了一个内存数组的做法:
10 BB 2000-8-20 2 325 利用MMULT矩阵函数,采用矩阵乘法,得到条件求和的内存数组。
11 CC 2000-8-30 3 350 【见C24公式】
12 CC 2000-10-10 3 375
13 DD 2000-10-15 4 400 关于MMULT函数,参见山菊花版主的: 《初识MMULT》
14 DD 2000-10-30 4 425
注:例子引自Erase2000版主《骗你爱上数组公式》
条件 结果
产品 月份 数量
BB 8 625 {=SUM((B3:B16=A22)*(MONTH(C3:C16)=B22)*E3:E16)}
625 =SUMPRODUCT((B3:B16=A22)*(MONTH(C3:C16)=B22)*E3:E16)
625 {=MMULT(--(A22=TRANSPOSE(B3:B16)),(MONTH(C3:C16)=B22)*E3:E16)}
在前面两个公式中,条件1、条件2、数据三者的顺序没有限制。但MMULT函数却不同。
条件1、条件2和数据三者哪个作为MMULT的第一或第二参数是有限制的。
本题的结果是一行一列的数组。根据MMULT的特性,MMULT的第一参数应为一行N列,而第二参数应为N行一列,并且均为数值
C24公式中,A24=TRANSPOSE(B6:B19)是一个一行14列的数组,前面加上--()就使它变成了数值:{0,0,1,1,0,0,0,0,1,1,0,0,0,0}
(MONTH(C6:C19)=B24)*E6:E19则是一个14行一列的数组:{0;0;0;0;0;0;0;275;300;325;350;0;0;0}
两个数组做矩阵相乘后,就得到了最终的结果:625(一行一列数组)
明白了上面的原理,我们就知道:只要注意到MMULT的特性,条件和数据的位置也是可以灵活变化的。
比如,可以把公式写成:MMULT(条件2,条件1*数据)
即:{=MMULT(--(B22=TRANSPOSE(MONTH(C3:C16))),(A22=B3:B16)*E3:E16))
也可以写成:MMULT(条件2*条件1,数据)
即:{=MMULT((A22=TRANSPOSE(B3:B16))*(B22=TRANSPOSE(MONTH(C3:C16))),E3:E16)}
甚至还可以写成:MMULT(条件1*条件2*数据,标准矩阵)
即:{=MMULT((A22=TRANSPOSE(B3:B16))*(B22=TRANSPOSE(MONTH(C3:C16)))*TRANSPOSE(E3:E16),ROW(B3:B16)^0)}