同じ処理を指定した回数だけor条件が成立する間、繰り返します。
1行目、2行目、100行目…に連番で数字を入力していくマクロを作るのに、
Cellsを100回書くのはとても面倒ですね。また、間違ってかいてしまうかもしれません。
反復処理は、一回分の処理と繰り返す回数を変えてやればよいです。同じ処理を何回も書く必要がなく便利です。
反復処理は、3種類あります。
For文
For カウンタ = 開始 To 終了 Step 加算 処理Next
- 開始から終了までの回数文の処理を繰り返します。
- 処理が一回終わるごとに、カウンタに「加算」を加えます。
- カウンタが「終了」を越えるとfor文 を終了
- カウンタはマイナス値も可
例
エクセルの一列目に100まで連番をふります
For i = 1 To 100 Step 1 Cells(i, 1).Value = iNext
カウンタ:i
開始:1
終了:100
加算:1
となり、カウンタが1~100(100回)になるまで処理を繰り返します。
Forを途中で抜ける exit For
Exit forを使えば、カウンタの値に関係なく途中でfor文を終了します。
例
1列目を下にチェックしていき、”stop!”があればforを抜けます。なければ、連番を振ります。
For i = 1 To 100 Step 1 If Cells(i, 1).Value = "stop!" Then Exit For End If Cells(i, 1).Value = iNext
実行結果(実行前→実行後)
While文
指定する条件式が成立している間は処理を繰り返します。
While 条件式 処理WEnd
- 条件式が成立(True)する限り、処理を繰り返す。
- 判別式については、こちらを参照
例
エクセルの一列目を下方向に色を塗っていく。セルに文字が入っていたら終了。
While (Cells(i, 1).Value = "") Cells(i, 1).Interior.Color = RGB(255, 255, 0) i = i + 1Wend
- 条件式:(Cells(i, 1).Value = “”) エクセルが空である
実行結果(実行前→実行後)
While を途中で抜けることはできない
For文ではExit forで途中で抜けることができましたが、While~WendはExitを使うことはできません。
Do Loop 文
for,while文は処理実行前に条件式をチェックするのに対して、Do Loopは条件式を前後いずれかに選べます。
前条件
処理の前に条件式による判別を行う。「while 条件式」をDoの直後に書きます。
Do while 条件式 処理Loop
後条件
処理の後に条件式による判別を行う。「while 条件式」をLoopの直前に書きます。
Do 処理 while 条件 Loop
例
エクセルの一列目を下方向にチェック。セルが空でない場合に終了。
前条件
Do While (Cells(i, 1).Value = "") Cells(i, 1).Interior.Color = RGB(255, 255, 0) i = i + 1Loop
後条件
Do Cells(i, 1).Interior.Color = RGB(255, 255, 0) i = i + 1Loop While (Cells(i, 1).Value = "")
実行結果(実行前→実行後)
Do Loopを途中で抜ける exit Do
例
エクセル1列目を下方向にチェックし、文字がある場合にforを抜けます。
Do While (True) If Cells(i, 1).Value <> "" Then Exit Do End If Cells(i, 1).Value = i i = i + 1Loop
- 条件式:TRUE 常に条件が成立する
実行結果(実行前→実行後)
同じ処理を繰り返し行う(For /While /Do) まとめ
- 同じ処理を繰り返すには、For/while/Doがある。
- For、DoはExitにより処理を途中で抜けることができる。
- WhileはExitを使うことができない。
- Doは処理の前後のいずれかに条件を判別することができる。