6、[VBA入門到放棄筆記]if...end if結構

  • VBA中常用到的判斷就是使用if...end if,掌握了For循環和IF結構就能完成很多事情。
  • 1.[ if....end if ] 結構
if 條件1...條件2.... then '寫if結構時,寫完if就寫end if,這樣不會漏
        代碼
end if

練習1:實現數據篩選。按班級篩選所有數據(高級篩選)

篩選數據
Sub 篩選數據()
    Dim i As Integer, k As Integer
    Dim Class As String
    k = 4 '初始值K=4
    Class = Range("G2").Value '提取的班級
    Range("G5:I100").ClearContents '每次提取不同班級時清除原來的數據,清空一個足夠大的單元格范圍的內容即可
    For i = 2 To 13
        If Cells(i, 1) = Class Then '如果A列中的班級符合條件,那么
            k = k + 1 '符合條件就計算數據條數,第5行開始
            Cells(k, "G") = Cells(i, 1) '提取班級數據到G列
            Cells(k, "H") = Cells(i, 2) '姓名到H列
            Cells(k, "I") = Cells(i, 3) '總分到I列
      End If
   Next
End Sub
Paste_Image.png

  • 2.1 [ if.....else....end if ]結構
if 條件 then
    代碼
else
    代碼
end if
  • 練習2:身份證第17位數,如果為奇數,則是男性,否則是女性。
Sub 身份證號碼判斷男女()
    Dim x As String
    x = "440182199010010617" '身份證號碼
    If Mid(x, 17, 1) Mod 2 = 1 Then 'mid函數提取身份證第17位數字,mod求余數,奇數和2的余數為1,偶數和2的余數為0
        MsgBox "是個摳腳大叔"
    Else
        MsgBox "是個溫柔小妹"
    End If
End Sub

2.2 [ if....elseif.....else....end if ]結構

練習3:判斷成績等級。

Sub 評優() 
    Dim i As Integer
    For i = 2 To 10 
        If Cells(i, 2) >= 90 Then'成績>=90
            Cells(i, 3) = "優秀"
        ElseIf Cells(i, 2) >= 80 And Cells(i, 2) < 90 Then'成績80(含80)以上90以下
            Cells(i, 3) = "良"
        ElseIf Cells(i, 2) >= 70 And Cells(i, 2) < 80 Then
            Cells(i, 3) = "中"
        ElseIf Cells(i, 2) >= 60 And Cells(i, 2) < 70 Then
            Cells(i, 3) = "及格"
        Else
            Cells(i, 3) = "不及格"
        End If
    Next
End Sub
  • if一旦判斷成立,則會退出判斷,循環開始下一次成績判斷??碐IF圖黃色的代碼跳轉。
  • 上面代碼條件可以改寫為(注意判斷條件的順序),假如將Cells(i, 2) >= 80和Cells(i, 2) >= 90兩句代碼的條件和評價結果調換,則會發生錯誤.如韓信的成績是91,第一次判斷91>80,條件成立,則韓信評為‘良’,就不會執行第二句的判斷代碼Cells(i, 2) >= 90??勺孕姓{換代碼測試......
Sub 評優1()
    Dim i As Integer
    For i = 2 To 10
        If Cells(i, 2) >= 90 Then
        Cells(i, 3) = "優秀"
    ElseIf Cells(i, 2) >= 80 Then
        Cells(i, 3) = "良"
    ElseIf Cells(i, 2) >= 70 Then
        Cells(i, 3) = "中"
    ElseIf Cells(i, 2) >= 60 Then
        Cells(i, 3) = "及格"
    Else
        Cells(i, 3) = "不及格"
    End If
Next
End Sub
  • 不好的代碼
Sub 評優1()
    Dim i As Integer
    For i = 2 To 10
        If Cells(i, 2) >= 80 Then
        Cells(i, 3) = "良"
    ElseIf Cells(i, 2) >= 90 Then
        Cells(i, 3) = "優秀"
    ElseIf Cells(i, 2) >= 70 Then
        Cells(i, 3) = "中"
    ElseIf Cells(i, 2) >= 60 Then
        Cells(i, 3) = "及格"
    Else
        Cells(i, 3) = "不及格"
    End If
Next
End Sub

  • 【補充】有時候if語句可以寫成一條
If 1 > 2 Then a = a + 1 Else b = b + 1
If 1 > 2 Then MsgBox False

練習4:按已知的部門匯總.

Paste_Image.png
Sub 求和()
    Dim i As Integer
    Dim S As Integer
    For i = 2 To 5 '遍歷D列的部門,先在A列查找所有的部門1,然后是所有的部門2......
        For j = 2 To 13 '遍歷A列的部門(數據源區域)
            If Cells(j, 1) = Cells(i, "D") Then '如果A列的部門等于D列的部門,那么
                S = S + Cells(j, 2) '同部門累加
            End If
        Next
        Cells(i, "E") = S '遍歷完所有部門后輸出累加的銷售總額到E列
        S = 0 '累加下一個部門,S要清零
    Next
End Sub
結果

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容