用SUMIF对超15位的代码进行条件求和,出错了,原因是....

2017-10-29 23:01

一、问题

有读者朋友问:

用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位的代码进行条件求和,出错了,原因是....的更多相关文章

  1. 从word得到表格数据插入数据库(6位行业代码)

    复制表格到excel 点击表格左上角选中全部表格,然后crtl+c,再贴到excel中 可以发现,大类代码,单元格往下走,碰到下一个有值的之前,都是上一个的范围 填充空白单元格 1.选中前四列,然后c ...

  2. PHP实现15位身份证号转18位

    PHP实现15位身份证号转18位 参考博客: 作者:selfimpr626 来源:CSDN (根据身份证号计算年龄,15位身份证号码转18位) 原文:https://blog.csdn.net/wei ...

  3. Apache 软件基金会顶级项目 Pulsar 达成新里程碑:全球贡献者超 300 位!

    各位 Pulsar 社区小伙伴们: 今天我们高兴地宣布Pulsar 达成新里程碑,全球贡献者超 300 位! 距离 Pulsar 实现 200 位贡献者里程碑,仅仅间隔 8 个月! 作为 Apache ...

  4. 手淘架构组最新实践 | iOS基于静态库插桩的⼆进制重排启动优化 抖音研发实践:基于二进制文件重排的解决方案 APP启动速度提升超15% 编译期插桩

    抖音研发实践:基于二进制文件重排的解决方案 APP启动速度提升超15% 原创 Leo 字节跳动技术团队 2019-08-09 https://mp.weixin.qq.com/s/Drmmx5JtjG ...

  5. java 实现从15位~18位的身份证号码转换,校验中国大陆公民身份证、香港居民身份证、澳门身份证和台湾身份证。

    package xidian.sl.netcredit.util; /** * Copyright (C) 2009-2010 Yichuan, Fuchun All rights reserved. ...

  6. 身份证号码15位转18位 C#实现

    [身份证最后一位神秘X的由来]身份证中的“冷知识”1999年的今天,<国务院关于实行公民身份号码制度的决定>被发布,当年10月1日实施.为什么有的有X?这位数是根据前17位计算出的校验码. ...

  7. [Effective JavaScript 笔记] 第7条:视字符串为16位的代码单元序列

    Unicode编码,基础:它为世界上所有的文字系统的每个字符单位分配一个唯一的整数,该整数介于0~1114111之间,在Unicode术语中称为代码点(code point). 和其它字符编码几乎没有 ...

  8. java中身份证号15位转18位

    /** * 将15位转换为18位 * @param idCode 15位身份证号 * @return String 18位身份证号 */ public String toEighteen(String ...

  9. 超详细的Xcode代码格式化教程,可自定义样式。

    超详细的Xcode代码格式化教程,可自定义样式. 为什么要格式化代码 当团队内有多人开发的时候,每个人写的代码格式都有自己的喜好,也可能会忙着写代码而忽略了格式的问题.在之前,我们可能会写完代码后,再 ...

随机推荐

  1. openstack 之~horizon部署

    第一:部署horizon环境: 安装部署memcache 安装软件包 yum install memcached python-memcached 启动memcache并且设置开机自启动 system ...

  2. [原创]Studio 3T mogodb数据库工具使用介绍

    [原创]Studio 3T  mogodb数据库工具使用介绍 1 Studio 3T 简介 Studio 3T是一款功能强大的mangodb工具,主要为用户提供网页设计.代码输入.编程管理.数据库编辑 ...

  3. 使用 vscode + chrome debuger断点调试 Vue 程序

    总体参考:https://cn.vuejs.org/v2/cookbook/debugging-in-vscode.html 注意点: 1.修改 source-map 2.设置 webRoot 的路径 ...

  4. Android的Databinding-RecyleView绑定

    public class UserAdapter extends RecyclerView.Adapter<UserAdapter.UserHolder> { private static ...

  5. C++ WINDOWS下 wchar_t *和char * 相互转化总结篇

    说道wchar_t和char两个类型大家都不会陌生 wchar_t:在windows下是Unicode 16编码,也就是俗称宽字节 char:当然就是指一个字节,在windows下面默认是gbk编码的 ...

  6. 国密SM3算法在linux和windows平台结果不一致问题

    什么是sm3,是一种类似于sha256的哈希算法,是咱们国家的哈希标准算法: 最近在使用sm3算法时,同样的一份数据,调用同样的sm3接口,发现得到的结果是不一样的: 那么在应用过的过程中,如果同样的 ...

  7. 【打印】windows打印控件,Lodop.js介绍

    1.Lodop.js这插件很强大,目前仅支持windows系统 2.使用原生javascript编写 3.lodop支持客户端安装,c-lodop支持服务器端安装 4.无论客户端还是服务器端,都必须是 ...

  8. 关于Jenkins日志爆满的解决方法

    最近发现公司的jenkins因为日志量太大把磁盘占满,查看日志文件“/var/log/jenkins/jenkins.log”几分钟产生了几十G的日志 而且日志还在一直增长,内容如下 120: 313 ...

  9. DES加密解密算法C语言代码实现

    代码: #include<stdio.h> #include<string.h> #include<stdlib.h> /*-------------------- ...

  10. int转换char的正确姿势

    一:背景 在一个项目中,我需要修改一个全部由数字(0~9)组成的字符串的特定位置的特定数字,我采用的方式是先将字符串转换成字符数组,然后利用数组的位置来修改对应位置的值.代码开发完成之后,发现有乱码出 ...