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子句与后面的指令写在一行上,那么必须在它们之间加上冒号(:)。
office办公软件入门基础教程 » Excel VBA Select Case结构

本文链接:【Excel VBA Select Case结构】https://www.officeapi.cn/87439.html

OFFICE,天天学一点,进步多一点

联系我们