哈羅,大家好,我是星光。話說程序結(jié)構(gòu)有三要素:順序、分支和循環(huán)。'順序'咱們前面章節(jié)講過了,'循環(huán)'下下章咱們會講,'分支'的實現(xiàn)在VBA中主要依靠IF語句……是的,今天就來給大家詳細(xì)聊下IF,聊下它的基本概念、'與'和'或'關(guān)系的實現(xiàn)、同IIF函數(shù)的區(qū)別、小細(xì)節(jié)處理等等。
If 條件表達(dá)式 Then 真結(jié)果 [Else 假結(jié)果]
Sub test1()
Dim strTemp As String
If 2 > 1 Then strTemp = '我愛你' Else strTemp = '我不愛你'
MsgBox strTemp
If Range('A1') = 'VBA' Then MsgBox '我愛VBA'
If VBA.IsNumeric(996) Then MsgBox '恭喜發(fā)財,紅包拿來!'
End Sub
If 條件表達(dá)式 Then
[表達(dá)式成立時執(zhí)行的結(jié)果]
[Else
表達(dá)式不成立時執(zhí)行的結(jié)果]
End If
Sub test2()
If 2 > 1 Then
MsgBox '我愛你'
Else
MsgBox '我不愛你'
End If
End Sub
Sub test3()
If 2 > 1 Then
MsgBox '我愛你'
End If
End Sub
Sub test4()
Dim 得分 As Double
If 得分 >= 80 Then
MsgBox '良好'
ElseIf 得分 >= 60 Then
MsgBox '及格'
Else
MsgBox '不及格'
End If
End Sub
If 條件表達(dá)式 Then
[表達(dá)式成立時執(zhí)行的結(jié)果]
[ElseIf 條件表達(dá)式 Then
ElseIf 表達(dá)式成立時執(zhí)行的結(jié)果]
[Else
所有條件都不滿足時執(zhí)行的結(jié)果]
End If
表達(dá)式1 And 表達(dá)式2 [And 表達(dá)式3……]
Sub test5()
If 2 > 1 And 3 > 2 Then
MsgBox '第一次,你說的對。' '兩個表達(dá)式都成立,結(jié)果返回True
Else
MsgBox '第一次,你說的不對。'
End If
'----------------------
If 2 > 1 And 3 > 4 Then
MsgBox '第二次,你說的對。'
Else
MsgBox '第二次,你說的不對。' '兩個表達(dá)式?jīng)]有都成立,結(jié)果返回False
End If
End Sub
表達(dá)式1 Or 表達(dá)式2
Sub test6()
If 2 > 1 Or 3 > 4 Then
MsgBox '第一次,你說的對。' '兩個表達(dá)式至少一個成立,結(jié)果返回True
Else
MsgBox '第一次,你說的不對。'
End If
'----------------------
If 2 > 3 And 3 > 4 Then
MsgBox '第二次,你說的對。'
Else
MsgBox '第二次,你說的不對。' '兩個表達(dá)式都沒有成立,結(jié)果返回False
End If
End Sub
……
先說一聲:如果你是初學(xué)者,這節(jié)內(nèi)容了解就好,看過就算了。
……
上一節(jié)咱們講了,'與'關(guān)系使用邏輯運算符And。
但從效率來講,這并不是最優(yōu)選擇。這是由于And語句是將每個條件表達(dá)式均計算出結(jié)果后,才能得出最終的結(jié)果。
舉個例子。
Sub test7()
If 2 > 1 And 3 > 2 And 4 > 3 Then
MsgBox '你說的對。'
End If
End Sub
Sub test8()
If 2 > 1 Then
If 3 > 2 Then
If 4 > 3 Then
MsgBox '你說的對。'
End If
End If
End If
End Sub
上述代碼使用了嵌套IF語句,同樣表達(dá)了3個條件的'與'關(guān)系,先判斷是否符合條件1,條件1成立的情況下,再判斷是否符合條件2,條件2成立的情況下,再判斷條件3,如果條件3成立,則返回一個結(jié)果……
這就建立了一個具有層次的篩選機(jī)制,這樣做有什么好處呢?——大大減少了篩選的次數(shù)啊。本來你不管三七二十一,啥情況都需要一次篩選三個表達(dá)式,現(xiàn)在呢?假設(shè)表達(dá)式1未成立,你就不用再篩選另外兩個表達(dá)式了不是?
因此使用這種方式也可以實現(xiàn)'與'關(guān)系的條件判斷,且效率更高。不過需要說明兩個細(xì)節(jié),一個是您應(yīng)該根據(jù)條件成立的占比情況,安排先后判斷層次;另外一個是需要注意End If語句的配套,避免出現(xiàn)'塊 If 沒有 End If'的情況。
同樣的道理,'或'關(guān)系可以使用多層ElseIf語句來實現(xiàn)。
Or語句..▼
Sub test9()
If 2 > 1 Or 3 < 2 Or 4 < 3 Then
MsgBox '你說的對。'
End If
End Sub
Sub test10()
If 2 > 1 Then
MsgBox '你說的對。'
ElseIf 3 < 2 Then
MsgBox '你說的對。'
ElseIf 4 < 3 Then
MsgBox '你說的對。'
End If
End Sub
Sub test11()
Dim b As Boolean
b = False
If 2 > 1 Then
b = True
ElseIf 3 < 2 Then
b = True
ElseIf 4 < 3 Then
b = True
End If
If b Then '判斷上述3個條件是否有任何一個成立
MsgBox '你說的對'
Else
MsgBox '你說的不對。'
End If
End Sub
在VBA有一個類似工作表函數(shù)IF的函數(shù),叫做IIF,也可以起到條件判斷的作用。語法格式如下。
IIF(條件表達(dá)式,真結(jié)果,假結(jié)果)
Sub test12()
Dim s As Variant
s = IIf(2 > 1, '你說的對', 3 / 0)
MsgBox s
End Sub
第3行代碼使用IIf函數(shù)判斷2是否大于1(2>1),條件成立返回字符串'你說的對',否則返回3/0。
代碼運行后系統(tǒng)會彈出以下警告信息。
Sub test13()
Dim s As Variant
If 2 > 1 Then
s = '你說的對。'
Else
s = 3 / 0
End If
MsgBox s
End Sub
聯(lián)系客服