Excelマクロ覚書 ~条件分岐編~
図書館で借りてきた某書籍の覚書です。
- 【条件を満たすときに処理を行う】
- 【条件を満たすときに処理を分岐する】
- 【条件を満たすときに処理を分岐する2】
- 【条件が成立している間は処理を繰り返す】
- 【指定した回数だけ同じ処理を繰り返す】
- 【条件が成立するまで処理を繰り返す】
- 【オブジェクトに対して処理を繰り返す】
【条件を満たすときに処理を行う】
処理によって条件を分けるときはIfステートメントを使う。
入れ子にすることもできるので、複数の条件分岐も可能。
Endの後にIfを書き忘れないよう注意。
If 条件式 Then
処理1
Else
処理2
End If
If Range("G4").Value >= 70 Then 'G4セルが70以上なら'
MsgBox "合格" '「合格」と表示'
Else 'それ以外なら'
MsgBox "不合格" '「不合格」と表示'
End If
【条件を満たすときに処理を分岐する】
複数の分岐条件が必要な場合は、ElseIf以下に条件を記述できる。
If 条件式 Then
処理1
ElseIf
処理2
Else
処理3
End If
If Range("G4").Value >= 70 Then 'G4セルが70以上なら'
MsgBox "合格" '「合格」と表示'
ElseIf Range("G4").Value >= 50 Then 'G4セルが50以上なら'
MsgBox "再試" '「再試」と表示'
Else
MsgBox "不合格" '「不合格」と表示'
End If
【条件を満たすときに処理を分岐する2】
固定値に応じた処理を分岐する場合は、Select Caseステートメントを使う。
Select Case 条件判断の対象
Case 条件式
処理1
Case 条件式
処理2
Case Else
処理3
Dim Age As Long
Age = Range("C4")
Select Case age
Case age >=30 'G4セルが30以上なら'
MsgBox "30代"
Case age >=20 'G4セルが20以上なら'
MsgBox "20代"
Case Else
MsgBox "その他"
End Select
【条件が成立している間は処理を繰り返す】
条件が成立している間だけ繰り返す場合は、Forステートメントを使う。
for カウンタ変数 = 初期値 To 終了値
繰り返す処理
Next
繰り返す処理
Next
Dim i As Long
im Sum As Long
For i = 4 To 8
Sum = Sum + Range("C" & i) .Value
Next
MsgBox "合計額:" & Sum
処理を強制的に抜ける場合はExitステートメントを使う。
Exit 処理対象
Dim i As Long
im Sum As Long
For i = 4 To 8
If Range("C"&i).Value = "" Then
MsgBox "セルC" & i"のデータが入力されていません
Exit Sub
End Sub
Sum = Sum + Range("C" & i) .Value
Next
MsgBox "合計額:" & Sum
【指定した回数だけ同じ処理を繰り返す】
処理を指定した分だけ繰り返す場合は、Do Loopステートメントを使う。
Do While 条件式
繰り返す処理
Loop
Dim i As Long
im Sum As Long
i = 4
Do While Range("C" & i).Value <> "" 'G列が空欄ではない間'
Sum = Sum + Range("C" & i),Value '合計額にCの値を加算'
Loop 'ループ処理'
MsgBox "合計額:" & Sum
【条件が成立するまで処理を繰り返す】
条件が成立するまで処理を繰り返すには、Do Loopステートメントを使う。
Do Until 条件式
繰り返す処理
Loop
Dim i As Long
Dim Sum As Long
i = 4 Do Until Range("C" & i).Value = "" 'C列が空欄になるまで処理を繰り返す'
Sum = Sum + Range("C" & i).Value 'Cに値を加算'
i = i + 1 '次のセルに移動'
Loop '処理をループする'
MsgBox "合計金額:"& Sum
【オブジェクトに対して処理を繰り返す】
全てのワークシートに処理を適用させるなど、オブジェクト単位で繰り返し処理を行う場合はFor Each Nextステートメントを使う。
For Each 要素変数 In 対象
繰り返す処理
Next
Dim i As Long
Dim wK As Worksheet
For Each wK In Worksheets '全てのワークシートを取得する'
If wK.Name = "2019年7月" Then 'ワークシートが2019年7月であるか確認'
wK.Activate
MsgBox "「2019年7月」ワークシートが存在します"
Exit Sub
End If
Next
MsgBox "「2019年7月」ワークシートは存在しません"