VBAにはForループ以外のループで、
1.Do While Loop…ある条件が継続している間、処理を続ける【前判断】
2.Do Loop While…ある条件が継続している間、処理を続ける【後判断】
3.Do Until Loop…ある条件に達するまで、処理を続ける【前判断】
4.Do Loop Until…ある条件に達するまで、処理を続ける【後判断】
の、上記4つのループもあります。
文章だけでは分かりづらいので、1つ1つ、サンプルのコードを4つ分見て行きます。
まずは、この様な画面を用意しました。
● 1つ目「Do While Loop」:
セルの内容が「4以下」である間はセルを黄色いペンキで塗りつぶす。
条件判断は【前】
● 2つ目「Do Loop While」:
セルの内容が「4以下」である間はセルを黄色いペンキで塗りつぶす。
条件判断は【後 (ペンキを塗ることに慣れていない職人さん) 】
● 3つ目「Do Until Loop」:
セルの内容に「5」が現れるまで、セルを黄色いペンキで塗りつぶす。
条件判断は【前】
● 4つ目「Do Loop Until」:
セルの内容に「5」が現れるまで、セルを黄色いペンキで塗りつぶす。
条件判断は 【後 (ペンキを塗ることに慣れていない職人さん) 】
まずは1つ目から解説致します。
● 1つ目「Do While Loop」:
セルの内容が「4以下」である間はセルを黄色いペンキで塗りつぶす。
条件判断は【前】
最初にセルD3、つまりセル(3,4)の値が「4以下」かどうか判断します。
1は4以下に当てはまりますので、セルを黄色いペンキで塗りつぶします。
Offsetで1つ右に移動します。
そこでもセルの値が「4以下」かどうか判断します。
4以下ですので塗りつぶして移動します。
同様の処理を「4以下」である間は繰り返します。
そのコードを書きに掲載致します。
セルの塗りつぶしは、Interior.Colorを使って、今回黄色なので、vbYellowを指定します。
Sub ループその1_While前判断()
' セルD3をアクティブにする
Cells(3, 4).Select
'セルの値が4以下かどうか判断する
Do While ActiveCell.Value <= 4
'セルを黄いペンキで塗りつぶす
ActiveCell.Interior.Color = vbYellow
'セルを右に移動する
ActiveCell.Offset(0, 1).Select
'繰り返し
Loop
End Sub
この様な実行結果になりました。
● 2つ目「Do Loop While」:
セルの内容が「4以下」である間はセルを黄色いペンキで塗りつぶす。
条件判断は【後 (ペンキを塗ることに慣れていない職人さん) 】
「後」判断は【慣れていないペンキ職人さん】をイメージして下さい。
「4以下」かどうか判断しないで、塗りつぶしてしまいます。
その後に「あ~~、間違えて塗っちゃった・・・。」と気づいて後悔します。
つまり、判断する前にセルD6である(6,4)を塗りつぶしてしまいます。
その、塗りつぶしをした後で条件判断をします。
「5」ですので、「4以下」という条件に該当しませんが、すでに塗りつぶされています。
なので後判断は、1回は必ず実行されてしまいます。
Offsetで1つ右に移動します。
今後はその失敗からペンキの塗り方に慣れてきたので、
そこでセルの値が「4以下」かどうか判断が出来るようになりました。
その繰り返しで、下記のコードを実行するとこの様になりました。
Sub ループその2_While後判断()
' セルD6をアクティブにする
Cells(6, 4).Select
'取り敢えずやっちゃえ!!
Do
' セルを黄色に塗りつぶす
ActiveCell.Interior.Color = vbYellow
'セルを右に移動する
ActiveCell.Offset(0, 1).Select
'4 以下であれば繰り返し
Loop While ActiveCell.Value <= 4
End Sub
ここからUntilに入ります。
ルールとして、5になるまで繰り返します。
● 3つ目「Do Until Loop」:
セルの内容に「5」が現れるまで、セルを黄色いペンキで塗りつぶす。
条件判断は【前】
最初にセルD10、つまり(10,4)の値が「5」になったかどうか判断します。
まだ、「5」が現れていないので、セルを黄色いペンキで塗りつぶします。
Offsetで1つ右に移動します。
移動してもまだ、「5」になっていないので、塗りつぶして移動します。
その繰り返しで、「5」が現れた所で塗りつぶしをやめます。
この様な実行結果になりました。
実行結果とコードです。
Sub ループその3_Until前判断()
' セルD10をアクティブにする
Cells(10, 4).Select
'セルの値が5に達したかどうかを判断する
Do Until ActiveCell.Value = 5
'セルを黄いペンキで塗りつぶす
ActiveCell.Interior.Color = vbYellow
'セルを右に移動する
ActiveCell.Offset(0, 1).Select
'繰り返し
Loop
End Sub
最後です。
● 4つ目「Do Loop Until」:
セルの内容に「5」が現れるまで、セルを黄色いペンキで塗りつぶす。
条件判断は 【後 (ペンキを塗ることに慣れていない職人さん) 】
条件判断が「後」ですので、またまた【ペンキ塗りに慣れていない職人さん】になります。
セルD13、つまり(13,4)の値が「5」に達したかどうかを判断します。
5まで達したら塗りつぶさないルールですが、ペンキ塗りに慣れていない為、最初のセルを塗りつぶしてしまいます。
なので後判断は、1回は必ず実行されてしまいます。
そこで、あ~~失敗したと後悔します。
同じ失敗をしないように、気を付けた所で次に進んで、
まだ、次のセルは「5」に達していないので、塗りつぶします。
Offsetで一つ右に移動します。
移動してもまだ、「5」に達していないので、塗りつぶす・・・ということを繰り返します。
その繰り返しで、最後に「5」に到達した所で塗りつぶしをやめます。
実行結果とコードです。
Sub ループその4_Until後判断()
' セル D13をアクティブにする
Cells(13, 4).Select
'取り敢えずやっちゃえ!!
Do
'セルを黄色に塗りつぶす
ActiveCell.Interior.Color = vbYellow
'セルを右に移動する
ActiveCell.Offset(0, 1).Select
' 5に達するまで繰り返し
Loop Until ActiveCell.Value = 5
End Sub
皆さま、大変お疲れ様でした。
この記事最後のブレイクタイムPhotoは・・・
横浜みなとみらいの夜景です。
ランドマークタワーから撮影しました。
仕事や勉強のリフレッシュに、趣味で写真を撮っておりますので、宜しかったら フォトストック写真ACさん の投稿もご覧頂けますと、大変嬉しい限りでございます!!
こちら、無料の「ダウンロードユーザー」に登録して頂けると、無料で写真のダウンロードが可能になります。
※ 先にGoogleアカウントを作成して頂くと、登録が ラク です♪
最後までご精読、誠にありがとうございました!!
自己紹介
VBA自作サンプルプログラム集へ戻る
取りあえず事務職で働きたいから手っ取り早くExcel教えてくれ
MOSなどの資格試験対策