アットウィキロゴ

Do Until Loop 文 | エクセルマクロWiki

繰り返し処理(ループ処理)のうちの、『条件を先にみて、それが成立しない間、ある処理を実行する」タイプです。

Do Until ・・・ Loop文の構文は、こうです。

Do Until 条件 
 繰り返す処理
Loop

例1

クイズマクロを作りましょう。いきなりプログラミングっぽくなりますが、簡単にできます。下記のコードをボタンを押すと動作するようにしてみましょう。

Do Until Range("A1").Value = "東京"
  Range("A1").Value = InputBox("日本の首都は?")
Loop

 たったの3行です。このクイズは正解の”東京”が入力されるまで、”日本の首都は?”と聞いてきます。

一行ずつ説明しましょう。

Do Until Range("A1").Value = "東京"

セルA1の値が”東京”ではないなら・・・、と言う意味です。よって、次の行は、セルA1の値が”東京”なら、実行されません。Do Until ・・・ Loop文は終わります。

なお、ちょうど対になるDo While・・・ Loop文で同じ意味にしようとすれば、「Do While Range("A1").Value <> "東京"」となります。

Do Untilの方が『セルA1が東京であるという条件が成立しないなら・・・』という意味であるのに対し、Whileの方は、『セルA1が東京でないという条件が成立したら・・・』という意味です。

「意味が一緒なら使い分けはどうするんだ」となりますが、その通りで、この辺り、日本語による作文に似て、センスです。よりそのコードの意図がわかりやすい方を選びましょう。

Range("A1").Value = InputBox("日本の首都は?")

 ユーザへ文字の入力を促すInputBoxダイアログを表示し、そこに入力された文字をセルA1に挿入します。

Loop

 Do Until ・・・ Loop文の終端です。といっても、あくまで文法上の結びなので、繰り返し(ループ)は、ここで一行目に戻り、再度「Range("A1").Value = "東京"」という条件が成立していないことを確認しにいきます。
成立していないなら、正解が出ていないので、正解の”東京”が入力されるまで、延々と繰り返し(ループ)します。

例2

A1~A列の終端セルまでを、「太字で、文字色は赤、セルの背景色をグリーン」に変更します。

言い換えると「A1からセルを下に見ていって、セルが空欄でなければ、セルの書式を太字・文字色を赤・背景色をグリーン」にする、ということです。空欄になったら、そこで繰り返しは終わります。

コードはこうなるでしょう。

num = 1
Do Until Cells(num, 1) = ""
 Cells(num, 1).Font.FontStyle = "太字"
 Cells(num, 1).Font.ColorIndex = 3
 Cells(num, 1).Interior.ColorIndex = 50
 num = num + 1
Loop

一行ずつ説明します。

num = 1

変数numに1をセットします。

Do Until Cells(num, 1) = ""

 セルA1の値が空欄じゃないなら、という意味です。While文なら「Do While Cells(num, 1) <> ""」となります。

Cells(num, 1).Font.FontStyle = "太字"
Cells(num, 1).Font.ColorIndex = 3

 セルのフォントの設定をしています。これは[セルを右クリック] → [セルの書式設定] → [フォントタブ] での設定と同じです。 
読めば何となくわかると思いますが、フォントのスタイルとサイズと色を指定しています。

Cells(num, 1).Interior.ColorIndex = 50

セルの網掛けの設定をしています。これは[セルを右クリック] → [セルの書式設定] → [パターンタブ] での設定と同じです。
これも読めば何となくわかると思いますが、セルの色を指定しています。

num = num + 1

変数numに1を足します(インクリメント = 増分)。ここで変数numは2になります。そして、2行目の「Do Until Cells(num, 1) = ""」に戻り、条件を再度判断します。二回目なら「Cells(2, 1).」(=セルA2)が空欄でなければ・・・、の意味になるわけです。以下、順次1が足されます。つまり、A列のセルを下へ一個一個みていき、空欄のセルが見つかったら(つまり、2行目の「Cells(num, 1).Value = ""」という条件が成立しなければ)、そこでループは終わります。 

Loop

 Do While・・・ Loop文の終端を意味します。
とはいえ、あくまでも構文の結びというだけで、実際は二行目の条件を再度見に行くのは前述の通りです。

 


 

最終更新:2010年09月09日 22:22
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。