分享

VBA的IIf和If区别与用法

 莫怜飘逸 2023-10-14 发布于广东

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我的个人图书馆查看。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多