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=====
联系客服