ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > 函数与公式 > 为什么数据有效性限制身份证号不重复输入出错?

为什么数据有效性限制身份证号不重复输入出错?

作者:绿色风 分类: 时间:2022-08-17 浏览:239
楼主
gouweicao78
Q:在A列用数据有效性限制输入的值不得重复,公式为:=(LEN(A1)=18)*COUNTIF(A:A,A1)=1,但是用文本形式数字输入身份证号前15位一样后3位不同时,怎么也被限制不能输入?比如A1、A2分别输入:
'123456789012345678
'123456789012345999

A:这是因为COUNTIF默认将数字都视为数值计算,而数值计算精度为15位数,因此这2个号码都被视为'123456789012345000

【解决方法】:数据有效性公式改用:

  1. =(LEN(A1)=18)*COUNTIF(A:A,A1&"*")=1

为什么数据有效性限制身份证号不重复输入出错?.rar
2楼
無心
草版,公式笔误了
=(LEN(A1)=8)*COUNTIF(A:A,A1&"*")=1

里面应该是=(LEN(A1)=18)*COUNTIF(A:A,A1&"*")=1吧
3楼
蒸蒸日上
这个只能满足18位的身份证号,如果输入15位数的身份证号就会提示错误!
4楼
gouweicao78
如有15位,则COUNTIF与通配符的方法不适用,比如某身份证为15位,与另一个身份证前15位一样,尽管后3位不一样,会出现误判。因此采用SUMPRODUCT统计个数:
  1. =AND(SUMPRODUCT(--(A$1:A$100=A1))=1,OR(LEN(A1)=15,LEN(A1)=18))
5楼
LoveJinLee
countif函数将数值当做15位处理,是跟数据类型有关么?
但好像一般都是,8字节、16字节,这样

为什么是15位?
6楼
lrlxxqxa
是由于Excel的显示精度决定的,对于数值型的数据,单元格内只能呈现出该数值的前15位,如果后面还有就全部用0补齐了;
很方便测试的,如下:

 
7楼
LoveJinLee


谢谢版主的回答~
8楼
opelwang
草版,如果是复制或用快键:Ctrl + D,并不能即时判断出是否重复哟?
望指点,如何解决?谢谢!
9楼
xpm130
数据有效性的规范对象就是手动输入,对复制是无效的
10楼
opelwang
有什么办法可以解决?敬请指点!
11楼
gouweicao78


数据有效性对复制是无法控制的。

此外,本帖主要是对COUNTIF函数的问题进行纠正,事实上,身份证号码是否真实、有效,还有许多需要辨别的地方,比如出生日期不应出现0230这样的、以及第18位校验码等。

可以结合或直接使用VBA来限制。
12楼
DD_WJ
可以尝试用VBA屏蔽掉复制功能,但是这样其他的复制将比较麻烦
13楼
我一定会回来的
版版,为了减少字符,这个公式也可以吧?=AND(SUM(--(A$1:A$100=A1))=1,OR(LEN(A1)=15,LEN(A1)=18))
14楼
gouweicao78
是可以,在数据有效性中,也不需要按CTRL+SHIFT+ENTER结束。但事实上,这个方法有些不稳定,因为测试过程中有时候用SUM的不管用,需要重新设置一下。因此,与其埋下隐患,不如多几个字符。
15楼
我一定会回来的
谢谢版版的耐心讲解。
16楼
gouweicao78
纠正一下:不是“显示精度”问题,而是“计算精度”问题。
Excel计算规范中有说明,计算精度为15位数字。
17楼
lrlxxqxa
谢谢
18楼
双飞叶
能学到许多知识,不够 就是记不太住

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap