当前位置: 代码迷 >> Office >> EXCEL的一个计算有关问题
  详细解决方案

EXCEL的一个计算有关问题

热度:6277   发布时间:2013-02-26 00:00:00.0
EXCEL的一个计算问题
请问我想将一表格内满足两个字段条件的数量合计,以前有用过不过已忘记了,请有知道的朋友赐教,谢谢!
比如
字段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)}
  相关解决方案