Excel VBA之函數(shù)篇-3.1-iif函數(shù)

前景提要

到現(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é)果如何呢?

image.png

再試下我們輸入56656

image.png

5位數(shù)了,不符合我們的要求了。

這樣的場(chǎng)景比較常用在登陸頁(yè)面,判斷用戶(hù)輸入的密碼是否達(dá)到我們的要求的位數(shù)等方面。

可能有童鞋在測(cè)試代碼的時(shí)候, 會(huì)輸入三個(gè)中文漢字,如果如何呢?

image.png

腳本居然返回位數(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è)條件,彈窗提示我們輸入不合法

image.png

到這里,代碼就算是差不多完善了。

代碼解析

我們看看完善之后的代碼,首先通過(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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容