編按:哈嘍,大家好!今天是第四篇VBA實戰入門教程,我們將給大家帶來VBA中最常見語句之一,判斷語句。典型的判斷語句有2種,分別是IF判斷語句和SELECT判斷語句。學習更多技巧,請收藏關注部落窩教育excel圖文教程。
【前言】
上一篇的循環語句同學們都學會了嗎?如果沒有學會,那就需要再給自己一些壓力,因為有可能你又一次輸給了其他人。人生就是這樣,短短幾十年,恍惚即過,你可以一直以「沒時間」、「記不住」為藉口哄騙自己,也可以「對自己狠一些」,反正最後的結果無論好與壞,都需要自己面對。
無論你有沒有學會,下面又有一個重要的EXCEL VBA語句即將登場,為什麼來的如此之快,因為它是「循環語句」的CP——「判斷語句」,工作實戰中有了「循環」必見「判斷」!
【正文】
在日常工作中,我們往往需要在眾多的「對象集」中遍歷每一個對象,從而達到處理數據的結果,無論是EXCEL、ACCESS、ERP都是如此,即便像高級語言PYTHON、JAVA也同樣會有循環語句結構,這就是關係型數據的處理特點。但是我們在循環的過程中,因為各種需求的不同,所以不是所有的數據內容都是我們需要的。
那就要對每一行數據條進行甄別,讓計算機代替我們判斷,是需要的則處理,不需要的就PASS。
一、IF判斷語句
其實大家對判斷語句應該並不陌生,因為工作表函數中就有IF判斷函數,如此的經典,VBA又豈能放過。
1.用一個小案例認識IF判斷語句
(示例1)需求,判斷身份證號的位數是否正確。
如果看到這樣的一組號碼,不考慮號碼的信息正誤,只看位數,你很難知道它是否是18位,那麼此時用代碼來處理,就顯得很方便了,如下:
Sub 判斷身份證號位數正誤()
With Sheets("IF判斷語句")
For i = 2 To 10
If Len(.Cells(i, 1)) = 18 Then
.Cells(i, 2) = "18位"
End If
Next i
End With
End Sub
【代碼解析】
Line1:使用工作表「IF判斷語句」作為代碼中引用對象的統一父級對象;
Line2:規定循環變量i的範圍為2到10,因為我們是遍歷單元格,逐行判斷,所以循環變量應該以單元格的行號作為循環依據,所以是ROW2到ROW10;
Line3:Cells(i, 1)說明是某一行和第一列的交點單元格,當i變量為2,3,4,…,10時,對應的單元格地址就是A2,A3,A4,…,A10。用LEN函數提取單元格字符串的長度,判斷是否等於18;
Line4:如果判斷條件滿足,則Cells(i, 2)對應的B列單元格中輸入「18位」;
Line5:判斷語句的結束語句;
Line6:循環語句的結束語句;
Line7:With語句的結束語句。
2.IF判斷語句的語法
從上面的示例1我們可以看出,當判斷條件滿足時,返回對應的結果,但卻留下了很多空單元格。下面我們就正式的了解一下IF判斷函數的語法,如下:
這就是IF判斷語句的完整語法,和IF函數一樣,當滿足某一級判斷時,返回相應結果,並跳出此次判斷。這其中的ElseIF語句,就相當於IF函數的嵌套使用,Else就相當於IF函數的False_value。
3.通過案例學會IF判斷語句
處於實戰的考慮,我們繼續看兩個案例,幫助大家能夠更好地了解IF判斷語句的用法,如下:
(示例2)需求,判斷A列數值的奇偶性。代碼如下:
Sub 奇偶性()
With Sheets("奇偶性")
a = .[A1].End(4).Row
For i = 2 To a
If .Cells(i, 1) Mod 2 = 0 Then
.Cells(i, 2) = "偶"
Else
.Cells(i, 2) = "奇"
End If
Next i
End With
End Sub
【代碼解析】
Line1:使用工作表「奇偶性」作為代碼中引用對象的統一父級對象;
Line2:使用單元格End屬性和Row屬性,找到數據範圍末行的行號,並賦值給變量a;
Line3:規定循環變量i的循環範圍是2到a,循環每一行數據(不含表頭);
Line4:判斷單元格Cells(i,1)第一列每一個單元格,除以2求餘(Mod函數)是否等於0;
Line5:如果等於0,則對應的Cells(i,2)單元格,賦值「偶」;
Line6:Else,不滿足上麵條件的情況時;
Line7:則對應的Cells(i,2)單元格,賦值「奇」;
Line8:判斷語句的結束語句;
Line9:循環語句的結束語句;
Line10:With語句的結束語句。
小知識
Mod函數,在工作表函數中也有它的身影,但是在EXCEL VBA中它的語法有些不同,教同學們一個記住它的方法:在VBA中你可以把它理解為一個「運算符號」,例如4/5、6*8、21-6這樣的算式,求餘就是235 Mod 62,表示235除以62的餘數。
(示例3)需求,按照制度,製作每個人的提成。
不要覺得我們一直在講基礎,對於VBA來說,沒有絕對的基礎,漏掉哪一個環節都有可能讓你使用VBA的過程不順暢。我們現在就利用判斷語句,解決一個同學們工作中的實際問題。學習更多技巧,請收藏關注部落窩教育excel圖文教程。
數據源就不用多說了,作者E圖表述在以往的文章中說過很多了,包括區間的寫法。下面直入正題,代碼如下:
Sub 提成計算()
With Sheets("計算提成")
a = .Range("A1").End(4).Row
For i = 2 To a
If .Cells(i, 3)
.Cells(i, 4) = "銷售額*85%*1%"
.Cells(i, 5) = .Cells(i, 3) * 0.85 * 0.01
ElseIf .Cells(i, 3) >= 100 And .Cells(i, 3)
.Cells(i, 4) = "銷售額*85%*2%"
.Cells(i, 5) = .Cells(i, 3) * 0.85 * 0.02
ElseIf .Cells(i, 3) >= 200 And .Cells(i, 3)
.Cells(i, 4) = "銷售額*85%*3%"
.Cells(i, 5) = .Cells(i, 3) * 0.85 * 0.03
Else
.Cells(i, 4) = "銷售額*80%*8%"
.Cells(i, 5) = .Cells(i, 3) * 0.8 * 0.08
End If
Next i
End With
End Sub
這算是IF判斷語句最全的寫法了,基本涵蓋了所有和判斷語句有關的內容。介於篇幅,也考慮到同學們需要有思考的空間,上面這段代碼,就不給出代碼解析的過程,正題思路就是一個IF(IF(IF))的嵌套使用。
小知識
如果有兩個條件都需要滿足,我們可以使用AND,依然和IF工作表函數一樣的用法,但是不一樣的是語法為「條件1 AND 條件2 AND 條件N」;如果是多條件取其一,就用OR,「條件1 OR 條件2 OR 條件N」;如果是更加複雜的情況,如:(條件1 AND 條件2) OR 條件3,意思就是條件1和條件2都滿足,或者只有條件3獨立滿足。這個邏輯過程,可以舉一反三。
二、SELECT判斷語句
因為IF函數已深入人心,所以我們開篇就講解了IF判斷語句,其實在EXCEL VBA中還有另一種判斷語句的寫法,就是SELECT判斷語句,語法如下:
我們看一個案例說明問題,考勤統計:
不考慮曠工和漏打卡的情況,這個案例單純的就為了說明SELECT判斷語句的用法,代碼如下:
Sub 遲到早退()
With Sheets("考勤")
a = .[C1].End(4).Row
i = 2
Do While i
Select Case .Cells(i, 4)
Case Is
.Cells(i, 5) = "上午正常"
Case Is
.Cells(i, 5) = "上午遲到"
Case Is
.Cells(i, 5) = "下午早退"
Case Else
.Cells(i, 5) = "下午正常"
End Select
i = i + 1
Loop
End With
End Sub
【代碼解析】
Line1:引用「考勤」工作表為整體父級對象;
Line2:確定末行的行號,並賦值給a變量;
Line3:確定Do While的循環變量i的初始值為2(從工作表的第2行開始);
Line4:給定循環的條件,不能超過最大數據範圍a;
Line5:確定Select Case的判斷條件是.Cells(i,4)單元格的時間內容;
Line6:逐條判斷Case Is給定的條件,滿足則執行相關語句命令行,並跳轉到End Select;如果不滿足,則執行下一個Case Is條件;
……;
Line15:循環變量加1(進行下一次循環);
Line16:循環語句的結束語句;
Line17:With語句的結束語句。
整體的思路和IF判斷語句是一樣的,作者E圖表述,還是希望大家多看看IF判斷,畢竟寫法上和我們日常理解的IF很像,寫代碼時的思路更好梳理。
【編後語】
判斷語句就先講到這裡了,當然有的同學會說,判斷裡面還有一種IIF的寫法,基本和工作表函數的IF函數一致,但是不適合寫比較複雜的條件過程,所以此處略過,只是上面的內容,就足夠大家日常使用了。學習更多技巧,請收藏關注部落窩教育excel圖文教程。
****部落窩教育-excel判斷語句應用基礎****
原創:E圖表述/部落窩教育(未經同意,請勿轉載)
更多教程:部落窩教育
微信公眾號:exceljiaocheng