Sample Site

LOOP処理関係

プログラムの流れ(フロー)の3つの基本的な処理は、「順次処理」「分岐処理」「反復処理」ですが そのうちの一つである「反復処理」(LOOP処理)について考えます。 この3つの要素は、プログラム言語の種類に関わらず同じです。ただvbaでのループ処理は、一般的に時間がかかる場合が多いので、工夫が必要になる場合もあります。

vbaでの代表的なloop処理には以下があります。
●For next
(記述例:lopp処理の中にもう一つのLoop処理が入りこんでいます)
For k = 1 To 10 
  反復処理1
    For s = 1 To 20
      反復処理2
    Next
Next

このloop処理は、最も一般的なものであらかじめ設定した回数だけ、処理を繰り返します。 下のDO~のLoopに比べて、Loopを抜ける設定等が必要がなく比較的容易にloop処理を構築出来ます。 ただ、何らかの条件でloopを抜けた方が早く処理が完了する場合などは、処理が遅くなる可能性があります。(IFと組み合わせてExit Forで抜けると言う手もありますが・・)
このloopは比較的小~中規模なデータの処理(検出、変換等々)には手軽に構築できるので使えますが、大規模な対象への検出(検索)処理には向いていません。検出(検索)等はFindメソッド等、別の方法を考えるべきです。(「文書の検索」でfindは説明しています)

●Do While Loop
(記述例:lopp処理の中にもう一つのLoop処理が入りこんでいます)
Do While k <= drow (loopを抜ける条件1:k <= drow)
  反復処理1
   Do While s <= dclmn (loopを抜ける条件2:s <= dclmn)
      反復処理2
   loop
Loop

このloopは、あらかじめloopを抜ける条件を設定しておいて処理をします。ただLoopしても抜ける条件が無い場合には無限loopになってしまいます。 確実に抜けるのであれば、Loop内にカウンターを設置して、そのカウンタの数値も抜ける条件に追加すれば無限ループは避けられます。 For~nextLoopに比べての、メリットとしては、Loop対象のデータ内に、なにかの特定のデータの有無をチェックする場合、そのデータがあれば則、loopを抜けるので処理が早く完了する可能性が高まります。
この様なloopはあらかじめloopの回数がわからない場合に用います。

●Do Until Loop
(記述例:lopp処理の中にもう一つのLoop処理が入りこんでいます)
Do Until k = drow (loopを抜ける条件1:k = drow)
  反復処理1
   Do Until s = dclmn (loopを抜ける条件2:s = dclmn)
      反復処理2
   loop
Loop

このLoopは上記のDo While Loopに似ていますが、Loopを抜ける条件の設定が異なります。 Do Whileの場合は「k <= drow」の様にkの値がdrowの値と同じか、小さいうちはLoopを続けそれ以外の場合になったらloopを抜けます。一方、Do Untilの場合は「k = drow 」になったらLoopを抜ける、とピンポイントで条件を設定します。



以下に、上記の3種類の処理コードの例を示します。 処理としてはシンプルで、
DATAシートにあるデータをloop処理で、検索して該当したデータのセルに色を付ける
と言うものです。
検索文字は自由に設定可能で、該当データ数、処理時間の表示もするようにしています。
この程度のデータ規模でも、0.001秒台の位で微妙な差が出る場合もあります。

For ~ nextによるLoop
操作側(3種共通)検出されたデータ

For ~ nextによるLoopのコード例


Do While ~ LoopによるLoop
操作側(3種共通)検出されたデータ

Do While ~ LoopによるLoop


Do Until ~ LoopによるLoop
操作側(3種共通)検出されたデータ
Do Until ~ LoopによるLoop


3種のループ処理の比較(ダウンロード)
(※下の総まとめの総ファイルと同じものです)

loop処理のまとめ(総まとめ)
以上のTIPSをまとめたファイルです。お時間の無い方におまとめ編です。
3タイプのloop処理について、その処理対象による処理時間の比較等が試せます。


Sample Site