マクロ講座超入門 14回 For~Nextステートメントで決めた回数繰り返す

マクロ講座超入門14回 For Nextステートメント

マクロ動画解説For~Nextステートメントで決めた回数繰り返す
 

Excel塾のマクロ講座超入門14回

VBAのFor~Nextステートメントで決めた回数繰り返す

動画版「Excel塾のマクロ講座超入門14回」です。
この動画ではVBAにおける繰り返し処理や条件分岐について解説していきます。
今回はFor ~Nextステートメント についてです。
繰り返し処理にはその内容に応じて、For ~Nextステートメント For Each Nextステートメント Do Loopステートメント 等があります。VBAにおける繰り返し処理や条件分岐について解説していきます。

For~Nextステートメントで決めた回数繰り返す

https://youtu.be/knk0fmTdVac

毎日のExcelの作業で大変な繰り返し処理を扱うコード

VBAの繰り返し処理には、For Nextステートメントを使ったり、For Eachステートメントを使ったり、Do Loop ステートメントを使います。

For Nextステートメント1

For Nextステートメントは、特定の回数だけ処理を繰り返す場合に使われます。 For...Nextステートメントにおける繰り返し処理のことをループ処理、 または、「ループ」と呼びます。 For...Nextステートメントでは、終了条件が満たされていない場合に、ループ内のステートメントが再 び実行され、終了条件が満たされた場合に、ループから抜け出してNextステートメントの次のステートメ ントに処理が移ります。

For Nextステートメント2

サンプルで見てみましょう。
以下の図では”行は変数”という変数が1から10まで変わります。
すると レンジ A 1 から A 10まで変わっていくことになり、 そのRange("A" & 行は変数).Valueは、”行は変数”の3倍となります。

For Nextステートメント3
Sub Macrosample() ' For...Next A1:A10まで
    Dim 行は変数 As Long
    For 行は変数 = 1 To 10
        Range("A" & 行は変数).Value = 行は変数 * 3
    Next 行は変数
End Sub

”行は変数”という変数が不思議に思った方もいるかもしれません。VBAでは、 変数に日本語が使えますから、わかりやすい日本語を変数にしても良いのです。
また、As Long という型がおかしい、As Integer ではないのか?と思った方は、古いExcelの記憶がある方かもしれません。
2016年頃から、ExcelではIntegerを内部でLong型に変換しており、コード上に書かれているIntegerをすべてLong型で処理しているのです。 ですから、変数が整数の場合に、Integerと書くことは間違いではありませんが、Long型に統一した方がExcelVBA的にはやさしい書きかたかもしれません。

For Nextステートメント4

繰り返しの変数としてよく使われるのが、 i ですが、他にもj,k,l,m,n... 等が使われます。

For Nextステートメント5

ステップ実行で1行ずつの処理を確認する

マクロはコードを1行1行確認しながら実行する、「ステップ実行」という確認作業ができます。
ステップ 実行を行うことで、対応するコードがどのような動きをしているのか、ゆっくり目で確かめながら確認できます。

For Nextステートメント6

実行するプロシージャ内にカーソルを置いて、F8キーを押すか、メニューのでバックからステップインをクリックします。

For Nextステートメント7

A1:A10の範囲には、何も値が入っていませんが、マクロ実行するにつれて、”行は変数”が1の時には、3が入力され、2の時には6が入力されるのがわかります。

For Nextステートメント8

変数が10になると、次の11では処理はされずに、End Subに処理が移動し終了します。

For Nextステートメント9

変数を日本語から i に変えて行っても結果は同じです。

For Nextステートメント10

繰り返しの増加値を1以外にする Stepキーワード

1回目の次は3回目、その次は5回目などというように、1回のループで増加する値を1以外にしたい場合は、 Stepキーワードを使って指定します。
以下のサンプル画では、A1:A10までの背景色がColorIndex = 8で塗られていますが、その後で、 i の値が2つずつ増加するように、Step 2で対象のセルの背景をColorIndex = 15で塗っています。

For Nextステートメント11
Sub Macrosample() ' For...Next A1:A10まで
    Dim i As Long
    For i = 1 To 10 Step 2
        Range("A" & i).Interior.ColorIndex = 15
    Next i
End Sub