VBA Basic11
第11章 ループ処理(Do Loopステートメント)
For Nextステートメント同様に、Do Loopステートメントもループ処理を行います。私のように、COBOLやFORTRANのようなプログラム言語から始めた人間からすると、Do Loopステートメントの方が親しみがあります。
ループ処理はほぼFor Nextステートメントでできますが、単純な繰り返しができないような場合はDo Loopステートメントを使います。 CSVファイルやテキストファイルなどの外部のファイルを1行ずつ読むような場合、For Nextステートメントでは最後の行の判断ができないため、Do Loopステートメントを使います。
Do~Loopステートメントの記述は以下のとおりです。
Do (While) または (Until)
(While)ならループを続ける条件、(Until)ならループを止める条件
繰返す処理
Loop
WhileとUntilでは全く逆の条件になります。Whileは繰り返している間の条件で、Untilは繰り返しを終える条件になります。
ちょっと古い話で恐縮ですが私が若い頃、IBM系で働いていた人たちからWhileは前置判定に、Untilは後置判定に使うから、繰返し対象のない時に処理を抜けるにはWhlie使いなさいと聞いた覚えがあります。プログラム言語によって使い分けるんだなーって記憶した気がします。ただ、ExcelのVBAではWhileもUntilも「Do While」「Do Until」も前置判定なので、条件式の作り方だけ注意すれば問題ありません。ちなみに後置判定は「Do Loop While」「Do Loop Until」で判定できます。古い話を思い出してしまいました。中年のつぶやきだと思ってこの段落は読み飛ばしてください。
余談はさておき、前の章 For Nextステートメントの時に使った金額の計算を、Do Loopステートメントで行うと以下のとおりになります。
Dim i As Long
i = 1
Do Until i > 10
Cells(i, 3).Value = Cells(i, 1).Value * Cells(i, 2).Value
i = i + 1
Loop
For Nextステートメントと比べて、カウンターの初期設定と値の増分が必要になります。最近のループ処理の8割がたはFor Nextステートメントが使われます。特に配列を使い場合は必ずFor Nextステートメントを使います。
Do LoopステートメントはあくまでFor Nextステートメントではできないときに使うと考えたほうがいいです。
ちなみに、Do Loopステートメントを使うCSVデータの取込は以下のとおりです。
Do Until EOF(iFree)
Line Input #iFree, strRec '1行読み込み
varArray = Split(steRec, ",")
Loop
ここまでで、変通の使い方・条件分岐・ループ処理が一通り終わり、ExcelのVBAを身に着ける基礎としては十分です。ただループ処理をシートの最終行まで繰り返したいことが非常に多いです。その際に最終行の判断が必要になります。基礎の最終章では、シートのデータの最終行や最終列の取得を行います。