
VBAの繰り返し処理は
・For
・For Each
・Loop
の3種類があります!

ですが
・For、For Each、Loopを使用せずとも
・繰り返し処理は実現可能
です!
※繰り返し処理にFor、For Each、Loopは必須ではありません。

ただ
・For、For Each、Loopを使用した方が
・可読性が良い
です!
※可読性が良いためFor、For Each、Loopを使用したほうが良いです。
For、For Each、Loopが存在する理由
そもそもFor、For Each、Loopが無いと何か困ることがあるのでしょうか?
実は無くても困りません。
For、For Each、Loopが無くとも繰り返し処理は実現できるためです。
繰り返し処理は「If文」と「GoTo文」でも実現できます。
例えば
・For、For Each、Loopを使用せずに10回繰り返す処理
は以下のように記述できます。
'変数の宣言を必須
Option Explicit
Sub sample()
Dim i As Long
i = 0
Label1:
If i < 10 Then
Debug.Print i & "回目"
i = i + 1
GoTo Label1
End If
End Sub

ではなぜFor、For Each、Loopは存在するのでしょうか。それは「可読性を良くするため」です。
For、For Each、Loopを使用すると可読性が良くなる
For、For Each、Loopを使用すると可読性が良くなります。
なぜならFor、For Each、Loopには「意味が込められているから」です。
「For」に込められた意味
「For」には「決められた回数を繰り返す」という意味が込められています。
※10回繰り返す等。
「For Each」に込められた意味
「For Each」には「コレクションの数だけ繰り返す」という意味が込められています。
※シート数だけ、配列の要素数だけ等。
「Loop」に込められた意味
「Loop」には「ある状態の間は繰り返す」という意味が込められています。
※フラグが「0」である間等。
つまりソースコードの読み手(=他人)へ
・「決められた回数を繰り返したい」と伝えたいときは「For」
・「コレクションの数だけ繰り返したい」と伝えたいときは「For Each」
・「ある状態の間は繰り返したい」と伝えたいときは「Loop」
を使用します。
※「If文」と「GoTo文」で繰り返し処理を記述するより分かりやすく(=可読性が良く)なります。
※「If文」と「GoTo文」で繰り返し処理を記述するのは止めましょう。分かりづらい(=可読性が悪い)ためです。
そんなことをする人はまずいませんが。
まとめ
上記の内容をまとめます。
「For、For Each、Loop」を使用するのは「可読性を良くするため」。
「For、For Each、Loop」には「意味が込められている」。
種類 | 意味(伝えられること) |
---|---|
For | 決められた回数を繰り返す |
For Each | コレクションの数だけ繰り返す |
Loop | ある状態の間は繰り返す |
参考
For、For Each、Loopの詳細は、公式サイトをご確認ください。
●For
●For Each
●Loop