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=====