用SUMIF对超15位的代码进行条件求和,出错了,原因是....
用SUMIF对超15位的代码进行条件求和,出错了,原因是....
一、问题
有读者朋友问:
用SUMIF进行条件求和时,如果统计的条件是超15位的代码,就会出错,比如下图要统计D2单元格身份证号在A列出现的个数、对应B列的金额之和,

E9单元格公式为:
=COUNTIF(A2:A14,D2)
E10单元格公式为:
=SUMIF(A2:A14,D2,B2:B14)
公式并没有错,但计算结果却是错的!这是什么原因?应该用什么公式?
二、原因
要弄清这个原因,首先要从Excel的最大数字位数讲起,在Excel中,数字的最大位数15位,超过15位的数字,会自动将后面的位数变为0,这一点,我们在输入身份证号时,应该遇到过,每次输入18位身份证号,后面三位会自动变为0。解决方法时将单元格设置为文本格式再输入,或者在身份证号前加英文的'符号。
本文中的问题也是这个原因。可能大家会说,A列不是已经将其设为文本格式了吗?为什么还是会将其作为数字对等呢?这应该是与Excel的特点有关,Excel并不象Power Query对数字类型有严格的要求一样,它会根据情况自动转换数据类型,比如下图,

A1、A2是文本,我们在A3设置公式
=A1+A2
那么公式就会出错,因为文本是无法相加的。
但是,
B1和B2同样是文本(文本型的数字),B3单元格的公式还是
=B2+B3,此公式却不会出错,Excel会自动将B1、B2自动转换为数字类型,然后相加。
因而,当遇到文本格式的身份证或编码时,Excel会自做聪明的将其转换为数字,因而数字15位以后的自动变为0,因而用COUNTIF或SUMIF统计个数或求和,其结果就会出错。
三、怎么办
解决方法:
1、在条件中后加通配符
添加通配符后,Excel就会将其视为文本
=COUNTIF(A2:A14,D2&"*")
=SUMIF(A2:A14,D2&"*",B2:B14)
2、使用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)
用SUMIF对超15位的代码进行条件求和,出错了,原因是....的更多相关文章
- 从word得到表格数据插入数据库(6位行业代码)
复制表格到excel 点击表格左上角选中全部表格,然后crtl+c,再贴到excel中 可以发现,大类代码,单元格往下走,碰到下一个有值的之前,都是上一个的范围 填充空白单元格 1.选中前四列,然后c ...
- PHP实现15位身份证号转18位
PHP实现15位身份证号转18位 参考博客: 作者:selfimpr626 来源:CSDN (根据身份证号计算年龄,15位身份证号码转18位) 原文:https://blog.csdn.net/wei ...
- Apache 软件基金会顶级项目 Pulsar 达成新里程碑:全球贡献者超 300 位!
各位 Pulsar 社区小伙伴们: 今天我们高兴地宣布Pulsar 达成新里程碑,全球贡献者超 300 位! 距离 Pulsar 实现 200 位贡献者里程碑,仅仅间隔 8 个月! 作为 Apache ...
- 手淘架构组最新实践 | iOS基于静态库插桩的⼆进制重排启动优化 抖音研发实践:基于二进制文件重排的解决方案 APP启动速度提升超15% 编译期插桩
抖音研发实践:基于二进制文件重排的解决方案 APP启动速度提升超15% 原创 Leo 字节跳动技术团队 2019-08-09 https://mp.weixin.qq.com/s/Drmmx5JtjG ...
- java 实现从15位~18位的身份证号码转换,校验中国大陆公民身份证、香港居民身份证、澳门身份证和台湾身份证。
package xidian.sl.netcredit.util; /** * Copyright (C) 2009-2010 Yichuan, Fuchun All rights reserved. ...
- 身份证号码15位转18位 C#实现
[身份证最后一位神秘X的由来]身份证中的“冷知识”1999年的今天,<国务院关于实行公民身份号码制度的决定>被发布,当年10月1日实施.为什么有的有X?这位数是根据前17位计算出的校验码. ...
- [Effective JavaScript 笔记] 第7条:视字符串为16位的代码单元序列
Unicode编码,基础:它为世界上所有的文字系统的每个字符单位分配一个唯一的整数,该整数介于0~1114111之间,在Unicode术语中称为代码点(code point). 和其它字符编码几乎没有 ...
- java中身份证号15位转18位
/** * 将15位转换为18位 * @param idCode 15位身份证号 * @return String 18位身份证号 */ public String toEighteen(String ...
- 超详细的Xcode代码格式化教程,可自定义样式。
超详细的Xcode代码格式化教程,可自定义样式. 为什么要格式化代码 当团队内有多人开发的时候,每个人写的代码格式都有自己的喜好,也可能会忙着写代码而忽略了格式的问题.在之前,我们可能会写完代码后,再 ...
随机推荐
- JS_理解函数参数按值传递
本文是我基于红宝书<Javascript高级程序设计>中的第四章,4.1.3传递参数小节P70,进一步理解javaSript中函数的参数,当传递的参数是对象时的传递方式. (结合资料的个人 ...
- Aizu2249 Road Construction(dijkstra优化+思路 好题)
https://vjudge.net/problem/Aizu-2249 感觉这题和2017女生赛的Deleting Edge思路很像,都是先找最短路,然后替换边的. 但是这题用最朴素的dijkstr ...
- Codeforces899D Shovel Sale(思路)
http://codeforces.com/problemset/problem/899/D 还是得tag一下,以下代码只有G++ 14 6.4.0能过,其他都过不了不知为什么? 思路:先求出最多的9 ...
- Docker卸载高版本重装低版本后启动提示:driver not supported
解决方法: mv /var/lib/docker /var/lib/docker.old 其实就是docker镜像文件夹目录作怪,新版本的目录无法与旧版本目录相兼容. 不过建议降级的用户这样操作: y ...
- Jetpack 架构组件 LiveData ViewModel MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 微信支付 python版
需求: 微信打开商品列表页面-> 点击商品后直接显示付款页面-> 点击付款调用微信支付 说明 微信支付需要你申请了公众号(appid, key - 用于签名), 商户号(mch_id, A ...
- [转]恕我直言,在座的各位根本不会写 Java!
导语 自 2013 年毕业后,今年已经是我工作的第 4 个年头了,总在做 Java 相关的工作,终于有时间坐下来,写一篇关于 Java 写法的一篇文章,来探讨一下如果你真的是一个 Java 程序员,那 ...
- Jenkins安装卸载
下载安装去Jenkins官网下载Jenkins,Centos的话会下载到.rpm安装文件 安装.rpm文件使用命令rpm -ivh **.rpm 安装完成之后使用命令rpm -qc jenkins查看 ...
- BAT 删除隐藏文件
删除文件 del命令参数说明/F 强制删除文件./S 从所有子目录删除指定文件./Q 安静模式.删除全局通配符时,不要求确认./A 根据属性选择要删除的文件. 删除指 ...
- 通过配置JVM参数解决生成日志存在乱码问题
项目上生产环境时出现一个问题,生成的日志文件存在乱码,服务器编码为 LANG=zh_US.UTF-8,按理说中文不会存在乱码,这里存在一个问题,就是在SIT等其他环境我们使用的连接工具为Xshell, ...