ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 同心/ty

[求助] 添加一个条件,检测身份证号重复

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-22 13:44 | 显示全部楼层
cyq4896 发表于 2023-5-20 20:53
代码又优化了些

老师,你5楼作品就很好!优化后反而出现问题,把标题也给一起删除了。还是以下代码好。

Sub dd()
    Dim d As Object, arr, brr, i&, j&, k
    Set d = CreateObject("scripting.dictionary")
    arr = Range("e1:g" & [a65536].End(xlUp).Row)
    For i = 11 To UBound(arr)
        If Len(arr(i, 1)) = 18 And arr(i, 2) <> 0 Then
            d(arr(i, 1)) = d(arr(i, 1)) & "," & i
        End If
    Next
    ReDim brr(1 To UBound(arr), 1 To 1)
    For i = 1 To UBound(arr)
        k = Mid(Replace(d(arr(i, 1)), "," & i, ""), 2)
        If Len(k) And arr(i, 2) <> 0 Then
            brr(i, 1) = "与第" & k & "行重复"
        Else
            brr(i, 1) = Range("h" & i).Value
        End If
    Next
    [h1].Resize(UBound(arr) - 1, 1) = brr
    Set d = Nothing
End Sub

TA的精华主题

TA的得分主题

发表于 2023-5-22 15:26 | 显示全部楼层
cyq4896 发表于 2023-5-20 20:53
代码又优化了些

请问老师,这个Len(k)怎么理解啊? 我一直以为它后面应该接>,=这类运算符号,谢谢~
"If Len(k) And arr(i, 2) <> 0 "

TA的精华主题

TA的得分主题

发表于 2023-5-22 16:52 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-5-22 17:00 | 显示全部楼层
dycwuxing 发表于 2023-5-22 15:26
请问老师,这个Len(k)怎么理解啊? 我一直以为它后面应该接>,=这类运算符号,谢谢~
"If Len(k) And arr(i,  ...

Len(k) 结果就两种:0或者非0,因此等效false(为0时)和true(非0时)

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-22 22:06 | 显示全部楼层
本帖最后由 同心/ty 于 2023-5-22 22:08 编辑

1684764000743.png 老师,我表中列数,与行数发生改变,在你提供代码中如何修改参数,业绩向右移动了8列,现在N列。而检测结果反馈由原来H列变为U列,表头位置也改变了,现处在第4和第5行上。我试改了几次没有成功,还望老师指点。

TA的精华主题

TA的得分主题

发表于 2023-5-22 22:58 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. Sub CheckDuplicateID()
  2.     Dim lastRow As Long
  3.     Dim idDict As Object
  4.     Dim i As Long
  5.     Dim id As String
  6.     Dim score As Long
  7.    
  8.     '获取最后一行
  9.     lastRow = Cells(Rows.Count, "E").End(xlUp).Row
  10.    
  11.     '创建字典对象
  12.     Set idDict = CreateObject("Scripting.Dictionary")
  13.    
  14.     '遍历每一行
  15.     For i = 2 To lastRow
  16.         '获取身份证号和业绩
  17.         id = Cells(i, "E").Value
  18.         score = Cells(i, "F").Value
  19.         
  20.         '如果业绩不为 0
  21.         If score <> 0 Then
  22.             '如果身份证号已经存在于字典中,则说明有重复
  23.             If idDict.exists(id) Then
  24.                 MsgBox "身份证号 " & id & " 重复!"
  25.                 Exit Sub
  26.             Else
  27.                 '否则将身份证号添加到字典中
  28.                 idDict.Add id, 1
  29.             End If
  30.         End If
  31.     Next i
  32.    
  33.     '如果没有重复身份证号,则弹出提示框
  34.     MsgBox "没有重复身份证号!"
  35. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2023-5-23 07:32 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
同心/ty 发表于 2023-5-22 22:06
老师,我表中列数,与行数发生改变,在你提供代码中如何修改参数,业绩向右移动了8列,现在N列。而检测结 ...

是不是上个附件测试一下

TA的精华主题

TA的得分主题

发表于 2023-5-23 07:57 | 显示全部楼层
试试是你要的效果吧

2023用VBA找出身份证号重复人员.rar

13.81 KB, 下载次数: 13

TA的精华主题

TA的得分主题

发表于 2023-5-23 08:43 | 显示全部楼层
zpy2 发表于 2023-5-23 07:32
是不是上个附件测试一下

Screenshot_2023-05-23-08-41-33-491_com.microsoft.emmx.jpg
绑定标题栏?


create temp table aa as
select  row_number() over (order by rowid) grp,身份证号,group_concat(rowid) 重复 from 业绩不为零的重复字段高亮行标注 where 业绩>0 group by 身份证号 having(count(*)>1);
select  iif(重复 is not null and 业绩>0,'<span class="hi">'||grp||'</span>',grp) grp2,序号,姓名,性别,住址,身份证号,新字段1,新字段2,业绩,重复 from 业绩不为零的重复字段高亮行标注 a left join aa using(身份证号);
cli_add_css~~
.bg1{ background:LightYellow; } .bg2{ background:AliceBlue; }.bg3{ background:Aqua;} ~;

cli_add_script~~
function dom2(a,iGrp){
var c = a.parentNode;
var c = c.parentNode;
console.log(iGrp)
iColor=(iGrp-1)%3+1
c.classList.add("bg"+iColor); }
function dom3(){
var aa = document.querySelectorAll(".hi"); for (i = 0;
i < aa.length; i++)
{
var iGrp=aa.innerText
//alert(iGrp)
dom2(aa,iGrp);
}

}

window.addEventListener('load',dom3());
~;

TA的精华主题

TA的得分主题

发表于 2023-5-23 09:35 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
不从第一行起

2023用VBA找出身份证号重复人员.rar

14.15 KB, 下载次数: 13

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-16 20:52 , Processed in 0.041208 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表