作者:绿色风
分类:
时间:2022-08-17
浏览:135
楼主 kevinchengcw |
Q: 如何用vba代码判断输入的身份证号码是否符合指定规则? A: 规则如下:
利用工作表change事件判断即时输入内容代码如下:
- Private Sub Worksheet_Change(ByVal Target As Range)
- If Not Intersect(Target, [b2:b100]) Is Nothing Then '判断是否处在需要判断的区域内,如果是,则
- Dim Rng As Range, R As Range
- With CreateObject("vbscript.regexp") '创建正则,用于判断输入内容是否符合规则
- .Global = True '全局有效
- .ignorecase = True '忽略大小写
- .Pattern = "([1-9]\d{9}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[0-9xX])|([1-9]\d{7}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3})" '匹配规则(分18位与15位两段)
- For Each Rng In Intersect(Target, [b2:b100]) '循环target中位于需要判断区域内的各个单元格
- If Trim(Rng.Value) <> "" Then '如果是有效数据则进行判断
- If .Replace(Trim(Rng.Value), "") <> "" Then '如果单元格内容无法被匹配规则替换为空,则证明不符合匹配规则
- If R Is Nothing Then '将不符合的单元格区域加入变量中,用于后面提示使用
- Set R = Rng
- Else
- Set R = Union(Rng, R)
- End If
- End If
- End If
- Next Rng
- End With
- If Not R Is Nothing Then MsgBox "The cell" & IIf(R.Cells.Count > 1, "s", "") & " below is error:" & vbNewLine & R.Address(0, 0) '如果存在不符合区域,则进行提示
- End If
- End Sub
详见附件及素材源帖. Example.rar |
2楼 亡者天下 |
谢谢分享,学习了 |
3楼 yf_home |
学习K哥代码。 |
免责声明
有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素,
经与ExcelTip.Net站长Apolloh商议并征得其同意,
现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示,
供有需要的人士查询使用,也慰缅曾经的论坛时代。
所示各个帖子的原作者如对版权有异议,
可与本人沟通提出,或于本站点留言,我们会尽快处理。
在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一