Excel VBA Select Case结构
时间:2023-11-29 13:45:55
人生经常要面临“多选一”的情况,在编写程序代码时也是如此。在上篇文章中,我们讲解了使用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子句与后面的指令写在一行上,那么必须在它们之间加上冒号(:)。
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
安装Win10前需要注意事项是什么?
![](https://img.aspxhome.com/file/2023/3/50203_0s.png)
Foxmail邮件过滤器怎么设置
![](https://img.aspxhome.com/file/2023/4/a312533_0s.png)
win7纯净版安装后占用c盘空间多大的使用心得
![](https://img.aspxhome.com/file/2023/5/a315863_0s.jpg)
Excel ISLOGICAL 函数 使用实例教程
![](https://img.aspxhome.com/file/2023/0/a162420_0s.png)
excel中录入长算式的教程
怎么在excel中设置自动保存
win11怎么改成win7经典界面?win11切换win7风格菜单方法
![](https://img.aspxhome.com/file/2023/30/a264954_0s.jpg)
Word如何取消自动编号功能?
![](https://img.aspxhome.com/file/2023/9/25369_0s.png)
Excel批量插入多行的方法
![](https://img.aspxhome.com/file/2023/5/37285_0s.gif)
如何使用Movavi PDF Editor文档页面在Mac上组合成PDF
![](https://img.aspxhome.com/file/2023/1/a213251_0s.jpeg)
Win10放大桌面图标上文字的方法
![](https://img.aspxhome.com/file/2023/1/a278413_0s.jpg)
Excel 2010数据已筛选项怎么汇总?
![](https://img.aspxhome.com/file/2023/6/41496_0s.jpg)
Excel中进行表格录入函数公式的操作技巧
excel offset函数用法实例教程
![](https://img.aspxhome.com/file/2023/2/a162372_0s.jpg)
QQ浏览器怎么样管理首页频道?首页频道管理方法分享
![](https://img.aspxhome.com/file/2023/7/a331477_0s.jpg)
excel做相关性分析的图文教程详解
WPS提示无法粘贴信息怎么办?
![](https://img.aspxhome.com/file/2023/30/a271321_0s.jpg)
Win10玩不了《上古世纪》游戏的解决方法
累进提成,IF望尘莫及,可以用LOOKUP、SUM、OFFSET、MATCH来解决
![](https://img.aspxhome.com/file/2023/0/a142240_0s.png)