二維碼 購物車
部落窩在線教育歡迎您!

VBA實戰(zhàn)入門教程(四):判斷語句

?

作者:E圖表述來源:部落窩教育發(fā)布時間:2020-05-21 17:02:13點擊:4323

分享到:
0
收藏    收藏人氣:0人
版權(quán)說明: 原創(chuàng)作品,禁止轉(zhuǎn)載。

編按:

哈嘍,大家好!今天是第四篇VBA實戰(zhàn)入門教程,我們將給大家?guī)鞻BA中最常見語句之一,判斷語句。典型的判斷語句有2種,分別是IF判斷語句和SELECT判斷語句。趕緊來看看吧!

 

【前言】

 

上一篇的循環(huán)語句同學們都學會了嗎?如果沒有學會,那就需要再給自己一些壓力,因為有可能你又一次輸給了其他人。人生就是這樣,短短幾十年,恍惚即過,你可以一直以“沒時間”、“記不住”為借口哄騙自己,也可以“對自己狠一些”,反正最后的結(jié)果無論好與壞,都需要自己面對。

 

無論你有沒有學會,下面又有一個重要的EXCEL VBA語句即將登場,為什么來的如此之快,因為它是“循環(huán)語句”的CP——“判斷語句”,工作實戰(zhàn)中有了“循環(huán)”必見“判斷”!

 

【正文】

 

在日常工作中,我們往往需要在眾多的“對象集”中遍歷每一個對象,從而達到處理數(shù)據(jù)的結(jié)果,無論是EXCEL、ACCESSERP都是如此,即便像高級語言PYTHON、JAVA也同樣會有循環(huán)語句結(jié)構(gòu),這就是關(guān)系型數(shù)據(jù)的處理特點。但是我們在循環(huán)的過程中,因為各種需求的不同,所以不是所有的數(shù)據(jù)內(nèi)容都是我們需要的。

 

那就要對每一行數(shù)據(jù)條進行甄別,讓計算機代替我們判斷,是需要的則處理,不需要的就PASS。

 


一、IF判斷語句

 


其實大家對判斷語句應該并不陌生,因為工作表函數(shù)中就有IF判斷函數(shù),如此的經(jīng)典,VBA又豈能放過。

 

1.用一個小案例認識IF判斷語句

 

示例1)需求,判斷身份證號的位數(shù)是否正確。

 

 

如果看到這樣的一組號碼,不考慮號碼的信息正誤,只看位數(shù),你很難知道它是否是18位,那么此時用代碼來處理,就顯得很方便了,如下:

 

Sub 判斷身份證號位數(shù)正誤()

  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判斷語句”作為代碼中引用對象的統(tǒng)一父級對象;

Line2規(guī)定循環(huán)變量i的范圍為210,因為我們是遍歷單元格,逐行判斷,所以循環(huán)變量應該以單元格的行號作為循環(huán)依據(jù),所以是ROW2ROW10;

Line3Cells(i, 1)說明是某一行和第一列的交點單元格,當i變量為2,3,4,10時,對應的單元格地址就是A2A3,A4,,A10。用LEN函數(shù)提取單元格字符串的長度,判斷是否等于18

Line4如果判斷條件滿足,則Cells(i, 2)對應的B列單元格中輸入“18位”;

Line5判斷語句的結(jié)束語句;

Line6循環(huán)語句的結(jié)束語句;

Line7With語句的結(jié)束語句。

 

2.IF判斷語句的語法


從上面的示例1我們可以看出,當判斷條件滿足時,返回對應的結(jié)果,但卻留下了很多空單元格。下面我們就正式的了解一下IF判斷函數(shù)的語法,如下:

 

 

這就是IF判斷語句的完整語法,和IF函數(shù)一樣,當滿足某一級判斷時,返回相應結(jié)果,并跳出此次判斷。這其中的ElseIF語句,就相當于IF函數(shù)的嵌套使用,Else就相當于IF函數(shù)的False_value。

 

3.通過案例學會IF判斷語句

 

處于實戰(zhàn)的考慮,我們繼續(xù)看兩個案例,幫助大家能夠更好地了解IF判斷語句的用法,如下:

 

示例2)需求,判斷A列數(shù)值的奇偶性。代碼如下:

 

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使用工作表“奇偶性”作為代碼中引用對象的統(tǒng)一父級對象;

Line2使用單元格End屬性和Row屬性,找到數(shù)據(jù)范圍末行的行號,并賦值給變量a;

Line3規(guī)定循環(huán)變量i的循環(huán)范圍是2a,循環(huán)每一行數(shù)據(jù)(不含表頭);

Line4判斷單元格Cellsi,1)第一列每一個單元格,除以2求余(Mod函數(shù))是否等于0

Line5如果等于0,則對應的Cellsi2)單元格,賦值“偶”;

Line6Else,不滿足上面條件的情況時;

Line7則對應的Cellsi,2)單元格,賦值“奇”;

Line8判斷語句的結(jié)束語句;

Line9循環(huán)語句的結(jié)束語句;

Line10With語句的結(jié)束語句。

 

小知識


Mod函數(shù),在工作表函數(shù)中也有它的身影,但是在EXCEL VBA中它的語法有些不同,教同學們一個記住它的方法:在VBA中你可以把它理解為一個“運算符號”,例如4/56*8、21-6這樣的算式,求余就是235 Mod 62,表示235除以62的余數(shù)。

 

