2011年7月22日星期五

Excel条件求和公式

N年前曾经在微软中文Office新闻组上面,帮助mjzn同学解决过这个问题,当时仿佛是用了某种技巧,但是微软新闻组已经被停止服务了,以前的帖子也没法查询,所以这次她重新提出这个问题时,只能想另外的辙。

她的要求是判断A列中的数值,如果相同则对B列中的数字求和,求和的结果显示在C列,并且是A列第一次出现某种条件的位置,其余位置不再显示。

条件求和的公式比较简单,使用SUMIF就行,一开始想到的办法是采用VBA做一个加载宏,从上往下判断A列,看第一次出现在什么地方。后来想想也真的很麻烦,还不见得奏效,据她讲,可能有8W多行的数据,VBA就不是一个很理想的方法了。微软对内置函数做了优化,至于VBA就只管提供哪些接口,效率就靠写代码的人来做了 :)。

晚上洗澡时,当凉水冲在头上的时候,突然有个想法,就是增加一个辅助列,把所有的和都显示出来,然后在旁边的列中用公式判断辅助列的特征,当当前行跟上一行的值相同时,就显示为“”,否则就是新出现的条件,显示真正的和。注意前面用的词是新出现,当数据没有按A列条件排序时,有可能出现重复,只有当数据按A列排序后,对辅助列的判断才可能不出现重复。

<
第一行必须存在,并且不能是数据行,可以是空白行,也可以是标题行





10116 754 754 
1015 754 

10132 754 

10135 754 

1016 754 

1017 754 

101590 754 

10117 754 

1019 754 

10132 754 

1013 754 

1012 754 

1010 754 

010228 1402 1402 
01026 1402 

010211 1402 




关键公式为: =IF(SUMIF(A:A,A3,B:B)=OFFSET(C3,-1,0),"",SUMIF(A:A,A3,B:B))



























































































没有评论:

发表评论