
マクロを使い始めたばかりだと、「もっと複雑な処理を自動化したいな…」と思うことがありませんか?
そんな時に役立つのが、今回ご紹介する「条件分岐」と「繰り返し処理」です!

そもそも「条件分岐」と「繰り返し処理」ってなに?

まずは、この2つの基本的な考え方から見ていきましょう。
「条件分岐」とは、「もし〇〇だったら、この処理をしてね」というように、条件によって実行する処理を分けることです。
例えば、「テストの点数が60点以上だったら『合格』、そうじゃなかったら『不合格』と表示する」といった処理がこれにあたります。
一方、
「繰り返し処理」は、同じ処理を何度も自動で実行することです。
たとえば、「100人分の点数をチェックして、全員の合否を判定する」といった場合に、いちいち1人ずつ手作業でマクロを実行していたら大変ですよね。そんなときに、繰り返し処理を使えば、たった一度のマクロ実行で全員分を一気に処理できます。
【入門編】VBAの条件分岐「IF文」の基本を学ぼう
VBAで条件分岐を行うには、主にIF文を使います。

IF文には、いくつかの書き方があるので、それぞれ見ていきましょう。
シンプルなIF文「IF…Then」
最も基本的なIF文です。
「もし〇〇という条件が満たされたら、この処理を実行する」という構文です。
VB.Net
‘ 基本構文
If 条件式 Then 処理
【使用例】
セルA1の値が100だったら、「A1の値は100です」というメッセージを表示するマクロ
VB.Net
Sub SimpleIfStatement()
If Range(“A1”).Value = 100 Then MsgBox “A1の値は100です”
End Sub


もしもに備える「IF…Then…Else」
「もし〇〇だったらこの処理、そうじゃなかったら(それ以外なら)別の処理」というように、2つの選択肢を用意する時に使います。
VB.Net
‘ 基本構文
If 条件式 Then
条件を満たした時の処理
Else
条件を満たさなかった時の処理
End If
【使用例】
先ほどの例に、「そうじゃなかったら」の処理を追加してみましょう。
VB.Net
Sub IfElseStatement()
If Range(“A1”).Value = 100 Then
MsgBox “A1の値は100です”
Else
MsgBox “A1の値は100ではありません”
End If
End Sub


複数の条件を判定する「IF…Then…ElseIf…Else」
条件が3つ以上ある場合は、ElseIfを使って条件をどんどん追加できます。
VB.Net
‘ 基本構文
If 条件式1 Then
条件1を満たした時の処理
ElseIf 条件式2 Then
条件2を満たした時の処理
Else
すべての条件を満たさなかった時の処理
End If
【使用例】
テストの点数に応じて評価を変えるマクロです。
VB.Net
Sub TestScoreEvaluation()
Dim score As Integer
score = Range(“A2”).Value
If score >= 80 Then
Range(“B2”).Value = “優”
ElseIf score >= 60 Then
Range(“B2”).Value = “良”
Else
Range(“B2”).Value = “可”
End If
End Sub


IF文に必須!比較演算子を使いこなそう
IF文の「条件式」には、必ず比較演算子を使います。

これは、2つの値を比較して、その結果が正しいか(True)または正しくないか(False)を判定するための記号です。
演算子 | 意味 | 例文 |
---|---|---|
= | 等しい | A = 10 |
<> | 等しくない | B <> “Hello” |
> | より大きい | C > 50 |
< | より小さい | D < 10 |
>= | 以上 (より大きいか、等しい) | E >= 60 |
<= | 以下 (より小さいか、等しい) | F <= 100 |
【実践編】IF文を使ってテストの合否を判定しよう

ここからは、実際に表を使ってマクロを作成してみましょう。
以下のテスト結果の表があります。

