在日常生活中,我们常常要做出选择,例如,如果明天不下雨,我们就去郊游。在VBA中,也有类似的语句,让我们控制程序的执行方向,例如,如果单元格A1的值为0,那么就弹出警告消息“单元格A1的值不能为0”。
在日常生活中,我们常常要做出选择,例如,如果明天不下雨,我们就去郊游。在VBA中,也有类似的语句,让我们控制程序的执行方向,例如,如果单元格A1的值为0,那么就弹出警告消息“单元格A1的值不能为0”。
将上面的描述用语句来表达,如下图所示:
VBA中If-Then语句结构的基本语法如下:
If 条件 Then 条件为真时执行的语句 [Else 条件为假时执行的语句]
说明:
条件为真(假)时执行的语句可以为一条或多条。
方括号中的Else子句可选。
前述示例完整的过程代码为:
Sub testIf()
If Range(“A1”).Value = 0 ThenMsgBox “单元格A1的值不能为0”
End Sub
或者:
Sub testIf2()
If Range(“A1”).Value = 0 Then
MsgBox “单元格A1的值不能为0”
End If
End Sub
注意,在过程testIf2中,将If-Then语句写在多行中,此时应加上End If语句。在If-Then行与End If行之间,可以添加多条语句。
再看看下面的代码:
Sub testIf3()
If Range(“A1”).Value = 0 Then
MsgBox “单元格A1的值不能为0”
Else
Range(“B1”).Value = 20 /Range(“A1”).Value
End If
End Sub
代码的意思是:如果单元格A1的值为0,那么就弹出警告消息“单元格A1的值不能为0”;否则,就用20来除以单元格A1中的值,并将结果填写到单元格B1中。
当然,下面的代码也可以实现上述功能,只是使用了更多的If-Then语句:
Sub testIf4()
If Range(“A1”).Value = 0 ThenMsgBox “单元格A1的值不能为0”
If Range(“A1”).Value <> 0Then Range(“B1”).Value = 20 / Range(“A1”).Value
End Sub
我们再多一些条件,如下面的代码:
Sub testIf5()
If Range(“A1”).Value = 0 ThenMsgBox “单元格A1的值不能为0”
If Range(“A1”).Value <= 10Then Range(“B1”).Value = 20 / Range(“A1”).Value
If Range(“A1”).Value > 10 ThenRange(“B1”).Value = 100 / Range(“A1”).Value
End Sub
如果单元格A1的值为0,那么就弹出警告消息“单元格A1的值不能为0”;如果单元格A1中的值小于等于10,就用20来除以单元格A1中的值,并将结果填写到单元格B1中;如果单元格A1中的值大于10,就用100来除以单元格A1中的值,并将结果填写到单元格B1中。
改写If-Then结构实现相同的效果,代码如下:
Sub testIf6()
If Range(“A1”).Value = 0 Then
MsgBox “单元格A1的值不能为0”
ElseIf Range(“A1”).Value <= 10Then
Range(“B1”).Value = 20 /Range(“A1”).Value
Else
Range(“B1”).Value = 100 /Range(“A1”).Value
End If
End Sub
由上可知,在多条件下If-Then结构的扩展语法结构为:
If 条件Then
条件为真时执行的语句
[ElseIf 另一条件Then
另一条件为真时执行的语句]
[Else
所有条件都为假时执行的语句]
End If
说明:
可以有多个ElseIf子句,但最多只有一个Else子句。
当然,还可以使用嵌套的If-Then-Else结构,即一个If-Then-Else结构嵌套于另一个If-Then-Else结构中。例如,将上例改写为:
Sub testIf7()
If Range(“A1”).Value = 0 Then
MsgBox “单元格A1的值不能为0”
Else
If Range(“A1”).Value <= 10Then
Range(“B1”).Value = 20 /Range(“A1”).Value
Else
Range(“B1”).Value = 100 /Range(“A1”).Value
End If
End If
End Sub
实现的效果相同,但是应特别注意If与Else和End If的配对正确。
下面举一个例子,说明If-Then结构的应用。
如下表所示的规则,根据员工的工龄来确定员工的年休假天数:
工龄(年)年休假天数
10年及以下5
10~2010
20~2515
25年以上20
转换成VBA代码如下:
Sub NianXiuTian()
‘声明变量,用来表示年休天数和工龄
Dim lngDays As Long
Dim lngYears As Long
lngYears = Range(“A1”).Value
‘根据工龄确定相应的年休天数
If lngYears >= 0 And lngYears <= 10Then
lngDays = 5
ElseIf lngYears > 10 And lngYears <=20 Then
lngDays = 10
ElseIf lngYears > 20 And lngYears <=25 Then
lngDays = 15
Else
lngDays = 20
End If
MsgBox “工龄:” &lngYears & vbCrLf & “年休天数:” &lngDays
End Sub
此时,您可以在工作表单元格A1中输入代表工龄的数字,运行代码后,会显示相应的年休天数,如下图所示。
最后,将If-Then语句结构及其变形归纳如下: