楼主 gouweicao78 |
Q:在A列用数据有效性限制输入的值不得重复,公式为:=(LEN(A1)=18)*COUNTIF(A:A,A1)=1,但是用文本形式数字输入身份证号前15位一样后3位不同时,怎么也被限制不能输入?比如A1、A2分别输入: '123456789012345678 '123456789012345999 A:这是因为COUNTIF默认将数字都视为数值计算,而数值计算精度为15位数,因此这2个号码都被视为'123456789012345000 【解决方法】:数据有效性公式改用:
![]() |
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统计个数:
|
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楼 双飞叶 |
能学到许多知识,不够 就是记不太住 |