购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.4 Select…Case结构

4.4.1 Select…Case结构的基本用法

由于使用If … ElseIf … Else结构实现多分支判断比较烦琐,所以VBA专门针对这种情况提供了另外一种判断结构—— Select...Case结构。

Select…Case 结构最基本的用法是根据一个变量或表达式的取值自动选择执行某个分支,比如案例4-8中的情况。

案例4-8: 图4.23左侧所示的表格中记录了每个学生的奖学金等级,最后一位同学无奖学金,所以C列单元格中的内容为“—”。根据规定,1等奖学金发放3000元,2等奖学金发放2000元,3等奖学金发放1000元,4等奖学金发放500元。请编写程序,参照C列奖学金等级,自动在D列单元格中填写奖学金金额,预期运行效果如图4.23右图所示。

图4.23 案例4-8的原始数据及预期运行效果

这个案例中的判断规则显然是一个多分支判断结构,可以使用If … ElseIf结构实现,也可以使用Select...Case结构实现。下面就是使用这两种代码的对比:

从右侧的代码可以看到,Select…Case结构以“Select Case 变量或表达式”开始,以“End Select”结束。在这两行代码之间,可以书写多个“Case 取值n : ”形式的语句,每个Case语句的冒号后面都可以书写若干行代码,代表一个判断分支。假如“Select Case”后面的变量或表达式的取值等于某个 Case语句中指明的取值,程序就会直接执行这个 Case 语句冒号后面的代码。假如这个变量或表达式的取值不符合任何一个Case分支的要求,就会执行“Case Else”后面的语句。

通过与左侧的If … ElseIf结构对比,可以更加清楚地理解Select…Case结构各部分的含义:Case 语句相当于If和ElseIf语句,而Case Else语句则相当于If结构中的Else子句。与If结构一样,Case Else子句也是一个可选子句,可以不写。

在Select…Case结构中,用于判断的变量或表达式只需要书写一次,而在各个Case子句中仅需指明不同的取值,所以相应代码比使用If结构更加简洁和清晰。因此在实现“同一变量,不同取值”形式的多分支判断时十分常用。

此外,如果把每个Case取值想象成一条电线,把用于判断的变量想象成开关,那么取不同的值就相当于用这个开关连接不同的电线,也就是基本电路中典型的“单刀多掷开关”结构。因此,Select…Case结构也常被形象地称为“开关结构”

4.4.2 在Case语句中表示复杂条件

Case语句不仅可以表示变量是否“等于”某个值,也可用于表示更加复杂的逻辑关系。比如在案例4-2中,需要判断平均分是否“大于等于”某个数值,也可以使用Select…Case结构实现。下面就是使用If结构和Select结构编写案例4-2代码的对比。

在右侧的代码中,每个 Case 语句都使用了关系运算符,但是必须使用“Is”关键字代表“Cells(i,6)”这个用于判断的变量或表达式,不能直接写作“Case >=85”。

除了“Is”关键字,Case语句中还允许使用“To”关键字来代表“当开关变量大于等于a并且小于等于b时”的含义。例如,如果把第一个Case语句改为“Case 80 To 100 :”,那么当Cells(i,6)的数值在80~100之间时,就会进入这个分支。

事实上,VBA语言中的Select…Case结构允许完全使用If语句的写法,所以功能非常灵活。比如此处的Case语句,还可以像If语句一样写成“Case Cells(i,6)>=85 And Cells(i,5)=1 :”这种形式,从而实现If语句能实现的所有功能。只不过这种写法可能比使用 If…ElseIf结构更加烦琐,所以在实际开发中并不经常使用。 hJXc35zFJgLdSMd2p2W0PV67AKeirF6K7cMdKxWIGm7vN/OactFAJGmQRLnf3ysA

点击中间区域
呼出菜单
上一章
目录
下一章
×