10 VBAのループ、「Do While Until LOOP」で前判断と後判断

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アカウントを作成して頂くと、登録が ラク です♪

写真素材素材【写真AC】

 

最後までご精読、誠にありがとうございました!!

自己紹介


VBA自作サンプルプログラム集へ戻る

取りあえず事務職で働きたいから手っ取り早くExcel教えてくれ


MOSなどの資格試験対策

投稿者: nekosiestr

プログラミング学習中のロスジェネ(就職氷河期世代)の発達障害者です。 宜しくお願いします。 趣味で写真を撮っています。 プログラミングは、GAS/HTML/CSS/JavaScript/jQuery/PHP、 発達障害は、自閉症スペクトラムASD/ADHD、その他双極性障害やHSP(5人に1人の繊細さん)などの生きづらさを抱えておりますが、それでも楽しく生きて行きたいです!! 写真は、以前はコンパクトデジカメ、現在は、OLYMPUSミラーレス一眼を使っています。

「10 VBAのループ、「Do While Until LOOP」で前判断と後判断」への1件のフィードバック

コメントは受け付けていません。