今日的內容是「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。其中第四套是對第一套的視頻講解,所以第一和第四隻選其一即可。