向左走,向右走——使用If語句選擇
向左走,向右走——使用If語句選擇
在日常生活中,我們常常要做出選擇,例如,如果明天不下雨,我們就去郊游。在VBA中,也有類似的語句,讓我們控制程序的執(zhí)行方向,例如,如果單元格A1的值為0,那么就彈出警告消息“單元格A1的值不能為0”。
將上面的描述用語句來表達(dá),如下圖所示:
VBA中If-Then語句結(jié)構(gòu)的基本語法如下:
If 條件 Then 條件為真時(shí)執(zhí)行的語句 [Else 條件為假時(shí)執(zhí)行的語句]
說明:
條件為真(假)時(shí)執(zhí)行的語句可以為一條或多條。
方括號(hào)中的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語句寫在多行中,此時(shí)應(yīng)加上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中的值,并將結(jié)果填寫到單元格B1中。
當(dāng)然,下面的代碼也可以實(shí)現(xiàn)上述功能,只是使用了更多的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
我們?cè)俣嘁恍l件,如下面的代碼:
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中的值,并將結(jié)果填寫到單元格B1中;如果單元格A1中的值大于10,就用100來除以單元格A1中的值,并將結(jié)果填寫到單元格B1中。
改寫If-Then結(jié)構(gòu)實(shí)現(xiàn)相同的效果,代碼如下:
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結(jié)構(gòu)的擴(kuò)展語法結(jié)構(gòu)為:
If 條件Then
條件為真時(shí)執(zhí)行的語句
[ElseIf 另一條件Then
另一條件為真時(shí)執(zhí)行的語句]
[Else
所有條件都為假時(shí)執(zhí)行的語句]
End If
說明:
可以有多個(gè)ElseIf子句,但最多只有一個(gè)Else子句。
當(dāng)然,還可以使用嵌套的If-Then-Else結(jié)構(gòu),即一個(gè)If-Then-Else結(jié)構(gòu)嵌套于另一個(gè)If-Then-Else結(jié)構(gòu)中。例如,將上例改寫為:
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
實(shí)現(xiàn)的效果相同,但是應(yīng)特別注意If與Else和End If的配對(duì)正確。
下面舉一個(gè)例子,說明If-Then結(jié)構(gòu)的應(yīng)用。
如下表所示的規(guī)則,根據(jù)員工的工齡來確定員工的年休假天數(shù):
工齡(年)年休假天數(shù)
10年及以下5
10~2010
20~2515
25年以上20
轉(zhuǎn)換成VBA代碼如下:
Sub NianXiuTian()
Dim lngDays As Long
Dim lngYears As Long
lngYears = Range(“A1”).Value
‘根據(jù)工齡確定相應(yīng)的年休天數(shù)
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 & “年休天數(shù):” &lngDays
End Sub
此時(shí),您可以在工作表單元格A1中輸入代表工齡的數(shù)字,運(yùn)行代碼后,會(huì)顯示相應(yīng)的年休天數(shù),如下圖所示。
最后,將If-Then語句結(jié)構(gòu)及其變形歸納如下:
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。