示例3)需求,按照制度,制作每個人的提成。

 

不要覺得我們一直在講基礎,對于VBA來說,沒有絕對的基礎,漏掉哪一個環(huán)節(jié)都有可能讓你使用VBA的過程不順暢。我們現(xiàn)在就利用判斷語句,解決一個同學們工作中的實際問題。

 

 

數(shù)據(jù)源就不用多說了,作者E圖表述在以往的文章中說過很多了,包括區(qū)間的寫法。下面直入正題,代碼如下:

 

Sub 提成計算()

  With Sheets("計算提成")

    a = .Range("A1").End(4).Row

    For i = 2 To a

      If .Cells(i, 3) < 100 Then

        .Cells(i, 4) = "銷售額*85%*1%"

        .Cells(i, 5) = .Cells(i, 3) * 0.85 * 0.01

      ElseIf .Cells(i, 3) >= 100 And .Cells(i, 3) < 200 Then

        .Cells(i, 4) = "銷售額*85%*2%"

        .Cells(i, 5) = .Cells(i, 3) * 0.85 * 0.02

      ElseIf .Cells(i, 3) >= 200 And .Cells(i, 3) < 500 Then

        .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判斷語句最全的寫法了,基本涵蓋了所有和判斷語句有關(guān)的內(nèi)容。介于篇幅,也考慮到同學們需要有思考的空間,上面這段代碼,就不給出代碼解析的過程,正題思路就是一個IFIFIF))的嵌套使用。

 

小知識


如果有兩個條件都需要滿足,我們可以使用AND,依然和IF工作表函數(shù)一樣的用法,但是不一樣的是語法為“條件1 AND 條件2 AND 條件N”;如果是多條件取其一,就用OR,“條件1 OR 條件2 OR 條件N”;如果是更加復雜的情況,如:(條件1 AND 條件2OR 條件3,意思就是條件1和條件2都滿足,或者只有條件3獨立滿足。這個邏輯過程,可以舉一反三。

 

 

二、SELECT判斷語句

 

 

因為IF函數(shù)已深入人心,所以我們開篇就講解了IF判斷語句,其實在EXCEL VBA中還有另一種判斷語句的寫法,就是SELECT判斷語句,語法如下:

 

 

我們看一個案例說明問題,考勤統(tǒng)計:

 

 

不考慮曠工和漏打卡的情況,這個案例單純的就為了說明SELECT判斷語句的用法,代碼如下:

 

Sub 遲到早退()

  With Sheets("考勤")

    a = .[C1].End(4).Row

    i = 2

    Do While i <= a

      Select Case .Cells(i, 4)

        Case Is <= TimeSerial(8, 0, 0)

          .Cells(i, 5) = "上午正常"

        Case Is <= TimeSerial(12, 0, 0)

          .Cells(i, 5) = "上午遲到"

        Case Is < TimeSerial(17, 0, 0)

          .Cells(i, 5) = "下午早退"

        Case Else

          .Cells(i, 5) = "下午正常"

      End Select

      i = i + 1

    Loop

  End With

End Sub

 

 

【代碼解析】

 

Line1引用“考勤”工作表為整體父級對象;

Line2確定末行的行號,并賦值給a變量;

Line3確定Do While的循環(huán)變量i的初始值為2(從工作表的第2行開始);

Line4給定循環(huán)的條件,不能超過最大數(shù)據(jù)范圍a;

Line5確定Select Case的判斷條件是.Cellsi,4)單元格的時間內(nèi)容;

Line6逐條判斷Case Is給定的條件,滿足則執(zhí)行相關(guān)語句命令行,并跳轉(zhuǎn)到End Select;如果不滿足,則執(zhí)行下一個Case Is條件;

……;

Line15循環(huán)變量加1(進行下一次循環(huán));

Line16循環(huán)語句的結(jié)束語句;

Line17With語句的結(jié)束語句。

 

整體的思路和IF判斷語句是一樣的,作者E圖表述,還是希望大家多看看IF判斷,畢竟寫法上和我們?nèi)粘@斫獾?span>IF很像,寫代碼時的思路更好梳理。

 

【編后語】

 

判斷語句就先講到這里了,當然有的同學會說,判斷里面還有一種IIF的寫法,基本和工作表函數(shù)的IF函數(shù)一致,但是不適合寫比較復雜的條件過程,所以此處略過,只是上面的內(nèi)容,就足夠大家日常使用了。還等什么,“留言”、“在看”、“關(guān)注”、“分享”一個不落的一波操作走起。

 

本文配套的練習課件請加入QQ群:1043683754下載。

Excel高手,快速提升工作效率,部落窩教《一周Excel直通車》視頻和《Excel極速貫通班》直播課全心為你!

掃下方二維碼關(guān)注公眾號,可隨時隨地學習Excel

IMG_256

相關(guān)推薦:

VBA基礎教程③《VBA實戰(zhàn)入門教程(三):循環(huán)語句

VBA基礎教程②《VBA系列基礎教程(二):使用RANGE對象實現(xiàn)單元格偏移及確定首末行列號》

VBA基礎教程①《VBA系列基礎教程(一):excel中最常使用的對象——RANGE

VBA制作疫情地圖《用excel制作全國動態(tài)疫情地圖(VBA篇)》