この表の点数を見て、60点以上だったら「合格」、60点未満だったら「不合格」と、C列に入力するマクロを作ります。
VB.Net
Sub PassFailJudge()
‘ 点数が入力されているセル(B2)を取得
Dim score As Integer
score = Range(“B2”).Value
‘ IF文で合否を判定し、結果をC2に入力
If score >= 60 Then
Range(“C2”).Value = “合格”
Else
Range(“C2”).Value = “不合格”
End If
End Sub

このマクロを実行すると、田中さんの点数(75点)を見て、C2セルに「合格」と表示されます。

しかしこのままでは、他の人の合否を判定するには、手動でセルの指定(Range(“B2”)の部分)を変えなければいけません。

ここで登場するのが「繰り返し処理」です!
【応用編】繰り返し処理でマクロを自動化!

同じ処理を何度も行う時に、繰り返し処理は欠かせません。VBAにはいくつかの繰り返し処理がありますが、ここではよく使われる2つをご紹介します。
決まった回数繰り返す「For Next文」
「〇〇回、この処理を繰り返してね」と、繰り返す回数を指定する時に使います。
VB.Net
‘ 基本構文
For カウンター変数 = 開始値 To 終了値
繰り返したい処理
Next カウンター変数
先ほどの合否判定マクロを、このFor Next文を使って修正してみましょう。
5人分のデータを自動で処理できるようにします。
VB.Net
Sub PassFailJudgeLoop()
‘ 行を数えるための変数
Dim i As Integer
‘ 2行目から6行目まで繰り返す
For i = 2 To 6
‘ i行目のB列(点数)を取得
Dim score As Integer
score = Cells(i, “B”).Value
‘ IF文で合否を判定し、i行目のC列に入力
If score >= 60 Then
Cells(i, “C”).Value = “合格”
Else
Cells(i, “C”).Value = “不合格”
End If
Next i
End Sub

このコードを実行すると、iが2から始まり、6になるまで、5回繰り返します。
- i = 2:2行目のデータを処理
- i = 3:3行目のデータを処理
- i = 4:4行目のデータを処理
- i = 5:5行目のデータを処理
- i = 6:6行目のデータを処理


このように、iという変数が自動的に増えていくことで、1人ずつ手作業で指定しなくても、全員の合否を自動判定することができます!
条件が満たされるまで繰り返す「Do Loop文」
「〇〇という条件が満たされるまで、この処理を繰り返してね」と、繰り返す回数ではなく、終了する条件を指定する時に使います。
VB.Net
‘ 基本構文
Do While 条件式
繰り返したい処理
Loop
または
VB.Net
Do
繰り返したい処理
Loop While 条件式
など、いくつかの書き方があります。
【使用例】
データが入力されている最後の行まで合否判定を繰り返すマクロです。
VB.Net
Sub PassFailJudgeDoLoop()
‘ 行を数えるための変数
Dim i As Integer
i = 2 ‘ 2行目からスタート
‘ B列の値が空になるまで繰り返す
Do While Cells(i, “B”).Value <> “”
‘ IF文で合否を判定し、i行目のC列に入力
If Cells(i, “B”).Value >= 60 Then
Cells(i, “C”).Value = “合格”
Else
Cells(i, “C”).Value = “不合格”
End If
‘ 次の行へ移動
i = i + 1
Loop
End Sub

このマクロのポイントは、i = i + 1 という部分です。


繰り返し処理が終わるたびにiの値を1ずつ増やし、次の行へ移動するように指示しています。これにより、データが続く限り自動で処理を実行し、最後に空のセルにたどり着いた時に処理が終了します。
まとめ

今回は、VBAの条件分岐(IF文)と繰り返し処理(For Next文、Do Loop文)について解説しました。
この知識を活かせば、手作業でやっていた面倒なデータ処理を、一瞬で終わらせることができるようになりますよ。
VBAお勧め本9選

これからVBAの勉強をしていきたい方やVBAを業務で使ってレベルを上げていきたい方などレベル別にお勧めの本を9つご紹介しています!
気になる方は下記の記事をご覧ください!
コメント