【VBA講座】繰り返し処理(For、For Each、Loop)を使用する理由

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

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

ただ
 ・For、For Each、Loopを使用した方が
 ・可読性が良い
です!
※可読性が良いためFor、For Each、Loopを使用したほうが良いです。

PR

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を使用せずに10回繰り返す処理)
実行結果(For、For Each、Loopを使用せずに10回繰り返す処理)


ではなぜFor、For Each、Loopは存在するのでしょうか。それは「可読性を良くするため」です。

PR

For、For Each、Loopを使用すると可読性が良くなる

For、For Each、Loopを使用すると可読性が良くなります。
なぜならFor、For Each、Loopには意味が込められているから」です。

「For」に込められた意味
「For」には「決められた回数を繰り返す」という意味が込められています。
※10回繰り返す等。

「For Each」に込められた意味
「For Each」には「コレクションの数だけ繰り返す」という意味が込められています。
※シート数だけ、配列の要素数だけ

「Loop」に込められた意味
「Loop」には「ある状態の間は繰り返す」という意味が込められています。
※フラグが「0」である間

「Loop」には繰り返し処理を続けるかどうかの判定方法として判定まえはんてい後判定あとはんていがあります。

それぞれ
 「判定まえはんてい・・・場合によっては1度も処理をしない
 「判定あとはんてい・・・必ず1度は処理をする
という意味が込められています。


つまりソースコードの読み手(=他人)へ
 ・「決められた回数を繰り返したい」と伝えたいときは「For」
 ・「コレクションの数だけ繰り返したい」と伝えたいときはFor Each
 ・「ある状態の間は繰り返したい」と伝えたいときはLoop
を使用します。
※「If文」と「GoTo文」で繰り返し処理を記述するより分かりやすく(=可読性が良く)なります。
※「If文」と「GoTo文」で繰り返し処理を記述するのは止めましょう。分かりづらい(=可読性が悪い)ためです。
  そんなことをする人はまずいませんが。

PR

まとめ

上記の内容をまとめます。

まとめ

「For、For Each、Loop」を使用するのは「可読性を良くするため」
「For、For Each、Loop」には「意味が込められている」

種類意味(伝えられること)
For決められた回数を繰り返す
For Eachコレクションの数だけ繰り返す
Loopある状態の間は繰り返す
For、For Each、Loopの違い
PR

参考

For、For Each、Loopの詳細は、公式サイトをご確認ください。

●For



●For Each



●Loop