記事キャッチ画像  (12) Do While 〜 Loop と Do Until 〜 Loop 繰り返しの使い方! 

 1. Do While 〜 Loop (前判定) 
 2. Do Until 〜 Loop (前判定) 
 3. Do 〜 Loop While (後判定) 
 4. Do 〜 Loop Until (後判定) 
 5. Do 〜 Loop + Exit Do 
5種類の Do 〜 Loop 「繰り返し」構造を理解する!
  「広告」  
 

 (12) Do While 〜 Loop と Do Until 〜 Loop 繰り返しの使い方! 

Excel メニューバーの [ヘルプ] - [更新プログラムのチェック] にて、適用されていないアップデートがあれば行ってください。 

Excel 2016 for Mac 環境での説明となりますので、 Mac版 Excel 2011 では( VBA が利用できますが )同じ結果にならない場合があるかもしれません。

現状、 VBE 内で日本語を記述すると(貼り付けのみ可能な場合あり)乱れたり、保存時にクラッシュすることが多いため、 VBAコード は「未変換の英数字のみ」で記述してください。(テキストエディタからの貼り付けは可能)

( ユーザー定義関数 のVBAコードを含んだ)前回使用した XLSM ファイルを、「マクロを有効」にして開きます。

[ alt ] + [ F11 ] にて VBE を開き、Module1 の最後に以下の VBAコードを入力するかコピーして貼り付け。

55


 1. Do While 〜 Loop (前判定) 



Sub LoopTest1()

    Dim i As Integer
    Dim total As Long

    total = 0
    i = 1

    Do While (Range("C" & CStr(i)).Value <> "")
        total = total + Range("C" & CStr(i)).Value
        i = i + 1
    Loop

    MsgBox total
    
End Sub


While 以降に記述した条件を満たす間 」 Do 〜 Loop 間の処理を繰り返します。
前判定のため、Do 〜 Loop 間を一度も処理しない場合あり)

コードサンプルは、未入力のセルが出現するまで「C1」、「C2」、「C3」セルと「C列」を順に処理し、その値を加算します。
数値チェックを省略しているため、「C列」に数字以外を入力してはいけません。
おかしくなったら、 Excel 自体を強制終了してください。

動作確認は、イミディエイト・ウィンドウにて
call looptest1() と入力後 [return] キーを押します。


 2. Do Until 〜 Loop (前判定) 



Sub LoopTest2()

    Dim i As Integer
    Dim total As Long

    total = 0
    i = 1

    Do Until (Range("E" & CStr(i)).Value = "")
        total = total + Range("E" & CStr(i)).Value
        i = i + 1
    Loop

    MsgBox total
    
End Sub


「 Until 以降に記述した条件を満たすまで 」 Do 〜 Loop 間の処理を繰り返します。
前判定のため、Do 〜 Loop 間を一度も処理しない場合あり)

コードサンプルは、未入力のセルが出現するまで「E1」、「E2」、「E3」セルと「E列」を順に処理し、その値を加算します。
数値チェックを省略しているため、「E列」に数字以外を入力してはいけません。
おかしくなったら、 Excel 自体を強制終了してください。

動作確認は、イミディエイト・ウィンドウにて
call looptest2() と入力後 [return] キーを押します。


 3. Do 〜 Loop While (後判定) 



Sub LoopTest3()

    Dim i As Integer
    Dim total As Long

    total = 0
    i = 0

    Do
        i = i + 1
        total = total + Range("C" & CStr(i)).Value
    Loop While (Range("C" & CStr(i)).Value <> "")

    MsgBox total
    
End Sub


「 While 以降に記述した条件を満たす間 」 Do 〜 Loop 間の処理を繰り返します。
後判定のため、最低1回は Do 〜 Loop 間を処理)

コードサンプルは、未入力のセルが出現するまで「C1」、「C2」、「C3」セルと「C列」を順に処理し、その値を加算します。
画面のイミディエイトウィンドウで示したとおり、Range("C11").Value は自動的に型変換され ZERO となるため加算しても値は変わらず、実行時エラーになりません。

数値チェックを省略しているため、「C列」に数字以外を入力してはいけません。
おかしくなったら、 Excel 自体を強制終了してください。

動作確認は、イミディエイト・ウィンドウにて
call looptest3() と入力後 [return] キーを押します。



 4. Do 〜 Loop Until (後判定) 



Sub LoopTest4()

    Dim i As Integer
    Dim total As Long

    total = 0
    i = 0

    Do
        i = i + 1
        total = total + Range("E" & CStr(i)).Value
    Loop Until (Range("E" & CStr(i)).Value = "")

    MsgBox total
    
End Sub


「 Until 以降に記述した条件を満たすまで 」 Do 〜 Loop 間の処理を繰り返します。
後判定のため、最低1回は Do 〜 Loop 間を処理)

コードサンプルは、未入力のセルが出現するまで「E1」、「E2」、「E3」セルと「E列」を順に処理し、その値を加算します。
画面のイミディエイトウィンドウで示したとおり、Range("E11").Value は自動的に型変換され ZERO となるため加算しても値は変わらず、実行時エラーになりません。

数値チェックを省略しているため、「E列」に数字以外を入力してはいけません。
おかしくなったら、 Excel 自体を強制終了してください。

動作確認は、イミディエイト・ウィンドウにて
call looptest4() と入力後 [return] キーを押します。



 5. Do 〜 Loop + Exit Do 



Sub LoopTest5()

    Dim i As Integer
    Dim total As Long

    total = 0
    i = 0

    Do
        i = i + 1

        If (Range("E" & CStr(i)).Value = "") Then
            Exit Do
        End If

        total = total + Range("E" & CStr(i)).Value
    Loop

    MsgBox total
    
End Sub


Do 〜 Loop 間の処理を無限に繰り返すため、必ず Exit Do 等でループから抜け出すための条件を付加する。
Exit Do を行うと、Do 〜 Loop を抜け出し、次の MsgBox を実行する。

なお、For 〜 Next ループを抜け出すための、 Exit For も用意されている。 
繰り返し処理ではないが、Exit SUBExit Function 命令(ステートメント)は即時に該当プロシージャを終了する。

コードサンプルは、未入力のセルが出現するまで「E1」、「E2」、「E3」セルと「E列」を順に処理し、その値を加算します。

数値チェックを省略しているため、「E列」に数字以外を入力してはいけません。
おかしくなったら、 Excel 自体を強制終了してください。

動作確認は、イミディエイト・ウィンドウにて
call looptest5() と入力後 [return] キーを押します。


明日は、 For Each anObject In Objects 〜 Next  
anObject 「繰り返し」処理を説明する予定です。


お疲れ様でした!
[command] + [Q] にてExcel を終了時、「作業中のブック」を保存するか確認のダイアログ画面が表示されるため 「保存」しましょう。
現状、 VBE 内で日本語を記述すると(貼り付けのみ可能な場合あり)乱れたり、保存時にクラッシュすることが多いため、 VBAコード は「未変換の英数字のみ」で記述してください。(テキストエディタからの貼り付けは可能)

  「広告」  
  

最後まで読んでいただき、ありがとうございます。
ぜひ、右側の「人気ブログランキング」投票に ご協力ください。
また、お越しくださいませ。
// アタル
 

  「広告」