エクセルバージョン
マイクロソフト365
今回はエクセルVBAの繰り返し処理に関していろいろなパターンがあるのでご紹介していきたいと思います。
それではいってみましょう!
Menu
For~Next
For 変数 = 開始値 to 終了値
処理
Next
A1~A10に連番を入力
1 2 3 4 5 6 | Sub ForNext() Dim i As Integer For i = 1 To 10 Cells(i, 1) = i Next End Sub |
Do Until~Loop
Do until 指定回数まで
処理
Loop
A1~A10に連番を入力
1 2 3 4 5 6 7 8 9 10 | Sub Do_Until_Loop() Dim i As Integer i = 1 Do Until i > 10 'Trueになるまでループさせる Cells(i, 1) = i i = i + 1 Loop End Sub |
Do While~Loop
Do While 指定回数の間
処理
Loop
A1~A10に連番を入力
1 2 3 4 5 6 7 8 9 | Sub Do_While_Loop() Dim i As Integer i = 1 Do While i <= 10 'Trueの間ループさせる Cells(i, 1) = i i = i + 1 Loop End Sub |
参考例:繰り返しと時間設定
While~Wend
While 指定回数の間
処理
Wend
A1~A10に連番を入力
1 2 3 4 5 6 7 8 | Sub While_Wend() Dim i As Integer i = 1 While i <= 10 Cells(i, 1) = i i = i + 1 Wend End Sub |
Do~Loop Until
Do
処理
Loop Until 指定回数まで
A1~A10に連番を入力
Loopが処理の後に記述してる方式なので必ず処理が1回実行されます。
この必ず1回処理を実行することで使用用途によっては便利に機能する場合があります。
1 2 3 4 5 6 7 8 9 | Sub Do_Loop_Until() Dim i As Integer i = 1 Do 'Trueになるまでループさせる(最初の1回は必ず実行される) Cells(i, 1) = i i = i + 1 Loop Until i > 10 End Sub |
Do~Loop While
Do
処理
Loop While 指定回数の間
A1~A10に連番を入力
Loopが処理の後に記述してる方式なので必ず処理が1回実行されます。
この必ず1回処理を実行することで使用用途によっては便利に機能する場合があります。
1 2 3 4 5 6 7 8 9 | Sub Do_Loop_While() Dim i As Integer i = 1 Do 'Trueの間ループさせる(最初の1回だけは実行される) Cells(i, 1) = i i = i + 1 Loop While i <= 10 End Sub |
参考例:配列を削除
For Each~Next
For Each エレメント In コレクション(Rangeなど)または配列
処理
Next
特徴としては指定した範囲をZ状に処理していきます。
1 2 3 4 5 6 7 8 9 10 11 12 | Sub ForEach() Dim rng As Range Dim i As Integer Range("A:E").ClearContents i = 1 For Each rng In Range(Cells(1, 1), Cells(5, 5)) rng = i i = i + 1 Next End Sub |
参考例:Webスクレイピング(繰り返し処理(ForEach))
繰り返し処理を途中で抜ける
Exit For
For~NextやFor Eachステートメントを使用する場合
ifを使用して、変数iが5になったらForを抜けるサンプル
1 2 3 4 5 6 7 8 9 10 | Sub forで途中終了() Dim i As Integer For i = 1 To 10 If i = 5 Then Exit For End If Next End Sub |
【結果】
デバッグで確認してみると変数iが5でForを抜けてるのが確認できます。
参考例:①getElementsByTagName(”タグ名(要素名)“)
Exit Do
Do~Loopステートメントを使用する場合
ifを使用して、変数iが5になったらDoを抜けるサンプル
1 2 3 4 5 6 7 8 9 10 11 12 | Sub Do途中終了() Dim i As Integer i = 1 Do Until i > 10 If i = 5 Then Exit Do End If i = i + 1 Loop End Sub |
【結果】
デバッグで確認してみると変数iが5でDoを抜けてるのが確認できます。
繰り返し処理の途中で処理を終了
Exit Sub
ifで変数iが5より大きくなったら処理を終了するサンプル
1 2 3 4 5 6 7 8 9 10 11 12 | Sub exit_sub() Dim i As Integer For i = 1 To 10 If i > 5 Then Exit Sub End If Debug.Print i Next End Sub |
参考例:指定時間止めてから実行のサンプル
繰り返し処理をスキップ
GoTo
GoToステートメントを使用することでスキップが可能です。
5だけスキップさせたい時の例です。
ifとGoToを上手く利用します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | Sub goto_skip() Dim i As Integer 'A1~A10セルに数字を書き込む For i = 1 To 10 If i = 5 Then '変数iが5だったら GoTo skip 'GoToステートメントでskip;行に飛ばす End If Cells(i, 1) = i 'A列に書き込む skip: 'スキップ位置 Next End Sub |
【結果】
5だけスキップします\(^^)/
Step
Stepキーワードを使用するとカウンター変数の増減をコントロールできます。
~ずつ増加させる場合
Step 2にすることで、プラス2ずつ増加していきます。
1 2 3 4 5 6 7 8 | Sub step増加() Dim i As Integer For i = 1 To 10 Step 2 Debug.Print i Next End Sub |
【結果】
~ずつ減少させる場合
開始値を終了値よりも大きな値にします。
Step -2にすることで、マイナス2ずつ減少していきます。
1 2 3 4 5 6 7 8 | Sub step減少() Dim i As Integer For i = 10 To 1 Step -2 Debug.Print i Next End Sub |
【結果】
参考例:配列(指定位置に追加)
DoEvents
オペレーティング システム(OS)が他のイベントを処理できるように、実行を渡します。
ループ処理に時間がかかる場合はDoEventsを使用します。
1 2 3 4 5 6 7 8 9 10 11 | Sub do_Events() Dim i As Integer Do While i < 10000 DoEvents Debug.Print i i = i + 1 Loop End Sub |
まとめ
繰り返し処理はVBAでは頻繁に使用する必須のものですが、私も書き方をすぐ忘れるので記事にしました。
エクセルにはいろいろなパターンの繰り返し処理がありますので、その場に応じて使い分けていきましょう(^^)
以上です。