VBA中的If-Then-Else語句

2021-01-15 VBA語言專家

今日的內容是「VBA之EXCEL應用」的第六章「條件判斷語句(If...Then...Else)在VBA中的利用」。這套教程從簡單的錄製宏開始講解,一直到窗體的搭建,內容豐富,案例眾多。大家可以非常容易的掌握相關的知識,這套教程面向初學人員,共三冊,十七章,都是我們在利用EXCEL工作過程中需要掌握的知識點,希望大家能掌握利用。

第一節 If...Then...Else語句

大家好,我們再次理解If...Then...Else語句在代碼中的作用,這個語句在VBA代碼中隨處可見,對於VBA而言,條件判斷應用的非常靈活,或者可以說是EXCEL函數的終結者,當你利用VBA上手後,不用再去應用EXCEL函數去解決問題了。

1 If...Then...Else 語句的理解

1)語法:If condition Then [ statements ] [ Else elsestatements ]

或者,可以使用塊格式語法:

If condition Then

[ statements ]

[ ElseIf condition-n Then

[ elseifstatements ]]

[ Else

[ elsestatements ]]

End If

各個參數的作用:

① condition 必需。一個或多個以下兩種類型的表達式:

計算結果為 True 或 False 的數值表達式或字符串表達式。如果condition為Null, 則condition被視為False。

表達式TypeOf objectname Is objecttype。其中Objectname是任何對象引用, objecttype是任何有效的對象類型。 如果objectname是objecttype指定的對象類型, 則表達式為True;否則為false。

② statements 在塊格式中為可選;在沒有Else子句的單行格式中為必需。可以是由冒號分隔的一個或多個語句;在 condition 為 True 時執行。

③ condition-n 可選。 與condition相同。

④ elseifstatements 可選。 如果關聯condition-n為True, 則執行一個或多個語句。

⑤ elsestatements 可選。 如果前一個condition或condition-n表達式為True, 則執行的一個或多個語句。

2)塊格式的If語句必須是行上的第一個語句。語句的Else、ElseIf和End If 組成部分的前面只能有一個行號或行標籤。If塊必須以End If語句結尾。

3)若要確定語句是否為塊, 可以檢查Then關鍵字後面的內容。如果同一行中出現在 Then 後面的內容不是注釋,該語句將被視為單行If語句。

4)Else 和 ElseIf子句都是可選的。一個If塊中可以有任意所需數量的ElseIf子句,但都必須出現在Else子句前面。If塊語句可以嵌套;即,相互包含。

5)在執行 If 塊時,將檢驗condition。如果condition為True,將執行 Then 後面的語句。如果condition為False,將依次計算每個ElseIf條件。找到True條件時,將執行緊跟關聯的Then語句。如果所有ElseIf條件均不為True(或者不存在 ElseIf 子句),則執行 Else後面的語句。執行Then或Else後面的語句後,將繼續執行End If後面的語句。

2 IF Then條件判斷語句的應用

我們看下面的代碼,是一個IF THEN條件判斷語句的應用實例:

Sub mynz() 'IF THEN 條件判斷

Dim myScore As Integer, myResult As String

myScore = Range("A1").Value

If myScore >= 60 Then myResult = "通過"

Range("B1").Value = myResult

End Sub

代碼截圖:

代碼的講解:上述代碼完成一個分數的判斷,分數的值是寫在了A1單元格中,判斷結果寫在了B1單元格中。

1) myScore = Range("A1").Value 這句代碼將分數儲存在了變量myScore中

2)If myScore >= 60 Then myResult = "通過" 這句代碼是用IF THEN語句對分數進行判斷,如果myScore >= 60返回的是true 那麼將執行THEN 後的語句。

如果同一行中出現在 Then 後面的內容不是注釋,該語句將被視為單行If語句。所這裡的語句用的是單行語句,單行語句是不需要END IF 的。如果將上述單行語句改為塊語句可以做如下的改寫:If myScore >= 60 Then

myResult = "通過"

3)Range("B1").Value = myResult 將判斷的結果寫入單元格B1中。

我們在單元中寫入一個數值54,點擊運行:

我們看出,在B1單元格中,沒有結果輸出,這是我們所不希望的。

3 IF Then Else判斷語句的應用

為了實現各種條件的判斷,我們來看下面的代碼:

Sub mynzA() 'IF THEN ELSE條件判斷

Range("B2").Value = ""

myScore = Range("A2").Value

Else

myResult = "失敗"

Range("B2").Value = myResult

代碼的截圖:

代碼解讀:上述代碼利用了IF THEN ELSE來進行多種條件的判斷。

1) If myScore >= 60 Then

當分數值大於或者等於60,那麼返回的結果是"通過"

2)Else

當是其他的情況時,那麼返回的結果是"失敗"

我們在B1單元格中錄入數字59,點擊運行:

這時就出現了返回結果「失敗」了。

今日內容回向:

1) 條件判斷的格式語句有幾種,意義是什麼?

2) 單行條件判斷和多行條件判斷在語法格式上有何不同?

本講內容參考程序文件:工作簿06.xlsm

分享成果,隨喜正能量

VBA的應用範圍及學習方法:

VBA是利用Office實現個人小型辦公自動化的有效手段(工具)。這是我對VBA的應用界定。在取代OFFICE新的辦公軟體沒有到來之前,誰能在數據處理方面做到極致,誰就是王者。其中登峰至極的技能非VBA莫屬!

我記得20年前自己初學VBA時,那時的資料甚少,只能看源碼自己琢磨,真的很難。20年過去了,為了不讓學習VBA的朋友重複我之前的經歷,我根據自己多年VBA實際利用經驗,推出了七部VBA專門教程。

第一套:VBA代碼解決方案 是VBA中各個知識點的講解,教程共147講,覆蓋絕大多數的VBA知識點,提供的程序文件更是一座不可多得的代碼寶庫,是初學及中級人員必備教程;目前這套教程提供的版本是修訂第二版,程序文件通過32位和64位兩種OFFICE系統測試。

第二套:VBA資料庫解決方案 資料庫是數據處理的專業利器,教程中詳細介紹了利用ADO連接ACCDB和EXCEL的方法和實例操作,適合中級人員的學習。目前這套教程提供的是修訂第一版教程,程序文件通過32位和64位兩種OFFICE系統測試。

第三套:VBA數組與字典解決方案 數組和字典是VBA的精華,字典是VBA代碼水平提高的有效手段,值得深入的學習,是初級及中級人員代碼精進的手段。目前這套教程提供的版本是修訂第一版,程序文件通過32位和64位兩種OFFICE系統測試。

第四套:VBA代碼解決方案之視頻 是專門面向初學者的視頻講解,可以快速入門,更快的掌握這門技能。這套教程是第一套教程(修訂一版)的視頻講解,視頻更易接受。

第五套:VBA中類的解讀和利用這是一部高級教程,講解類的虛無與肉身的度化,類的利用雖然較少,但仔細的學習可以促進自己VBA理論的提高。這套教程的領會主要是讀者的領悟了,領悟一種佛學的哲理。目前這套教程提供的版本是修訂第一版,程序文件通過32位和64位兩種OFFICE系統測試。

第六套教程:VBA信息獲取與處理,這是一部高級教程,涉及範圍更廣,實用性更強,面向中高級人員。教程共二十個專題,包括:跨應用程式信息獲得、隨機信息的利用、電子郵件的發送、VBA網際網路數據抓取、VBA延時操作,剪切板應用、Split函數擴展、工作表信息與其他應用交互,FSO對象的利用、工作表及文件夾信息的獲取、圖形信息的獲取以及定製工作表信息函數等等內容。程序文件通過32位和64位兩種OFFICE系統測試。

第七套教程:VBA之EXCEL應用 這是一部初級教程這部教程共三冊,從從創建宏、對話框、工作簿和工作表對象、單元格對象等基礎內容講起,到循環結構、錯誤處理、字符串操作、日期和時間、事件、數組應用,函數過程等方面,一直講解到控制項和窗體對象的應用都是我們提高自己EXCEL水平的必須。

以上各教程學習順序:7→1(或者4)→3→2→6→5。其中第四套是對第一套的視頻講解,所以第一和第四隻選其一即可。

相關焦點

  • VB\VBA\VBS中的if語句以及多重and和or條件用法
    本例所舉例子均在vba代碼窗口中測試過需要的話可以直接複製代碼測試Sub If語句用法()a = Int(Rnd() * 51 + 50) '隨機生成50-100的整數MsgBoxend if的,但then後面的語句需要寫在同一行,如果then後面要運行多個語句可以用冒號(:)連接,如Sub if函數用法()a = Int(Rnd() * 51 + 50)MsgBox aIf a >= 90 Then MsgBox
  • while、for、try except語句中的else
    下面要看的是for,while循環和try異常處理語句中的else的用法。一、for,while循環中的elsefor,while循環中,else用於循環正常結束,且循環體中沒有break、return和異常拋出,則執行else語句塊中的內容。例如,我們判斷列表ls中是否全是奇數。普通情況下,需要引入一個標誌變量allOdd,指示所有變量都是奇數,有偶數出現則將此變量設為False。
  • C語言if else語句
    如果語句塊中只有一個語句,也可以省略{ },例如:if(age>=18) printf("恭喜,你已經成年,可以使用該軟體!\n");else printf("抱歉,你還未成年,不宜使用該軟體!\n");由於if else 語句可以根據不同的情況執行不同的代碼,所以也叫分支結構或選擇結構,上面的代碼中,就有兩個分支。
  • R語言決策結構,if語句,if..else語句
    R如果布爾表達式的值為真(true),則if語句中的代碼塊將被執行。如果布爾表達式的計算結果為假(false),則if語句結束後的第一組代碼(在關閉大括號之後)將被執行。R如果布爾表達式求值為真(true),那麼將執行if語句中的代碼塊,否則將執行else語句中的代碼塊。if...else語句的流程圖如下 -
  • 3.1.2 JavaScript中if-else語句的使用
    JavaScript的if-else語句是if語句的標準形式,在if語句簡單形式的基礎上增加一個else從句,當表達式的值是false時執行else從句中的語句組。2)語句組1:用於指定要執行的語句序列,可以是一條或多條語句。當表達式的值為true時,執行該語句組。3)語句組2:用於指定要執行的語句序列,可以是一條或多條語句。當表達式的值為false時,執行該語句組。
  • Java中我如何去除if...else...語句?
    提前使用靜態代碼塊把對象存入map容器中,在需要的時候在取。他也有提到可以使用DI的方式把需要的對象提前注入好,但是這兩種方式都會造成內存的浪費,因為有一些對象可能是頻繁使用,而有些對象用的概率小甚至一次都沒有用到,那麼這樣的方式是不好的。而且,我們是去除if…else…的語句,這樣的方式雖然好像沒有了if…else…語句,但是本質上並不是最好的方式,只是提供了一種思維方式。
  • Python if else條件語句詳解
    在 Python 中,可以使用 if else 語句對條件進行判斷,然後根據不同的結果執行不同的代碼,這稱為選擇結構或者分支結構。Python 中的 if else 語句可以細分為三種形式,分別是 if 語句、if else 語句和 if elif else 語句,它們的語法和執行流程如表1所示。
  • 在 js 開發中,如何減少 if else 語句的使用
    在 js 開發中,如何減少 if else 語句的使用代碼中嵌套的 if/else 結構往往導致代碼不美觀,也不易於理解。
  • 魅力python——if-elif-else語句
    還是老規矩,我們先舉一個例子:我們規定:百分制裡,優是90分及以上,良是80到90,中是70到80,差是60到70,不及格是60分以下。百分制我們可以自己用if—else語句寫一個小程序,輸入一個分數,顯示成績所屬等級。
  • Python學習筆記:條件語句if、elif與else
    if語句中包含三種條件判斷句式,即if、elif和else。其中,if與elif部分都包含判斷條件,當判斷條件都不成立時,程序才能執行else部分的代碼。if語句最基礎的形式是if-else,其基本語法格式如下。if-else語句常用的參數及說明如表 1所示。
  • switch和if else語句到底用誰
    大家都知道在Java中一共有兩種選擇語句分別是switch與if語句,但究竟什麼時候用?用哪一種好呢?這一直是大家心中的一個小疑慮。現在簡單的回顧switch與if語句的基本構造,再深入了解它們的使用區別。
  • 「Python替代Excel Vba」系列(終):vba中調用Python
    最後,定義一個方法,讓vba調用。如下圖:這個方法的上方套上一個 xlwings 的裝飾器 @xw.func。表示這個方法需要註冊到 Vba 模塊中。而上述命令行只是把這個 xlam 文件放入你的 excel 加載項目錄中而已。然後,在你的任意目錄中打開命令行。執行以下語句,即會生成一個 py 文件和一個 帶宏的 excel 文件。
  • 條件測試語句(2)——if、else搭配使用
    上節練習詳解:上節練習中,我們提到了如果輸入不是C或者F時應該怎麼辦?其實我們完全可以再設置一個條件語句,當我們檢查到輸入不是C或者F時,我們就輸出一個提示錯誤的符號就可以了:在上一講的內容中,我們對if條件語句做了一些基本的介紹。我們經常需要在條件測試通過的時候執行一個操作,並在沒有通過時執行另外一個操作:在這種情況下,我們就可以使用python提供的if-else語句。if—else語句塊類似於簡單的if語句,但是其中的else語句讓我們能夠指定條件未通過時要執行的操作。
  • 《第4章 Python 流程控制語語句》4.2.2 if……else語句!
    《高中信息技術 Python編程》 教學案《第4章 Python 流程控制語語句》4.2.2 if...else語句!(2)if....else...形式語句格式示例:if 要判斷的條件:滿足條件時執行的語句else:不滿足條件時執行的語句注意:else必須配合if使用,而其 else 後不跟條件,else總與離它最近的if進行匹配。if和else語句以及各自的縮進部分是一個完整的代碼塊。
  • 一個新手關於Excel VBA中IF條件判斷語句的學習理解心得
    ,也可以無視,VBA中的IF判斷, 判斷一般起到控制作用,如鄭老師所說,就像一個水管中的控制閥,水來了,一個個的控制閥決定著流水的走向。而整個流程中判斷也的確有著控制流程走向的作用,可以說循環,判斷,數組是vba的三駕馬車,絕大部分的問題都是他們仨來解決的。其中for循環和if是新手最先學到的東西,今天我就來分享一下我這個新手在安裝"閥門"的時候遇到過的坑。
  • Python入門之break和ontinue語句,以及else運用於循環語句
    This is exemplified by the following loop, which searches for prime numbers: 循環語句可以有另一個子句;當循環通過用盡列表( for)或條件變為假(while)時執行,而不是在循環由中斷語句終止時執行。
  • Python條件判斷語句詳解:if、else、switch都有了
    而Python 2中的input()接收的值不轉換為字符串類型,而是保留原始類型,它在Python 3中已經去除。if…elif…else語句是對if…else…語句的補充。當程序的條件分支很多時,可以使用這種語句。if…elif…else語句相當於C、Java中的if…elseif…else語句。該語句的格式如下。
  • 別再用Else語句寫代碼了!
    作者丨Joey Colon 譯者丨核子可樂 策劃丨小智 if…else 語句是許多程式設計師在寫代碼時最常用的方式之一。你甚至可以看到許多程式設計師的代碼中嵌套著無數 else 語句。可這樣,真的好嗎?
  • 程式設計師必備 || 學習Java流程控制「條件語句中『if…else語句...
    >if…else語句是條件語句中最常用的以種形式,它會針對某種條件有選擇的做出處理。}else{若干語句}if後面()內的表達式的值必須是boolean型的。如果表達式的值為true,則執行緊跟if語句的複合語句,如果表達式的值為false,則執行else後面的複合語句。同樣簡單的if條件語句一樣,如果if…else語句的語句序列中只有一條語句(不包括注釋),則可以省略該語句序列外面的「{ }」。
  • [GO語言基礎] 五.順序控制語句和條件控制語句(if、else、switch)
    三.switch分支控制四.編程練習在程序中,程序運行的流程控制決定程序是如何執行的,也是大家必須要掌握的,主要有三大流程控制語句。 else { 執行代碼塊n}說明:先判斷條件表達式1是否成立,如果為True,就執行代碼塊1如果條件表達式1為False,就去判斷條件表達式2是否成立,如果條件表達式2成立,就執行代碼塊2依次類推,如果所有的條件表達式不成立,就執行else語句塊else不是必須的注意:多分支語句只能有一個執行入口