ねこになりたい

おふとんと朝の別れをするのが辛い人向けです。正論で殴らず見守ってあげてください。

Excelマクロ覚書 ~条件分岐編~

図書館で借りてきた某書籍の覚書です。

 

 


【条件を満たすときに処理を行う】

処理によって条件を分けるときは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


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月」ワークシートは存在しません"