- 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一旦判斷成立,則會退出判斷,循環開始下一次成績判斷。看GIF圖黃色的代碼跳轉。
- 上面代碼條件可以改寫為(注意判斷條件的順序),假如將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
結果