第4回 VBA学習 〜ForNext文、DoLoop文(繰り返し処理)〜

プログラミング

プログラムは大きく2つの要素で成り立っています。

  • 条件分岐(IF文)
  • 繰り返し処理(For文、DoLoop文など)

今回はそのうちの1つである「繰り返し処理」について学習していきます。

繰り返し処理とは?

繰り返し処理とは何か?

言葉の如く数回繰り返す処理のことです。

同じ処理を繰り返すことで自動化を実現しているのです。

前回の条件分岐と繰り返し処理を組み合わせることで無限大のプログラムを作成可能になります。

僕の知っている限りでは全てのプログラムの基本となっています。

繰り返し処理の種類

VBAにはいくつかの繰り返し処理文が存在しています。

表にまとめるとこのような形になります。

※僕の個人的な意見と偏見で表にしていますので注意ください。

ループの種類簡易説明
ForNext繰り返す回数を指定する
DoLoop繰り返す条件を指定する
ForEach配列やコレクションのグループ要素に対して繰り返す

ForNext文の書き方

基本的な形はこちらになります。

For 変数 = 開始数値 To 終了数値
    処理
Next

例文を記述しておきます。

Sub EX_ForNext()
    Dim i As Long
    For i = 1 To 5
        Cells(i, 1) = i
    Next i
End Sub

この例文では、1〜5まで繰り返し処理が実施されます。

iの値が繰り返し処理するたびに1ずつ増えていきます。

よって実施結果は、セルA1〜A5に1〜5の数値が入ります。

表にするとこのようになります。

行数入力値
11
22
33
44
55

DoLoop文の書き方

DoLoop文は2種類の条件式があります。

構文意味
While条件を満たす間、処理を実行します。
Until条件を満たす迄、処理を実行します。

そして条件式を書く場所は先頭行に書くことのほかに

Loop文後に描くことも可能です。

Do [While 条件式]
    処理
Loop
Do [Until 条件式]
    処理
Loop
Do
    処理
Loop [While 条件式]
Do
    処理
Loop [Until 条件式]

DoLoop文の注意点は条件式を正しく設定しないと無限ループを起こします。

使用時は必ず条件式を設定しループを抜けれらるようにしましょう。

他にもExitDoというやり方もあります。

Do
   Exit Do
Loop

ExitDoを入れると強制的に抜けることができます。

例題ではForNext文と同じ処理を行わせています。

Sub EX_DoLoop1()
    Dim i As Long
    i = 1
    Do While i <= 5
        Cells(i, 1) = i
        i = i + 1
    Loop
End Sub
Sub EX_DoLoop2()
    Dim i As Long
    i = 1
    Do Until i > 5
        Cells(i, 1) = i
        i = i + 1
    Loop
End Sub
Sub EX_DoLoop3()
    Dim i As Long
    i = 1
    Do
        If i = 6 Then
            Exit Do
        End If

        Cells(i, 1) = i
        i = i + 1
    Loop
End Sub

EX_DoLoop3では変数[ i ]が6になったらループを抜けると記述しています。

これにより5回目まではセルに書き込まれていましたが6回目はセルに書き込まれません。

ForEach文の書き方

このForEachはForNext文やDoLoop文とは少し違います。

上級者向けの繰り返し処理と思っていて問題ないです。

Dim 変数 As Variant
For Each 変数 In 配列やコレクションのグループ名
    処理
Next 変数

例えば、For文で記述したA列のセル範囲の値をB列にも入れることができます。

Sub EX_ForEach1()
    For Each i In Range("A1:A5") 
        Cells(i.Row, 2) = i
    Next i
End Sub

他にもこの後学習予定の配列の処理にも使えます。

Sub EX_ForEach2()
    Dim states As Variant
    states = Array("カリフォルニア", "マイアミ", "ニューヨーク", "テキサス")

    Dim state As Variant
    For Each state In states
        Debug.Print state
    Next state
End Sub

条件式の作り方(比較演算子)

この条件式の作り方は、IF文と同じです。

種類は表にまとめておきます。

比較演算子意味
=等しい
<>等しくない
>より大きい
>=以上
<より小さい
<=以下

基本的には[=]を完璧に覚えておいて、[>]または[<]を軽く覚える程度でいいと思います。

繰り返し処理は、基本はForNext文だけ使用できればいいです。

必要に駆られてから学んでもいいと思います。

まとめ

繰り返し処理にはいくつか種類があって覚えられない、理解できない!ってすごく分かります。

僕も覚えられませんでした。

ですが先ほども言いましたがForNext文だけ使用できればいいです。

無限ループに陥るリスクもなく回数を指定して回数分だけループする。

1番無駄なく理に適っていると思いませんか?

回数が分からないならプログラムで調べに行けばいいだけです!

この後の回で、「変数」「配列」を学んだ後に実際に調べに行く方法を学んでいきましょう。