前景提要
到現(xiàn)在我們已經(jīng)經(jīng)過(guò)了兩個(gè)系列的學(xué)習(xí),今天我們?nèi)缙诘倪M(jìn)入第三系列,之前也和大家介紹過(guò)了本系列主要是講述一些比較常用的VBA函數(shù),函數(shù)篇學(xué)起來(lái)相對(duì)有點(diǎn)枯燥,因?yàn)樗⒉荒軌蝰R上實(shí)現(xiàn)某種功能,但是大部分的功能都離不開(kāi)各種函數(shù)的配合,同時(shí)一些VBA函數(shù)和excel函數(shù)也是通用的,學(xué)好函數(shù)作用還是很大的,好啦,我們進(jìn)入函數(shù)的第一篇,今天要介紹的就是IIF函數(shù)
函數(shù)說(shuō)明
看到這個(gè)IIF函數(shù),相信很多童鞋都會(huì)認(rèn)為是我打錯(cuò)字了,應(yīng)該是IF,然而并不是這樣的,在VBA中,確實(shí)是有IIF函數(shù)的,而它的功能和excel中的if函數(shù)的功能是相同的,可以簡(jiǎn)單的理解為,IIF就是原來(lái)excel的if,這樣應(yīng)該會(huì)更好理解,格式如下:
IIF("條件","Y","N")
如果條件成立,返回Y,如果不成立,返回N,是不是和excel的if是完全一樣的呢,好了,我們來(lái)看一個(gè)例子。我們綜合我們之前學(xué)習(xí)過(guò)的輸入框,通過(guò)輸入框和用戶(hù)之間進(jìn)行交互的,讓用戶(hù)輸入一個(gè)三位數(shù)的數(shù)字,如果用戶(hù)輸入的是三位數(shù),就返回YES,反之則返回NO。為了不斷得鞏固之前學(xué)習(xí)過(guò)得知識(shí),我們?cè)谥蟮睦又?,盡量新舊知識(shí)點(diǎn)交叉使用,方便大家學(xué)習(xí),理解。
上代碼
Sub test()
Dim Num&
Num = Application.InputBox("請(qǐng)輸入一個(gè)三位數(shù)的的數(shù)字", "輸入框", , , , , , 3)
result = IIf(Len(Num) = 3, "位數(shù)正確!", "位數(shù)不正確!")
MsgBox result
End Sub
效果如圖:
如果輸入正確的三位數(shù)123,結(jié)果如何呢?

再試下我們輸入56656

5位數(shù)了,不符合我們的要求了。
這樣的場(chǎng)景比較常用在登陸頁(yè)面,判斷用戶(hù)輸入的密碼是否達(dá)到我們的要求的位數(shù)等方面。
可能有童鞋在測(cè)試代碼的時(shí)候, 會(huì)輸入三個(gè)中文漢字,如果如何呢?

腳本居然返回位數(shù)正確的結(jié)果哦,但是我們明明要求的是輸入數(shù)字啊,三個(gè)漢字的長(zhǎng)度也是3,這好像是一個(gè)BUG啊,其實(shí)并不是,這是我們的寫(xiě)法還不夠嚴(yán)謹(jǐn),針對(duì)上面的情況我們還需要判斷用戶(hù)輸入的是否是數(shù)字,這又牽扯到另外一個(gè)函數(shù),isnumber(),就是判斷括號(hào)內(nèi)的是否為數(shù)字的。我們完善下代碼
Sub test()
Dim Num
Num = Application.InputBox("請(qǐng)輸入一個(gè)三位數(shù)的的數(shù)字", "輸入框", , , , , , 3)
If WorksheetFunction.IsNumber(Num) Then
result = IIf(Len(Num) = 3, "位數(shù)正確!", "位數(shù)不正確!")
Else
MsgBox "您的輸入不合法!"
End If
MsgBox result
End Sub
再測(cè)試下,我們這里輸入拼音,很明顯程序判斷出來(lái)并不是數(shù)字,不是數(shù)字就不會(huì)去判斷是否為三位這個(gè)條件了,直接跳過(guò)這個(gè)條件,去之后另外一個(gè)條件,彈窗提示我們輸入不合法

到這里,代碼就算是差不多完善了。
代碼解析
我們看看完善之后的代碼,首先通過(guò)我們之前學(xué)習(xí)過(guò)的Application.InputBox創(chuàng)建一個(gè)輸入框,和用戶(hù)之間形成一個(gè)簡(jiǎn)單的交互,當(dāng)?shù)玫接脩?hù)輸入的內(nèi)容之后,我們要去判斷輸入的是否符合要求,這里我們要求輸入的是三位數(shù)字,條件有兩個(gè),“三位”,“數(shù)字”,數(shù)字我們這里可以直接使用IsNumber()這個(gè)函數(shù)來(lái)判斷,具體的用法,我們后面會(huì)講到,如果用戶(hù)輸入的是數(shù)字,則執(zhí)行長(zhǎng)度的判斷,在判斷長(zhǎng)度的時(shí)候,我們不再通過(guò)if.....else......這樣的形式來(lái)輸出結(jié)果,我們選擇通過(guò)IIF函數(shù)來(lái)進(jìn)行判斷
result = IIf(Len(Num) = 3, "位數(shù)正確!", "位數(shù)不正確!")
如果長(zhǎng)度符合3,那么就返回第一個(gè)參數(shù)的內(nèi)容,位數(shù)正確,如果長(zhǎng)度不為3,則返回第二個(gè)參數(shù)的結(jié)果,位數(shù)不正確,簡(jiǎn)單的一行代碼就可以實(shí)現(xiàn)之前要寫(xiě)好幾行的if判斷語(yǔ)句,在一些簡(jiǎn)單的判斷中,IIF函數(shù)的效率還是可以的。
完整代碼加注釋
Sub test()
Dim Num
Num = Application.InputBox("請(qǐng)輸入一個(gè)三位數(shù)的的數(shù)字", "輸入框", , , , , , 3) '構(gòu)造輸入框,形成交互
If WorksheetFunction.IsNumber(Num) Then '判斷用戶(hù)輸入的是否是數(shù)字
result = IIf(Len(Num) = 3, "位數(shù)正確!", "位數(shù)不正確!") '如果是數(shù)字,進(jìn)一步判斷位數(shù)是否正確
Else
MsgBox "您的輸入不合法!"
End If
MsgBox result
End Sub