她的要求是判断A列中的数值,如果相同则对B列中的数字求和,求和的结果显示在C列,并且是A列第一次出现某种条件的位置,其余位置不再显示。
条件求和的公式比较简单,使用SUMIF就行,一开始想到的办法是采用VBA做一个加载宏,从上往下判断A列,看第一次出现在什么地方。后来想想也真的很麻烦,还不见得奏效,据她讲,可能有8W多行的数据,VBA就不是一个很理想的方法了。微软对内置函数做了优化,至于VBA就只管提供哪些接口,效率就靠写代码的人来做了 :)。
晚上洗澡时,当凉水冲在头上的时候,突然有个想法,就是增加一个辅助列,把所有的和都显示出来,然后在旁边的列中用公式判断辅助列的特征,当当前行跟上一行的值相同时,就显示为“”,否则就是新出现的条件,显示真正的和。注意前面用的词是新出现,当数据没有按A列条件排序时,有可能出现重复,只有当数据按A列排序后,对辅助列的判断才可能不出现重复。
<
第一行必须存在,并且不能是数据行,可以是空白行,也可以是标题行 | ||||
101 | 16 | 754 | 754 | |
101 | 5 | 754 | ||
101 | 32 | 754 | ||
101 | 35 | 754 | ||
101 | 6 | 754 | ||
101 | 7 | 754 | ||
101 | 590 | 754 | ||
101 | 17 | 754 | ||
101 | 9 | 754 | ||
101 | 32 | 754 | ||
101 | 3 | 754 | ||
101 | 2 | 754 | ||
101 | 0 | 754 | ||
0102 | 28 | 1402 | 1402 | |
0102 | 6 | 1402 | ||
0102 | 11 | 1402 |
关键公式为: =IF(SUMIF(A:A,A3,B:B)=OFFSET(C3,-1,0),"",SUMIF(A:A,A3,B:B))
没有评论:
发表评论