サイトアイコン 独学エクセル塾

【マクロVBA】Do…Loopで指定条件まで繰り返し・ループする!WhileとUntilの違いとは

VBAでプログラミングをするうえで繰り返し動作が必要な場面が出てくると思います。
例えば100行連続で処理内容が一緒だった場合、
100行分の処理プログラムが必要になります。

それでは日が暮れてしまうので繰り返し動作のDo Loopを身につけると作業がグッと楽になります。

繰り返す回数が決まっているのであればFor…Nextが有効です。
For…Nextの使用方法はこちら☟

【VBA知識 7】FOR…NEXTで指定した数値で繰り返し・ループ動作をする。 – 独学エクセル塾 (dokugakuexcel.com)

回数が決まってないのであれば指定した条件まで実行するループ動作が必要です。

それでは見ていきましょう。




■忙しい人向けのコピペ用プログラム

赤字の「ここに条件を入力」をカスタムして使用してください

・Whileのプログラム(条件未達成で終了)

Sub 条件未達成で終了する繰り返し動作()
Do While ここに条件を入力
'…ループ処理したいプログラム
Loop
End Sub

・Untilのプログラム(条件達成で終了)

Sub 条件達成で終了する繰り返し動作()
Do Until ここに条件を入力
'…ループ処理したいプログラム
Loop
End Sub

■Do Loop の構造

まずは構造から見ていきましょう。

Do While or Until  ループ条件

‘…ループ処理したいプログラム

Loop

WhileUntilの違い

While…条件をみたしてなければ終了。
Until…条件を満たしたら終了。

こちらは条件次第で変えれるのでイメージしやすい方でいいです。

ループ条件

こちらは「=」などの等式、「>」などの不等号などを使用して条件を設定してください。

Loop

Do…から宣言した繰り返しの終点です。
つまりDoからLoopまでを繰り返します。

■Do Loop の見本

見本で例を作成しました。☟

Sub Do Loopでの繰り返し動作()

Dim A As Long

A=1

Do Until Cells(A,1)=””

‘ここに処理

A=A+1

Loop

End Sub

これを読み解くと、、、
A行にデータが連続であったとすると
A行のデータがなくなるまで処理を続けるプログラムになります。

■実践

それでは実践です。
見本で下図のシートを用意しました。

A行に数値が並んでいる状態で
空白になるまで掛け算をしたいと思います。

C1には「15」。C2には「25」….のように続いていきます。

A列を空白になるまで処理を進めるプログラムを作る場合はこのようになります。

Do Until Cells(A, 1) = “”


AはLoopするたび1行下にずれてほしいので
A=A+1
をループ内に挟みます。

つぎに処理です。

書き込みたい行は変数で変わるため「A」です。
行は3行目なので「Cells(A,2)」となります。
あとは1行目と5をかけるので…

Cells(A, 2) = Cells(A, 1) * Cells(2, 7)

このようになります。

最後にLoopで繰り返しの終点を決めましょう。

Sub ForNextでの繰り返し動作()

Dim A As Long

A = 1

Do Until Cells(A, 1) = “”

 ’ここから繰り返し動作

 Cells(A, 2) = Cells(A, 1) * Cells(2, 7)

 A = A + 1

 ’ここまで繰り返し動作

Loop

End Sub

このようになりました。

実行すると…

うまく計算できてますね。
WhileとUntilで使い分けて条件を設定してみてください。

⬛︎公式の説明

わかりやすいように説明したため公式と使用する語句が異なりますが
マイクロソフト公式の説明については下記のリンクを参照してください。☟

Do…Loop ステートメント (VBA) を使用する | Microsoft Learn

■まとめ

いかがだったでしょうか。
ForNextとは異なった繰り返しになります。

作成するプログラムに応じて使い分けてみてください。

次回は条件分岐のIf Then について説明しています。次回の記事はこちらから☟

【マクロ・VBA知識 9】If …Thenで条件分岐・判別をする(○○なら△△) ► 独学エクセル塾 (dokugakuexcel.com)

それでは次回の記事でお会いしましょう。

モバイルバージョンを終了