zl程序教程

您现在的位置是:首页 >  工具

当前栏目

Excel VBA学习之身份证号校检自定义函数

Excel学习 函数 自定义 vba 身份证号
2023-06-13 09:13:56 时间

Excel VBA学习之身份证号校检自定义函数

【问题提出】上次学习了一个用Excel函数的方法来解决这个问题,但是函数太长了,有时会忘记:

=IF(LEN($B2)=18,IF(MID("10X98765432",MOD(SUMPRODUCT(VALUE(MID($B2,ROW($1:$17),1)),说明!$B$2:$B$18),11)+1,1)=RIGHT($B2,1),"合法","不合法"),"长度错误")

能不能简单一点,工作时不用那么辛苦的输入这个函数

【知识学习】

自定义函数的基本语法:

我们在Excel中使用的内置函数,有的没参数,比如Rand函数,有的有参数,比如Vlookup,参数还好几个,有些参数是区域,有些是数字。

我们今天就从最基本的开始,先来学习下定义一个没有参数和一个只有一个参数的函数,通过最基本的例子来掌握自定义函数的基本语法结构。

自定义函数的语法结构:

Function 函数名(参数1,参数2,……,参数n)

代码

函数名 = 代码执行的结果

End Function

语法很简单,看来难在了怎么得到结果的这段代码上。

好了,下面我们就开始自定义一个没有参数的函数吧。

【写一个自定义函数用于检测身份证号是否正确】

''====用于校检身份证号是否正确的自定义函数=========

Function ID(n)

Dim h, s, t, z As Integer

wi = Array("7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2")

y = Array("1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2")

If Len(n) = 18 Then

For h = 0 To 16

r = Mid(n, h + 1, 1)

If IsNumeric(r) = False Then

ID = "第 " & h + 1 & " 位为非法字符"

Exit Function

End If

s = s + r * wi(h)

Next h

t = s Mod 11

If UCase(Mid(n, 18)) = y(t) Then

ID = "身份证号码正确"

Else

ID = "身份证号码不正确"

End If

Else

ID = "位数少于18位"

End If

End Function

【使用方法】

【测试成功】

=====The End=====