发布网友 发布时间:2022-04-22 23:05
共3个回答
热心网友 时间:2023-09-24 04:03
因为你提供的信息较少,因而设定了几个假设:
1、身份证号位于A列,生日信息位于B列;
2、第一行作为标题行;
3、生日信息按照“yyyy-mm-dd"格式填写。
如下图:
下面是操作工程:
1、打开vba编辑器<若是已经添加了vba菜单可以直接点击打开,或是通过点击工具栏”工具“》宏》vba编辑器打开,或者同时按下快捷键alt+F11>;
2、输入以下代码:<注意后面的注释>
Sub 身份信息核对()
Dim i!, j!, x$, sfzh$: i = 2
Do Until Cells(i, 1) = "" ‘一直运行本代码直到第一列数据为空时结束
If Len(Cells(i, 1)) = 15 Then ' 当身份证号为15位时转为18位
x = "19"
Else
x = ""
End If
sfzh = Mid(Cells(i, 1), 1, 6) & x & Mid(Cells(i, 1), 7, 13)
If Mid(sfzh, 7, 4) <> Left(Cells(i, 2), 4) Or Mid(sfzh, 11, 2) <> Mid(Cells(i, 2), 6, 2) Or _
Mid(sfzh, 13, 2) <> Mid(Cells(i, 2), 9, 2) Then '对身份证号与生日信息的年、月、日分别对比判断是否一致,不一致提示错误。
j = j + 1
Cells(i, 3) = "信息有错误"
Else
Cells(i, 3) = ""
End If
i = i + 1
Loop
If j = 0 Then
MsgBox "未检测到错误信息!"
Else
MsgBox "检测到" & j & "条错误信息!" '信息框显示错误信息的有关情况
End If
End Sub
3、运行本代码以验证效果。<可以点击运行按钮(vba编辑器工具栏内的三角符号),或者在sheet中插入按钮(如下图)>
(1)插入文本框(绘图工具菜单内)
(2)指定宏
(3)然后该按钮就可以运行该宏代码了
附:示例
热心网友 时间:2023-09-24 04:03
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Dim i As Long
If Target.Column = 3 Then
For i = Target.Row To Target.Row + Target.Rows.Count - 1
Range("D" & i) = Mid(Range("C" & i), 7, 8)
If Mid(Range("C" & i), 17, 1) Mod 2 = 0 Then Range("E" & i) = "女" Else Range("E" & i) = "男"
Next
End If
End Sub以上只适用18位身份证,15位的自己发挥一下
热心网友 时间:2023-09-24 04:04
从身份证号码中提取生日,参照公式=TEXT(MID(B2,7,8),"0-00-00"),如下图: