VBA中的If-Then-Else語句

2021-01-13 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
  • VBA中的循環語句
    在每日的講解過程中,對大家哪怕是一點點的收穫,我的時間也就是有意義的。今日給大家講VBA的循環語句,這個是非常基礎的知識,在VBA的相關內容中我也一直在用,也在不斷的講解,今日專門作為一個專題給大家詳細的說明,中間也有一些有意思的小例子,供大家玩耍。
  • python條件判斷語句
    後面加上提示輸入的語句,就可以獲取用戶輸入的語句 舉個小例子: 我們輸入123456後按回車,即可成功輸入 起個名字叫demo3 注意: 1.Python中if或者else後面一定要跟:冒號(英文的)
  • 第三篇:JavaScript語句流程控制
    在一個程序執行的過程中,語句的執行順序對程序的結果是有直接影響的。也就是說程序的流程對運行結果有直接的影響。語句流程控制是用來控制程序中各條語句的執行順序,它可以把語句組合成能完成一定功能的代碼段。流程控制方式主要有:順序結構、條件結構和循環結構。
  • 工作中為什麼有必要學點VBA
    從office97開始,VBA作為MS的標準內置配置,彌補了excel內在的基本函數不足以支持的複雜計算,提供了一種相對輕量級的、所見即所得的解決方案,濤哥在21世紀初因內部工作需要(統計代碼行數記工作量)第一次接觸了VBA,並在以後的工作中多次出色的完成相關任務,甚至給濤嫂編的幾個小程序大大提升了她們的工作效率,還受到了時任行長的讚許,現在想來還歷歷在目。
  • python循環控制語句
    循環語句語句後面一定要跟:冒號for循環:1.for…in range()遍歷格式:for i in range(5);或者for i in range( 0,10,3 );格式中的1列印i是從0開始後列印到5結束
  • With語句,提高VBA代碼運行速度的方案
    今日內容是和大家分享VBA編程中常用的 「積木」過程代碼,這些內容大多是取至我編寫的「VBA代碼解決方案」教程中內容。今日分享的是NO.205-NO.205,內容是:NO. 205:在VBA代碼中使用With語句來引用工作表對象或許更快的代碼運行速度VBA過程代碼205:在VBA代碼中使用With語句來引用工作表對象或許更快的代碼運行速度Sub mynz ()
  • VBA中重複操作的神器,Do……Loop循環語句,你值得擁有它
    在上一個章節中我們已經學習集合的循環和數字的循環,那麼有時候我們並不知道我們要具體循環的次數,這個時候For—Next循環就無能為力啦!其實我們還有一種循環可以勝任這個,他就是我們本文要說的Do----Loop循環,這個循環其實在我們其他的程式語言中均有應用。一起來了解一下他。Do...Loop,顧名思義,他的中文意思就是循環的意思,這個非常好理解。
  • Python語言基本語法元素之語句,表達式、賦值語句
    今天筆者想寫Python語言基本語法元素中的語句語句如圖,程序代碼就是一行行語句。語句,簡單粗糙的理解就是一個句子。在中文,語句就是以句號為分界的句子。在程式語言中,語句,就是擁有完整意義的代碼結構。例如:rate = 1.6375 # 1林吉特=1.6375人民幣賦值語句上面是一行代碼,就是一個語句。
  • python循環語句用數據做判斷:布爾值和布爾運算
    --------------------------------------------------------------------------------------else語句最後一種else語句,我們在條件判斷語句見過【else】,其實,else不但可以和if配合使用,它還能跟
  • Javascript之if條件語句和三目運算符
    假設一個場景,在我們的面前有左右兩條路,而我們只能選擇其中的一條,我們無非就兩種選擇,一種是走左邊的路,否則就是走右邊的路,不允許耍賴不走,只能在同一時間選擇一條路,將生活中的這一經驗轉換在js中就是我們今天要學的if條件語句。
  • 使用if-else進行分支的方法已過時,分析多態性和現代方法更合適
    if-else和switch當然可以生成簡潔的代碼,你的軟體不應該由最少的行組成,也不必犧牲可讀性、可維護性或靈活性。在if-then-else語句中使用枚舉的後果是什麼呢?基於離散值的分支會使軟體難以更改。每個新功能都要求跟蹤分支發生的位置,並相應地修改現有代碼。這絕對不是我們想要的方式。
  • Python while循環語句的使用
    本篇介紹Python循環語句的使用,文中主要討論while循環語句,使用while循環語句可以解決程序中需要重複執行的操作,本文講解的每個案例中都配有流程圖和代碼說明。通過本篇的學習,可以達成如下目標。
  • Filter函數和ReDim語句講解,以及VBA中利用動態數組排重的方法一
    大家好,我們今日繼續講解VBA代碼解決方案的第61講內容:在VBA中如何使用動態數組,以及利用動態數組去除重複值的方法。在上一講中我們講了使用數組函數將單元格中的文本進行分隔後寫入到工作表中的方法,那麼問題來了,如果文本中含有大量的重複值,在寫入時也會將重複值寫入到工作表中,此時,如果我們要剔除重複值,該怎麼辦?用VBA的方法該如何做到呢?我在這講和下一講中將解答這個問題,並提供給讀者一個可以測試的實例。今日先講這個內容要用到的知識點。
  • Verilog HDL基礎之:賦值語句和塊語句
    到目前為止,前面所舉的例子中的「always」模塊內的reg型信號都是採用下面的這種賦值方式:b = a;這種方式的賦值並不是馬上執行的,也就是說「always」塊內的下一條語句執行後,b並不等於a,而是保持原來的值。「always」塊結束後,才進行賦值。
  • EXCEL之VBA-For Each……Next 語句的使用方法
    For Each……Next在一個集合或數組中遍歷循環一次,每循環一次都會把當前循環到的對象或元素賦值給變量。然後在每個元素中循環一次,並且將大寫字母A到Z的26個字母賦值給數組裡的26個元素,並且把26個元素讀取出來,連成一串字符在消息框中顯示。這裡是通過Chr轉換函數將相應的數值轉為對應的字母。
  • VBA數組函數、差值的取得以及利用FileCopy語句複製文件
    大家好,今日內容仍是和大家分享VBA編程中常用的簡單「積木」過程代碼,這些內容大多是取至我編寫的「VBA代碼解決方案」教程中內容。NO.176-NO.177容是:NO. 180:在VBA中split和join對數組操作NO. 181:在VBA中查找數組的差集NO. 182:在VBA中使用FileCopy語句複製文件VBA過程代碼180:在VBA中split和join對數組操作 Sub mynz()Dim arr, myst As String
  • 9條消除if……else的錦囊妙計,助你寫出更優雅的代碼
    二、消除if...else的錦囊妙計1、使用註解代碼中之所以要用code判斷使用哪個支付類,是因為code和支付類沒有一個綁定關係,如果綁定關係存在了,就可以不用判斷了。我們先定義一個註解。我們再獲取打了PayCode註解的類,放到一個map中,map中的key就是PayCode註解中定義的value,跟code參數一致,value是支付類的實例。這樣,每次就可以每次直接通過code獲取支付類實例,而不用if...else判斷了。如果要加新的支付方法,只需在支付類上面打上PayCode註解定義一個新的code即可。
  • R語言中的next語句和break語句的具體用法
    在循環結構中我們有時想終止某一次循環,即不再執行這次循環,但還要執行下次循環;還有時我們需要提前結束整個循環,即不再執行循環體中的任何內容了。我們知道在像C語言,C#語言,Java語言中可以分別使用continue語句和break語句來實現,那麼在R語言中也是這樣的嗎?
  • 利用Python基礎代碼語句,實現2G時代文字小遊戲,世界如此簡單!
    3、同上4、如果用戶輸入了其他數字或者文字,那麼默認歸為「else」,輸出後面內容。具體代碼和運行結果如下顯示:四、前面說到給予了玩家選擇的瑞文1300的攻擊力和3000的生命,這不僅僅是說說而已,我們要真正地去賦值。