VBA中IIf是函數(shù),其用法和EXCEL工作表函數(shù)If相似,格式是IIF( 計算表達式 , 表達式為真返回值 , 表達式為假返回值 );
而VBA中IF是語句,相比IIf更為靈活,單行的格式是if……then……else……(else部分可有可無),多行的格式如下:
if 計算表達式1 then
……(計算表達式1為真,此處執(zhí)行語句)
elseif 計算表達式2 then
……(計算表達式1為假,計算表達式2為真,此處執(zhí)行語句)
else
……(以上計算表達式均為假,此處執(zhí)行語句)
end if
其中elseif部分和else部分都是可選的(可忽略不寫的),而iif函數(shù)的第三參數(shù)必須被定義。
而且IIf因為是函數(shù),所以不能像If那樣參數(shù)里執(zhí)行語句,比如以下代碼IF語句判斷成績及格與不及格:
Sub 用if判斷成績及格與不及格() score = 71 If score >= 60 Then MsgBox "及格" Else MsgBox "不及格" End Sub
IIf函數(shù)就不能寫成IIF( score >= 60 , MsgBox "及格" , MsgBox "不及格" ),因為它是函數(shù)需要被賦值,而且參數(shù)不能執(zhí)行msgbox語句,所以只能寫成:
Sub 用if判斷成績及格() score = 71 grade = IIf(score >= 60, "及格", "不及格") MsgBox grade End Sub
不過也正因為iif函數(shù)能賦值,所以相比If語句它的優(yōu)勢就在于單條件下它的賦值更方便,像以上判斷成績及格與不及格用if來賦值就要寫成以下代碼:
Sub 用if判斷成績及格與不及格() score = 71 If score >= 60 Then grade = "及格" Else grade = "不及格" End If MsgBox grade End Sub
即使因為這是單條件,if語句能寫成以下單行,但還是會比iif函數(shù)寫得更長:
Sub 用if判斷成績及格與不及格() score = 71 If score >= 60 Then grade = "及格" Else grade = "不及格" MsgBox grade End Sub
但也不是說IIf在賦值上就一定比If好用,在多條件判斷或嵌套的賦值時,IIf函數(shù)就不如If語句了,畢竟If有elseif部分。比如以下用If語句判斷成績優(yōu)良及格與不及格:
Sub 用if寫成績判斷() score = 71 If score >= 85 Then grade = "優(yōu)秀" ElseIf score >= 75 Then grade = "良好" ElseIf score >= 60 Then grade = "及格" Else grade = "不及格" End If MsgBox grade End Sub
雖然用IIf用嵌套的方式也可以做到同樣的結(jié)果,比如如下代碼,但是這樣在書寫上是不如If……elseif……else清晰,很容易寫漏括號或逗號造成語法寫錯:
Sub 用iif寫成績判斷() score = 71 grade = IIf(score >= 85, "優(yōu)秀", IIf(score >= 75, "良好", IIf(score >= 60, "及格", "不及格"))) MsgBox grade End Sub
如果能用Ifs函數(shù),那多條件判斷賦值Ifs函數(shù)當然比IIf函數(shù)和If語句更勝一籌,但可惜VBA沒有Ifs函數(shù),也不支持調(diào)用EXCEL工作表的Ifs函數(shù)。
總的來說,vba的IIf函數(shù)在單條件判斷的賦值上比If語句更方便,但不如If語句的使用范圍廣泛,且多條件賦值或者嵌套時不如If清晰。所以在單條件判斷的賦值時,可以使用IIF以節(jié)省代碼書寫時間與長度,當然如果不嫌麻煩,也還是可以使用If的。
以上內(nèi)容對您有幫助可以分享或轉(zhuǎn)藏,避免以后找不到。想要了解更多VBA相關知識,歡迎到http://moqingyan.360doc.com我的個人圖書館查看。
聯(lián)系客服