条件を満たすまで繰り返し処理を行なうDo~Loop

お引越し通知

[ お知らせ ]
この記事は、2017年10月07日に、FC2ブログからこちらのサイト(kazushikato.info)へ移転したものです。

Do~Loop Whileもしくは、Do While~Loopは繰り返し処理の代表的なマクロです。エクセルVBAではFor~Nextと同じくらい頻繁に使います。(どちらかというとFor~Nextのほうがよく使うかもしれませんが)

Do~Whileと同じような表現ですがDo~Untilというものもあります。Do~whileが「ある条件を満たしている間」であるのに対してDo~Untilの方は「ある条件を満たすまで」ということになっています。

-------------------------–
   i=0
    Do While i < 10
      i = i + 1
    Loop
-------------------------–

上の例では変数iの宣言は省略しています。最初にi=0として初期化しています。初期化とは変数に違う数字や文字などが入っていると困るのであらかじめ初期値に戻しておくことです。上の例では0(ゼロ)にしていますが自分の好きな値にしてかまいません。

さて本題のDoですがこの場合はi < 10ですので i の値が10未満である間はDoとLoopにはさまれている式の処理をするということになります。ですから i = i + 1 ですから i に1を足していきます。

 i の値は1回処理するごとに1ずつ増えていき、ついには10になります。その時もはや i が10未満である間という条件は満たさなくなりますのでここのDo While~Loopの処理は終了ということになります。(下の図の状態です)

Do loopが条件を満たしたらループから抜け出す

今度はDo Untilの場合を見てみましょう。こちらは先ほどとは逆に「条件を満たすまで」ですので最初は条件を満たしていない状態です。(先ほどの例では最初は条件を満たしていました)

-----------------------------------–
i = 0
Do Until i > 10
  i = i + 1
Loop
-----------------------------------–

最初の変数  i  の初期化は同じですが次の式の不等号が逆になっています。Untilの場合は最初は条件を満たしてないようにしなければなりません。 i  が10より大きくなるまで処理を続けるとなりま
す。

もしここで先ほどと同じように

Do Until i < 10

としてしまうと  i  の初期値は"0"ですから「 i  が10より小さくなるまで続ける」という条件に最初から当てはまってしまい1度も処理が行なわれないままこのループ(繰り返し処理)から抜け出てしまうからです。(下の図を参照ください)

最初から条件を満たしているため、一度も処理が行われない

ループ処理の条件を最初に書くか(Doのすぐ後に書くか)、最後に書くか(Loopの後に書くか)は同じようでいてちょっと違います。

なぜかというとDoのすぐ後に条件を書けば(Do while もしくは Do Untilの場合)もしその条件を満たしていなければ1度も処理をすることはありませんが、Loopのあとに条件を書いた場合

Loop While mosikuha Loop Until

の場合は条件を満たさなくとも最低1度は処理をしてくれるからです。

例えば

----------—
i = 0
Do Until i < 10
  i = i + 1
Loop
----------—

の場合は  i  は0(ゼロ)で最初からこの条件「10未満になるまで」という条件を満たしていますので、間の処理(i = i + 1)は1度も行なわれずに素通りしていきます。ところが

----------—
i = 0
Do
  i = i + 1
Loop Until i < 10
----------—

の場合は1度は間の処理(i = i + 1)を行なってしまいます。

この辺は使い分けが必要です。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする