プログラムは大きく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の数値が入ります。
表にするとこのようになります。
行数 | 入力値 |
1 | 1 |
2 | 2 |
3 | 3 |
4 | 4 |
5 | 5 |
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番無駄なく理に適っていると思いませんか?
回数が分からないならプログラムで調べに行けばいいだけです!
この後の回で、「変数」「配列」を学んだ後に実際に調べに行く方法を学んでいきましょう。