🧬

Excel VBA_繰り返し処理の構文について

2022/12/09に公開約2,400字

この記事ではVBAの繰り返し処理についてまとめます。代表的な4つの構文とその具体例を整理していきます。

  • For〜Nextステートメント
  • Stepによる増減値の指定
  • 2重ループ
  • Do~Loopステートメント
  • While、Untilの違い
  • 実行のタイミングを後に

For〜Nextステートメント

For〜Nextステートメントは指定された回数だけ処理を繰り返します。繰り返す回数が分かっている場合にこちらの構文を使用します。

構文
For 変数 = 初期値 To 終了値
 処理
Next

下記の例ではセル"A1"~"A10"に1~10の値を出力します。

Dim i
For i = 1 To 10
    Cells(i, 1).Value = i
Next

変数の値は1ずつ加算されていき、終了値を超えると処理が終了する仕組みとなっています。

Stepによる増減値の指定

For~Next構文はStepによって増減値を指定することもできます。(元々Stepは省略が可能であり、省略した場合は変数の値が1ずつ加算されていました。)

構文
For 変数 = 初期値 To 終了値 Step 増減値
 処理
Next

下記の例ではA列のセルと値が2飛ばしで入力されていきます。

Dim i
For i = 1 To 10 Step 2
    Cells(i, 1).Value = i
Next

逆に値を1ずつ減少させていくこともできます。

Dim i
For i = 10 To 1 Step -1
    Cells(i, 1).Value = i
Next

初期値は10からスタートして1ずつ減少していき、1になると処理が終了します。

2重ループ

For~Nextのループの中で、また更に別のループを回すことも可能です。下記のコードではセル"A1"~"I9"に掛け算の九九表を出力しました。

Dim i, j
For i = 1 To 9
 For j = 1 To 9
  Cells(i, j).Value = i * j
 Next
Next

RangeではなくCellsを使うことで行と列を同時に使うことができます。

Do~Loopステートメント

For〜Nextは回数を指定した繰り返し処理の仕組みです。一方で現実には繰り返す回数がわからないケースもあります。その場合に使うのがDo~Loopステートメントです。Do~Loopでは条件によって繰り返し処理を指定することが可能であり、具体的な回数が分からない場合にはこちらが使われます。

ステートメント 判定のタイミング 繰り返し処理
Do While~Loop 実行前 条件が真の間
Do~Loop While 実行後 条件が真の間
Do Until~Loop 実行前 条件が真になるまで
Do~Loop While 実行後 条件が真になるまで

Do~Loopステートメントには全部で4種類の組み合わせ(パターン)があります。まずは大枠のWhileUntilの違いから学んでいきます。

WhileとUntilの違い

まずは2つの基本的な構文を比較します。

While
Do While 条件
 処理
Loop
Until
Do Until 条件
 処理
Loop

構文はほとんど同じですが下記のような違いがあります。

While:条件が真の間繰り返す
Until:条件が真になるまで繰り返す

「iの値が5以下である」という条件で比較

具体的に「iの値が5以下である」という条件で2つの構文を比べてみましょう。

Whileを使った場合
Sub loop_while()
Dim i: i = 1
Do While i <= 5
    Cells(i, 1).Value = i
    i = i + 1
Loop
End Sub

Untilを使ったプログラムは何も出力されません。しかしWhileを使った方はセル"A1"~"A5"に1~5の値が出力されます。WhileとUntilの部分が異なるだけなのですがなぜでしょうか?

Untilを使った場合
Sub loop_until()
Dim i: i = 1
Do Until i <= 5
    Cells(i, 1).Value = i
    i = i + 1
Loop
End Sub

Whileは指定された条件の間であれば処理が繰り返されます。スタートの時点でiの値は5以下(i = 1)だったので、処理は実行されました。しかしUntilの場合、条件を満たせば処理は終了します。初めからiの値は5以下の条件は満たしていたため、何も処理が実行されることはありませんでした。条件が真の間は繰り返すのがWhile、条件が真になるまで繰り返すのがUntil..といった違いとなっています。

判定のタイミングを後に

処理を先に実行して、判定のタイミングを後回しにすることもできます。While(Until) 条件よりもDo 処理が先に来ている点に注目して下さい。

While
Do 処理
Loop While 条件
Until
Do 処理
Loop Until 条件

これによって判定より前に必ず一度は(条件が成立しない場合でも)処理が実行されるようになります。

Discussion

ログインするとコメントできます