探索Excel中下拉选项的创建技巧与实用方法
581
2022-10-19
Excel VBA Select Case结构
人生经常要面临“多选一”的情况,在编写程序代码时也是如此。在上篇文章中,我们讲解了使用If-Then结构来进行判断,也举了很多个小例子。我们看到,随着条件的增多,代码的结构也变得复杂或难以理解。幸运的是,VBA为我们提供了Select Case结构,让我们根据多个条件判断选择时,能够写出容易理解的代码。
上篇文章的结尾举了一个例子:按照一定的规则,根据员工的工龄来确定员工的年休假天数:
工龄(年) | 年休假天数 |
10年及以下 | 5 |
10~20 | 10 |
20~25 | 15 |
25年以上 | 20 |
现在,我们使用Select Case结构来编写代码,实现相同的功能。首先看看示例代码:
示例代码1
Sub NianXiuTianWithSelectCase()
Dim lngDays As Long
Dim lngYears As Long
lngYears = Range(“A1”).Value
‘根据工龄确定相应的年休天数
Select Case lngYears
Case 0 To 10
lngDays = 5
Case 10 To 20
lngDays = 10
Case 20 To 25
lngDays = 15
Case Is > 25
lngDays = 20
End Select
MsgBox “工龄:” &lngYears & vbCrLf & “年休天数:” &lngDays
End Sub
同样,您可以在工作表单元格A1中输入代表工龄的数字,运行代码后,会显示相应的年休天数,就像在上篇文章中所示的图一样。
与上篇文章中的代码相比,既简单又易理解。
Select Case结构的语法如下:
Select Case 条件(表达式)
[Case 表达式值1
[语句块] ]
[Case 表达式值2
[语句块] ]
……
[Case Else
[语句块] ]
End Select
说明:
当某个Case“表达式值”满足“条件(表达式)”的结果时,执行相应的语句块,并退出Select Case结构。如果没有满足“条件(表达式)”的结果时,就执行Case Else后的语句块。 方括号表示可选。Case子句可以有多个,CaseElse子句可以有也可以没有。
Case后的表达式可以是数值范围,如示例代码1所示。下面再举一些简单的例子来说明Select Case结构的用法,这些例子本身没有多大的实用价值,只是方便您理解Select Case结构。
Case后的表达式也可以是逗号分隔的数值或字符串,如下面的示例代码所示:
示例代码2:逗号分隔数值
SubNumWithSelectCase()
Select Case Range(“A1”).Value
Case 1, 3, 5
MsgBox “单元格A1中的值是5以内的奇数.”
End Select
End Sub
如果单元格A1中是数值1或3或5,运行代码后就会弹出“单元格A1中的值是5以内的奇数.”的消息框。
示例代码3:逗号分隔字符
Sub CharWithSelectCase()
Select Case Range(“A1”).Value
Case “A”, “E”,”I”, “O”, “U”
MsgBox “单元格A1中是大写元音字母.”
Case Else
MsgBox “单元格A1中不是大写元音字母.”
End Select
End Sub
如果单元格A1中是字母“A”、“E”、“I”、“O”、“U”之一,运行代码后就会弹出“单元格A1中是大写元音字母”的消息框。
我们还可以嵌套使用Select Case结构,如下面的示例代码所示:
示例代码4:嵌套的Select Case结构
Sub qtWithSelectCase()
Select Case Range(“A1”).Value
Case “工作表”
Select Case Worksheets.Count
Case 1
MsgBox “工作簿中有1个工作表”
Case 2
MsgBox “工作簿中有2个工作表”
Case Else
MsgBox “工作簿中的工作表超过了2个”
End Select
Case Else
MsgBox “请在单元格A1中输入文本:工作表”
End Select
End Sub
如果单元格A1中的值为文本“工作表”,就判断工作簿中的工作表数量(语句Worksheets.Count),并在消息框中显示相应的信息。
说明:
Select Case结构可以多层嵌套,但要注意每个Select Case语句要对应一条End Select语句。 在书写嵌套结果时,在代码中使用缩进排列可以使程序清晰易懂。
如果Case子句后只有一条指令,那么可以将指令与Case书写在一行上。例如,我们重写示例代码2如下:
Sub NumWithSelectCase()
Select Case Range(“A1”).Value
Case 1, 3, 5: MsgBox “单元格中的数字是5以内的奇数.”
End Select
End Sub
说明:
如果将Case子句与后面的指令写在一行上,那么必须在它们之间加上冒号(:)。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。