2018年8月9日木曜日

【エクセルVBA】繰り返し処理(For /While /Do)

event_note8月 09, 2018

同じ処理を指定した回数だけ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は処理の前後のいずれかに条件を判別することができる。