美文网首页VBA分享专栏
Excel VBA之函数篇-3.1-iif函数

Excel VBA之函数篇-3.1-iif函数

作者: Excel和VBA | 来源:发表于2021-01-12 17:37 被阅读0次

    前景提要

    到现在我们已经经过了两个系列的学习,今天我们如期的进入第三系列,之前也和大家介绍过了本系列主要是讲述一些比较常用的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,结果如何呢?

    image.png

    再试下我们输入56656

    image.png

    5位数了,不符合我们的要求了。

    这样的场景比较常用在登陆页面,判断用户输入的密码是否达到我们的要求的位数等方面。

    可能有童鞋在测试代码的时候, 会输入三个中文汉字,如果如何呢?

    image.png

    脚本居然返回位数正确的结果哦,但是我们明明要求的是输入数字啊,三个汉字的长度也是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
    

    再测试下,我们这里输入拼音,很明显程序判断出来并不是数字,不是数字就不会去判断是否为三位这个条件了,直接跳过这个条件,去之后另外一个条件,弹窗提示我们输入不合法

    image.png

    到这里,代码就算是差不多完善了。

    代码解析

    我们看看完善之后的代码,首先通过我们之前学习过的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
    

    相关文章

      网友评论

        本文标题:Excel VBA之函数篇-3.1-iif函数

        本文链接:https://www.haomeiwen.com/subject/jqseaktx.html