VBA中IIf是函数,其用法和EXCEL工作表函数If相似,格式是IIF( 计算表达式 , 表达式为真返回值 , 表达式为假返回值 ); 而VBA中IF是语句,相比IIf更为灵活,单行的格式是if……then……else……(else部分可有可无),多行的格式如下: if 计算表达式1 then ……(计算表达式1为真,此处执行语句) elseif 计算表达式2 then ……(计算表达式1为假,计算表达式2为真,此处执行语句) else ……(以上计算表达式均为假,此处执行语句) end if 其中elseif部分和else部分都是可选的(可忽略不写的),而iif函数的第三参数必须被定义。 而且IIf因为是函数,所以不能像If那样参数里执行语句,比如以下代码IF语句判断成绩及格与不及格: Sub 用if判断成绩及格与不及格() score = 71 If score >= 60 Then MsgBox "及格" Else MsgBox "不及格" End Sub IIf函数就不能写成IIF( score >= 60 , MsgBox "及格" , MsgBox "不及格" ),因为它是函数需要被赋值,而且参数不能执行msgbox语句,所以只能写成: Sub 用if判断成绩及格() score = 71 grade = IIf(score >= 60, "及格", "不及格") MsgBox grade End Sub 不过也正因为iif函数能赋值,所以相比If语句它的优势就在于单条件下它的赋值更方便,像以上判断成绩及格与不及格用if来赋值就要写成以下代码: Sub 用if判断成绩及格与不及格() score = 71 If score >= 60 Then grade = "及格" Else grade = "不及格" End If MsgBox grade End Sub 即使因为这是单条件,if语句能写成以下单行,但还是会比iif函数写得更长: Sub 用if判断成绩及格与不及格() score = 71 If score >= 60 Then grade = "及格" Else grade = "不及格" MsgBox grade End Sub 但也不是说IIf在赋值上就一定比If好用,在多条件判断或嵌套的赋值时,IIf函数就不如If语句了,毕竟If有elseif部分。比如以下用If语句判断成绩优良及格与不及格: Sub 用if写成绩判断() score = 71 If score >= 85 Then grade = "优秀" ElseIf score >= 75 Then grade = "良好" ElseIf score >= 60 Then grade = "及格" Else grade = "不及格" End If MsgBox grade End Sub 虽然用IIf用嵌套的方式也可以做到同样的结果,比如如下代码,但是这样在书写上是不如If……elseif……else清晰,很容易写漏括号或逗号造成语法写错: Sub 用iif写成绩判断() score = 71 grade = IIf(score >= 85, "优秀", IIf(score >= 75, "良好", IIf(score >= 60, "及格", "不及格"))) MsgBox grade End Sub 如果能用Ifs函数,那多条件判断赋值Ifs函数当然比IIf函数和If语句更胜一筹,但可惜VBA没有Ifs函数,也不支持调用EXCEL工作表的Ifs函数。 总的来说,vba的IIf函数在单条件判断的赋值上比If语句更方便,但不如If语句的使用范围广泛,且多条件赋值或者嵌套时不如If清晰。所以在单条件判断的赋值时,可以使用IIF以节省代码书写时间与长度,当然如果不嫌麻烦,也还是可以使用If的。 以上内容对您有帮助可以分享或转藏,避免以后找不到。想要了解更多VBA相关知识,欢迎到http://moqingyan.360doc.com我的个人图书馆查看。 |
|