木戸じゅん。

贋作ミニマリストのブログ

VBAにおけるForとDoの違い、および両者の使い分けについてのまとめ

VBAにおける「For」と「Do」の違いについて

VBAの繰り返し処理には、2種類のステートメントがあります。

Forステートメント(以下For文)と、Doステートメント(以下Do文)です。

f:id:kidomeguru:20181121220015p:plain

先日、VBAを人に教えている最中に、

For文とDo文の違い」についてたずねられました。

たしかに、初めて学ぶ人は「2種類も要らなくね?」と思うでしょう。

今回は、両者の特徴についてまとめてみます。

「書き方が違う」などという見てわかるポイントではなく、本質的な部分に触れます。

 

For文とDo文の共通点

どちらも繰り返し処理を実行する制御文です。

定められた命令を繰り返し実行することに変わりはありません。

 

For文とDo文の相違点

繰り返しの開始から終了をあらかじめ決めている」のがFor文で、

条件の成立(または非成立)を繰り返し判定に利用する」ものがDo文になります。

例として、10回処理を繰り返すソースコードで両者を比較してみましょう。

 

10回繰り返すソースコード(For文)

For文の場合、構文の中に「カウンタ変数」を必ず使用します。

f:id:kidomeguru:20181121213633p:plain

上記のコードは、変数Cntの値が1から10に変化するまで処理(MsgBox関数)を繰り返し実行します。 

変数Cntをカウンタ変数として使用しています。変数Cntは、繰り返し処理が実行されるたびに自動的に1ずつ増えていきます(増加値は変更可能)。

 

余談ですが、For文の別の記法である、For_Eachに関しても同じことが言えます。

f:id:kidomeguru:20181121214420p:plain

上記はExcelブックに存在するワークシート名を左端から右端まで、順にポップアップ表示します。こちらも、ワークシートの左端から右端までとあらかじめ繰り返し範囲が定められています。

このように、「どこ(開始値)からどこ(終了値)まで繰り返す」と明示する制御文がFor文です。

 

10回繰り返すソースコード(Do文)

Do文の場合は、For文のようにカウンタ変数の開始から終了までの範囲を書くのではなく、Do句からLoop句の間で、繰り返し条件を記述します。

f:id:kidomeguru:20181121215328p:plain

「While Cnt < 11」は、変数Cntが11より小さい間繰り返し続ける、という制御文です。変数Cntをカウンタ変数に使用していますが、Do文の場合は自動的に増えていくことはなく、変数Cntの値を変化させたい場合は明示的に記述する必要があります(Cnt = Cnt + 1)。

仮に、変数Cntの値を変化させなかった場合、変数Cntは1から変わらず、Do文の繰り返し条件(Cnt < 11)は成立し続けますので、処理を繰り返し続けます(無限ループ)。

 

Do文には、繰り返し条件が成立しない間繰り返す、という書き方もあります。

f:id:kidomeguru:20181121222158p:plain

「Until Cnt = 11」は、変数Cntが11になったら繰り返しを終了する、という制御文です。言い換えると、変数Cntが11ではない間は処理を繰り返し続ける、ということになります。

このように、「条件式が成立する(または成立しない)間繰り返す」制御文がDo文です。

 

For文とDo文の使い分け

f:id:kidomeguru:20181121223144p:plain

「結局、ForとDoはどうやって使いわければいいの?」と思われた方もいるはずです。

両者は目的別に使い分けましょう。

 

For文:変数が1~10に変化する間繰り返すような「値の変化」が目的の場合に使用する

Do文:変数が10以下の間繰り返すような「条件の成立(または非成立)」が目的の場合に使用する

 

なお、Do文の使い方には注意が必要です。わかっていてあえて使用する、というのもアリですが、参考までに。

・無限ループへの対処が必須である

・一定値ずつ変化するカウンタ変数を繰り返しに用いるならFor文が向いている

 

以上がFor文とDo文の違いです。

繰り返し処理はプログラミングの基本であり、VBAにおいてFor文とDo文は基本です。

目的に合わせて使いこなせると、最適なプログラムを作れるようになります。

両者の構文は何度も書いて、指に覚えさせてしまいましょう。

 

Excel VBA逆引き辞典パーフェクト 第3版

Excel VBA逆引き辞典パーフェクト 第3版