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

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

前景提要

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

效果如图:

如果输入正确的三位数123,结果如何呢?

再试下我们输入56656

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

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

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

脚本居然返回位数正确的结果哦,但是我们明明要求的是输入数字啊,三个汉字的长度也是3,这好像是一个BUG啊,其实并不是,这是我们的写法还不够严谨,针对上面的情况我们还需要判断用户输入的是否是数字,这又牵扯到另外一个函数,isnumber(),就是判断括号内的是否为数字的。我们完善下代码

Sub test()Dim NumNum = Application.InputBox("请输入一个三位数的的数字", "输入框", , , , , , 3)If WorksheetFunction.IsNumber(Num) Then result = IIf(Len(Num) = 3, "位数正确!", "位数不正确!") Else MsgBox "您的输入不合法!"End IfMsgBox resultEnd Sub

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

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

代码解析

我们看看完善之后的代码,首先通过我们之前学习过的Application.InputBox创建一个输入框,和用户之间形成一个简单的交互,当得到用户输入的内容之后,我们要去判断输入的是否符合要求,这里我们要求输入的是三位数字,条件有两个,三位,数字,数字我们这里可以直接使用IsNumber()这个函数来判断,具体的用法,我们后面会讲到,如果用户输入的是数字,则执行长度的判断,在判断长度的时候,我们不再通过if.....else......这样的形式来输出结果,我们选择通过IIF函数来进行判断

result = IIf(Len(Num) = 3, "位数正确!", "位数不正确!")

如果长度符合3,那么就返回第一个参数的内容,位数正确,如果长度不为3,则返回第二个参数的结果,位数不正确,简单的一行代码就可以实现之前要写好几行的if判断语句,在一些简单的判断中,IIF函数的效率还是可以的。

今天的知识点,你GET了嘛?

完整代码加注释

Sub test()Dim NumNum = Application.InputBox("请输入一个三位数的的数字", "输入框", , , , , , 3) '构造输入框,形成交互If WorksheetFunction.IsNumber(Num) Then '判断用户输入的是否是数字 result = IIf(Len(Num) = 3, "位数正确!", "位数不正确!") '如果是数字,进一步判断位数是否正确 Else MsgBox "您的输入不合法!"End IfMsgBox resultEnd Sub

总结

==============================================

今天我们主要学习了一个函数就是IIF函数,他是excel中if函数的翻版,在VBA中,在一些简单的判断中,他能够节省我们的代码量,让程序执行的更加的迅速,同时顺带提前接触了下isnumber()这个函数,用来判断是否是数字的,大家可以结合自己的使用场景来练习这个函数,VBA虽然简单,但是还是要经常练习的哦 。

==============================================

本人已经打算长期分享一些网络搜集的各种VBA知识,如果大家有问题也可以提出来共同解决,一起进步,毕竟VBA的世界还是很大的。

(0)

相关推荐

  • Excel函数odd,even,isodd,iseven和9个IS函数

    原创作者 | 李锐 微信公众号 | Excel函数与公式(ID:ExcelLiRui) 微信个人号 | (ID:ExcelLiRui520) 关键字:odd,even,isodd,iseven,is函 ...

  • Isnumber函数+Sumproduct函数+Find函数,模糊条件求和汇总

    Excel情报局 Excel职场联盟 生产搬运分享Excel基础技能 Excel爱好者大本营 用1%的Excel基础搞定99%的职场问题 做一个超级实用的Excel公众号 Excel是门手艺玩转需要勇 ...

  • Excel VBA之日期篇 4.6 临时工结算无烦恼 月末日期是关键

    前景提要 每到年末都是每个公司人员流动比较大的月份,因为这几个月都是人员离职,入职的高峰期,在这样的情况下,公司的某些岗位可能就会出现人手不足的情况,在这样的情况下,一些公司就会不得不招聘一些兼职或者 ...

  • Excel VBA之日期篇 4.5利用身份证获得员工基础信息 甚至籍贯

    场景分析 今天的这些方法,主要集中在员工个人信息方面的一些处理,比方说性别,年龄,出生年月日等,同时顺带分享一个我收藏了好久的大招,籍贯的处理,这个需求是非常的偏门少见的,所以我当初也是百度了很久,翻 ...

  • Excel VBA之日期篇 4.4合同到期时间计算 HR必备方法

    前景提要 今天我们继续来分享一些日期方面的问题,今天公司的HR过来找我,向我请教有没有什么好的方法能够快速的计算出合同到期的时间,他说之前小编虽然分享过一篇关于计算员工在职时间方面的文章,他也看过,但 ...

  • Excel VBA之日期篇 4.3 自定义提醒闹钟 提高工作效率好帮手

    前景提要 昨天我们分享了如何设置一个excel的提醒功能,也是收到了不错的反馈,有很多的童鞋就表示这样的功能虽然是不错,但是并不是很实用,因为在现在的紧张的工作环境中,都非常的强调效率,大多数的公司老 ...

  • Excel VBA之日期篇 4.2重要日程提醒 让你不再手忙脚乱

    前景提要 昨天和大家分享了计算日期之间的差距的方法,相信能够在一定的程度上帮助广大HR工作者在时间计算上面的问题,今天我们继续前进,日期之间的差距等于使用的是日期之间的减法,那么有减法自然会有加法了, ...

  • Excel VBA之日期篇 4.1 在职时间计算 专为HR量身打造

    前景提要 经过了大半个月左右的时间,我们终于完成了VBA函数篇的分享,在函数篇中,我们需要的都是一些非常基础的知识,这些非常基础的知识,可能大家并不是很感兴趣,毕竟能够解决的问题并不是很多,后面我们将 ...

  • Excel VBA入门(六)过程和函数

    前面讲过,VBA代码有两种组织形式,一种就是过程(前面的示例中都在使用),另一种就是函数.其实过程和函数有很多相同之处,除了使用的关键字不同之外,还有不同的是: 函数有返回值,过程没有 函数可以在Ex ...

  • Excel VBA工作薄 6.4番外篇 横列分别计算 vba和函数强强联手

    前景提要 通过昨天的分享,大家对于行列分别计算的场景需求量还是挺大的,我的初衷也是满足大家的日常工作的需求,既然大家有相关方面的需求,关于msgbox这一系列的内容也比较的简单,趁着还有一点余温,我们 ...

  • Excel VBA之函数篇-3.22 轻松转换单元格格式

    前景提要 最近在工作的时候,经常碰到不少的同事跑过来让我帮忙看看单元格的格式之类的修饰问题,其实这也算是大家日常工作中比较常见的操作,因为不同的工作环节不同的要求,就算是相同的数据,大家对于展示上面的 ...

  • Excel VBA之函数篇-3.21简易数字提取法 用的好方便过正则

    前景提要 最近有一些童鞋后台留言反馈,自己在日常的工作中需要做一些数据的提取,手工操作的话,是比较的麻烦并且浪费时间,既然VBA如何强大,是不是有一些比较好的方法呢?小编写了下,还真有一个比较简单的函 ...