005.VBA的判断语句
大家好,我是永不止步的老牛。
上一篇我们介绍了Excel宏,本篇我们介绍VBA的判断语句。
当我们在VBA编码中,碰到需要判断一种情况的结果来决定是不是要执行一些代码时,就要用到VBA的判断语句,我们逐步深入,先看最简单的判断语句 If…Then,语法如下:
If 条件 Then
代码1
代码2
代码n
End If
表示判断“条件”的结果,如果是True,就执行Then和End If之间的代码段,如果是False,就跳过Then和End If之间的代码段,执行End If语句之后的代码,If…Then必须以End If结束。
“条件”是使用关系运算符,逻辑运算符或两者结合的表达式,表达式的结果是True或False,表达式可以是数值表达式、字符表达式或类型判断表达式,比如说:
- ActiveCell.Value > 23.9 :如果当前单元格的数值大于23.9就返回True,否则返回False。
- ActiveSheet.Name= “Sheet1” :如果当前工作表名称是“Sheet1”,就返回True,否则返回False。
- TypeOf ActiveCell Is Range :如果对象ActiveCell的类型是Range,就返回True,否则返回False。
ActiveCell表示当前单元格,ActiveCell.Value表示当前单元格的值。
ActiveSheet表示当前工作表,ActiveSheet.Name表示当前工作表的名称。
我们用前面编写的计算BMI的过程演示一下(BMI正常范围为18.5-23.9,低于18.5为体重过轻,高于23.9为体重过重),代码如下:
代码中“ If BMI >= 18.5 And BMI <= 23.9 Then ”,判断BMI大于等于18.5并且小于等于23.9,就显示提示告知正常,And表示并且,就是BMI >= 18.5和BMI <= 23.9必须同时满足才返回True,否则返回False。
代码中“ If BMI < 18.5 Or BMI > 23.9 Then ”,判断BMI小于18.5或大于23.9,就显示提示告知超标,Or表示或,就是BMI < 18.5和BMI > 23.9有一个满足就返回True,全部满足就返回False。
上面的语句我们用了2次If…Then语句进行判断,能不能只用只判断一次,条件为True时,执行一段代码,为False时执行另一段代码?可以通过使用If…Then语句的子句Else实现,语法如下:
If 条件 Then
条件为True时,代码1
条件为True时,代码2
条件为True时,代码n
Else
条件为False时,代码1
条件为False时,代码2
条件为False时,代码n
End If
只要判断“条件”,如果结果为True,就执行Then和Else之间的代码,如果条件为False,就执行Else和End If之间的语句,我们将刚才的代码修改一下,如下图:
一次判断可以决定2种执行方案,代码也简化了。
我们想要在BMI超标时能准确提示用户,是体重过轻还是体重过重,有同学说:这个好办,只要给If语句种嵌套另一个If语句就行,没问题,If语句根据需要可以嵌套If语句,修改一下代码,如下图:
If语句对于多种情况进行判断时,提供了ElseIf子句,可以减少If嵌套层级,方便阅读,代码如下:
这里重点说一下,可以包括多个ElseIf子句和条件,
Else可以省略,但Else必须出现在ElseIf之后
。
如果我们需要判断的情况很多,比如,小于18.5的,换药分分3个档,BMI<10是体重轻的很严重,10<=BMI<15是体重非常轻,10<=BMI<18.5是体重有点轻,我们看下代码
如果BMI为20,代码会怎么执行呢?
代码会先执行1的判断,因为不满足,再执行2,还是不满足,再执行3,不满足,执行4,不满足,执行Else和End If语句执行的代码,这就是执行顺序。
如果是这种多情况判断,有另外一种判断语句Select Case语句,能够简单一点,语法如下:
Select Case 表达式
[Case 条件
[符合条件时执行的代码]] ...
[Case Else
[不符合条件时执行的代码]]
End Select
表达式:表示任何数值表达式或字符串表达式
省略号代表可以使用多个条件。只要有一个Case就需要有一个条件,子句Case Else是可选的,在所有Case条件都不满足时执行。
Case后面的“条件”,有多种写法:
A.一个表达式。
B.表达式1 To 表达式2,表达式1要小于表达式2。
C.Is表达式,结果必须为True或False。
修改上面的代码如下:
To可以这样写:Case 8 To 18
注意一下, 如果有多个Case都满足,执行第一个满足Case的语句 ,例如BMI为9时,同时满足<10、<15、<18.5三个Case,但执行第一个满足的<10的Case的语句,所以用Select要注意Case的前后顺序。
今天就介绍到这,大家最好能自己实际练习一下,下一篇文章我们介绍VBA的Do…While循环语句。