VBAのループの書き方は多すぎる

VBAにはループの書き方がいくつもあります。全部で8種類もあります。

○「For – Next」
○「For Each – Next」
○「Do – Loop」
△「Do While – Loop」
×「Do – Loop While」
×「Do Until – Loop」
×「Do – Loop Until」
×「While – Wend」

はっきり言って多すぎです。こんなにいりませんし、使いませんむしろ同じようなループ処理ごとに「ここはDo While、こっちはDo – Loop Until、こっちはWhile -Wend」などのように違う書き方をされると見る方からすると迷惑でしかありません。

覚えるのはFor、For Each、Doの3つ。おまけでDo While

VBAのループ構文は極端なことを言えばFor Each以外のどれか1つを覚えておけばコーディングの書き方が違うだけでどんなループでも対応可能です。ただ、1つだけで全部をこなそうとするとコーディングが読みにくくなることもあるため、いくつか絞って覚えておけば十分です。

覚えておくのは上に挙げた8つの中で、○をつけているForとFor EachとDoの3種類でよく、おまけで、△のDo Whileを覚えておけばもう十分です。

覚えられなければFor Eachは覚えなくてもいいのですが、配列やコレクションをループで回す場合にはとても便利です。また、他のループ構文がループカウンタを回す仕組みになっている中で、For Eachだけがループカウンタを使わない仕組みになっているため、ループカウンタ変数自体が不要になるという利点があります。

×を付けた他のは「なんかそういうのがあったな」程度知ってればOKで、覚える必要ありません。覚える必要がない理由は2つあり、1つはほとんど使われないことと、もう1つは書き方が違うだけでやることは同じだからです。

×を付けた下4つは当サイトのサンプルコードでもおそらく使ってないと思います。理由は先に挙げたFor、For Each、Doがあれば十分で、他のは使う必要がないからです。

各ループの書き方

上に挙げた8つのループをそれぞれ使ったサンプルです。ループ内の処理はイミディエイトウィンドウにループカウンタを出力しているだけです。

どのループ構文の書き方でも、結果は同じになります。

For文だけは直後のFor Each文で使う配列を作成しています。

実行結果
For : 0
For : 1
For : 2
For : 3
For Each : 0
For Each : 1
For Each : 2
For Each : 3
Do : 0
Do : 1
Do : 2
Do : 3
Do While : 0
Do While : 1
Do While : 2
Do While : 3
Do – Loop While : 0
Do – Loop While : 1
Do – Loop While : 2
Do – Loop While : 3
Do Until : 0
Do Until : 1
Do Until : 2
Do Until : 3
Do – Loop Until : 0
Do – Loop Until : 1
Do – Loop Until : 2
Do – Loop Until : 3
While – Wend : 0
While – Wend : 1
While – Wend : 2
While – Wend : 3

実行結果を見て分かるとおり、0から3を出力するという同じ結果をどのループの書き方でも書くことができます。

処理速度は気にしなくていい

たまに、「For文とDo文はどっちが高速か?」、といった話が出ます。

厳密に言えば、For文はインデックスの計算が行われる分遅いのですが、最近のPCであれば差はないんで気にする必要はありません。