
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コードを入力するかコピーして貼り付け。

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 SUB と Exit Function 命令(ステートメント)は即時に該当プロシージャを終了する。
コードサンプルは、未入力のセルが出現するまで「E1」、「E2」、「E3」セルと「E列」を順に処理し、その値を加算します。
数値チェックを省略しているため、「E列」に数字以外を入力してはいけません。
おかしくなったら、 Excel 自体を強制終了してください。
動作確認は、イミディエイト・ウィンドウにて
call looptest5() と入力後 [return] キーを押します。
明日は、 For Each anObject In Objects 〜 Next anObject 「繰り返し」処理を説明する予定です。
お疲れ様でした!
[command] + [Q] にてExcel を終了時、「作業中のブック」を保存するか確認のダイアログ画面が表示されるため 「保存」しましょう。
現状、 VBE 内で日本語を記述すると(貼り付けのみ可能な場合あり)乱れたり、保存時にクラッシュすることが多いため、 VBAコード は「未変換の英数字のみ」で記述してください。(テキストエディタからの貼り付けは可能)
「広告」
最後まで読んでいただき、ありがとうございます。
ぜひ、右側の「人気ブログランキング」投票に ご協力ください。
また、お越しくださいませ。
// アタル
「広告」
コメント