— dddddd为地址码(省地县三级)18位中的和15位中的不完全相同。 — yyyymmdd yymmdd 为出生年月日。 — xx序号类编码。 — p性别。
— 18位中末尾的y为校验码。
2.关键技术
在If…Then语句中,条件不成立时不执行任何语句。在很多时候需要根据条件是否成立分别执行两段不同的代码,这时可用If…Then…Else语句,其语法格式如下:
If 逻辑表达式 Then 语句序列1 Else 语句序列2 End If
VBA判断“逻辑表达式”的值,如果它为True,将执行“语句序列1”中的各条语句,当“逻辑表达式”的值为False时,就执行“语句序列2”中的各条语句。其流程图如图3-14所示。
3.编写代码
(1)新建Excel工作簿,在VBE中插入一个模块。
(2)在模块中编写以下代码: Sub 根据身份证号码确定性别()
sid = InputBox(\请输入身份证号码:\ i = Len(sid)
If i <> 15 And i <> 18 Then '判断身份证号长度是否正确 MsgBox \身份证号码只能为15位或18位!\ Exit Sub End If
If i = 15 Then '长度为15位 s = Right(sid, 1) '取最右侧的数字 Else '长度为18度
s = Mid(sid, 17, 1) '取倒数第2位数 End If
If Int(s / 2) = s / 2 Then '为偶数 sex = \女\ Else sex = \男\ End If
MsgBox \性别:\+ sex End Sub
(3)切换到Excel环境,添加一个按钮“从身份证号码提取性别”,并指定执行上步创建的宏。
(4)单击“从身份证号码提取性别”按钮,弹出如图3-15所示对话框。
(5)输入身份证号码后单击“确定”按钮,将在如图3-16所示对话框中显示性别。
图3-15 输入身份证号码 图3-16 显示性别
例022 评定成绩等级
1.案例说明
本例将成绩表中的百分制成绩按一定规则划分为A、B、C、D、E五个等级,如图3-17所示。
图3-17 评定成绩等级
其中各等级对应的成绩分别为: — A:大于等于90分;
— B:大于等于80分,小于90分; — C:大于等于70分,小于80分; — D:大于等于60分,小于70分; — E:小于60分。
2.关键技术
本例共有五个分支,使用If…Then…Else这种二路分支结构也可完成,但需要复杂的嵌套结构才能解决该问题。其实VBA中提供了一种If…Then…ElseIf的多分支结构,其语法格式如下:
If 逻辑表达式1 Then
语句序列1
ElseIf 逻辑表达式2 Then 语句序列2.
ElseIf 逻辑表达式3 Then 语句序列3 ... … Else 语句序列n End If
在以上结构中,可以包括任意数量的ElseIf子句和条件,ElseIf子句总是出现在Else子句之前。
VBA首先判断“逻辑表达式1”的值。如果它为False,再判断“逻辑表达式2”的值,依此类推,当找到一个为True的条件,就会执行相应的语句块,然后执行End If后面的代码。如果所有“逻辑表达式”都为False,且包含Else语句块,则执行Else语句块。其流程图如图3-18所示。
图3-18 If…Then…ElseIf语句流程图
3.编写代码
(1)在Excel中打开成绩表。
(2)按快捷键“Alt+F11”进入VBE开发环境。
(3)单击“插入/模块”命令向工程中插入一个模块,并编写以下VBA代码: Sub 评定等级() Dim i As Integer For i = 3 To 11