1、问题函数
有读者朋友问:编码
用SUMIF进行条件求和时,若是统计的条件是超15位的代码,就会出错,好比下图要统计D2单元格身份证号在A列出现的个数、对应B列的金额之和,spa
E9单元格公式为:blog
=COUNTIF(A2:A14,D2)it
E10单元格公式为:class
=SUMIF(A2:A14,D2,B2:B14)数据类型
公式并无错,但计算结果倒是错的!这是什么缘由?应该用什么公式?方法
2、缘由im
要弄清这个缘由,首先要从Excel的最大数字位数讲起,在Excel中,数字的最大位数15位,超过15位的数字,会自动将后面的位数变为0,这一点,咱们在输入身份证号时,应该遇到过,每次输入18位身份证号,后面三位会自动变为0。解决方法时将单元格设置为文本格式再输入,或者在身份证号前加英文的'符号。统计
本文中的问题也是这个缘由。可能你们会说,A列不是已经将其设为文本格式了吗?为何仍是会将其做为数字对等呢?这应该是与Excel的特色有关,Excel并不象Power Query对数字类型有严格的要求同样,它会根据状况自动转换数据类型,好比下图,
A一、A2是文本,咱们在A3设置公式
=A1+A2
那么公式就会出错,由于文本是没法相加的。
可是,
B1和B2一样是文本(文本型的数字),B3单元格的公式仍是
=B2+B3,此公式却不会出错,Excel会自动将B一、B2自动转换为数字类型,而后相加。
于是,当遇到文本格式的身份证或编码时,Excel会自作聪明的将其转换为数字,于是数字15位之后的自动变为0,于是用COUNTIF或SUMIF统计个数或求和,其结果就会出错。
3、怎么办
解决方法:
一、在条件中后加通配符
添加通配符后,Excel就会将其视为文本
=COUNTIF(A2:A14,D2&"*")
=SUMIF(A2:A14,D2&"*",B2:B14)
二、使用SUMPRODUCT函数
=SUMPRODUCT((A2:A14=D2)*1)
=SUMPRODUCT((A2:A14=D2)*B2:B14)
提醒:
若是将统计个数的公式写为=SUMPRODUCT(A2:A14=D2),其计算结果会是零,由于公式其实是=SUMPRODUCT({FALSE;FALSE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;FALSE})
若是TRUE和FALSE若是不对其进行运算时,SUMPRODUCT不会将其视同1和0对待的,因此,须要写成=SUMPRODUCT((A2:A14=D2)*1)