前景提要
到现在我们已经经过了两个系列的学习,今天我们如期的进入第三系列,之前也和大家介绍过了本系列主要是讲述一些比较常用的VBA函数,函数篇学起来相对有点枯燥,因为他并不能够马上实现某种功能,但是大部分的功能都离不开各种函数的配合,同时一些VBA函数和excel函数也是通用的,学好函数作用还是很大的,好啦,我们进入函数的第一篇,今天要介绍的就是IIF函数
函数说明
看到这个IIF函数,相信很多童鞋都会认为是我打错字了,应该是IF,然而并不是这样的,在VBA中,确实是有IIF函数的,而它的功能和excel中的if函数的功能是相同的,可以简单的理解为,IIF就是原来excel的if,这样应该会更好理解,格式如下:
IIF("条件","Y","N")
如果条件成立,返回Y,如果不成立,返回N,是不是和excel的if是完全一样的呢,好了,我们来看一个例子。我们综合我们之前学习过的输入框,通过输入框和用户之间进行交互的,让用户输入一个三位数的数字,如果用户输入的是三位数,就返回YES,反之则返回NO。为了不断得巩固之前学习过得知识,我们在之后的例子中,尽量新旧知识点交叉使用,方便大家学习,理解。
上代码
Sub test()
Dim Num&
Num = Application.InputBox("请输入一个三位数的的数字", "输入框", , , , , , 3)
result = IIf(Len(Num) = 3, "位数正确!", "位数不正确!")
MsgBox result
End Sub
效果如图:
如果输入正确的三位数123,结果如何呢?
再试下我们输入56656
5位数了,不符合我们的要求了。
这样的场景比较常用在登陆页面,判断用户输入的密码是否达到我们的要求的位数等方面。
可能有童鞋在测试代码的时候, 会输入三个中文汉字,如果如何呢?
脚本居然返回位数正确的结果哦,但是我们明明要求的是输入数字啊,三个汉字的长度也是3,这好像是一个BUG啊,其实并不是,这是我们的写法还不够严谨,针对上面的情况我们还需要判断用户输入的是否是数字,这又牵扯到另外一个函数,isnumber(),就是判断括号内的是否为数字的。我们完善下代码
Sub test()
Dim Num
Num = Application.InputBox("请输入一个三位数的的数字", "输入框", , , , , , 3)
If WorksheetFunction.IsNumber(Num) Then
result = IIf(Len(Num) = 3, "位数正确!", "位数不正确!")
Else
MsgBox "您的输入不合法!"
End If
MsgBox result
End Sub
再测试下,我们这里输入拼音,很明显程序判断出来并不是数字,不是数字就不会去判断是否为三位这个条件了,直接跳过这个条件,去之后另外一个条件,弹窗提示我们输入不合法
到这里,代码就算是差不多完善了。
代码解析
我们看看完善之后的代码,首先通过我们之前学习过的Application.InputBox创建一个输入框,和用户之间形成一个简单的交互,当得到用户输入的内容之后,我们要去判断输入的是否符合要求,这里我们要求输入的是三位数字,条件有两个,“三位”,“数字”,数字我们这里可以直接使用IsNumber()这个函数来判断,具体的用法,我们后面会讲到,如果用户输入的是数字,则执行长度的判断,在判断长度的时候,我们不再通过if.....else......这样的形式来输出结果,我们选择通过IIF函数来进行判断
result = IIf(Len(Num) = 3, "位数正确!", "位数不正确!")
如果长度符合3,那么就返回第一个参数的内容,位数正确,如果长度不为3,则返回第二个参数的结果,位数不正确,简单的一行代码就可以实现之前要写好几行的if判断语句,在一些简单的判断中,IIF函数的效率还是可以的。
完整代码加注释
Sub test()
Dim Num
Num = Application.InputBox("请输入一个三位数的的数字", "输入框", , , , , , 3) '构造输入框,形成交互
If WorksheetFunction.IsNumber(Num) Then '判断用户输入的是否是数字
result = IIf(Len(Num) = 3, "位数正确!", "位数不正确!") '如果是数字,进一步判断位数是否正确
Else
MsgBox "您的输入不合法!"
End If
MsgBox result
End Sub