ITサポーターTsuchida

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を身に着ける基礎としては十分です。ただループ処理をシートの最終行まで繰り返したいことが非常に多いです。その際に最終行の判断が必要になります。基礎の最終章では、シートのデータの最終行や最終列の取得を行います。