Excelマクロ&vba[実践ビジネス入門講座]解説| For文・繰り返し処理とは?
本ブログは、著者国本温子さんの『Excelマクロ&vba[実践ビジネス入門講座]』を解説させて頂くブログとなります。
繰り返し処理とは?
繰り返し処理は、マクロにおいて最重要な項目となります。
繰り返し処理とは、一定の条件を満たす限り同じ処理をし続ける構文となります。
For文について
for文とは、指定した数だけ同じ処理を繰り返す処理になります。
以下で例を紹介しますのでなんとなくでいいので理解してみてください。
使い方 | 例 | 意味 |
Dim i as Long | iという数字(Longは数値のデータ型と変数の項目で紹介しています)が入る変数を定義します。 | |
For 変数 = 初期値 To 最終値 | For i = 1 To 5 | iという変数は1~5になります。 |
実行したい処理 | Range("A" & i ) = i | Aiセルに変数iの数値を入れます。 |
Next 変数 | Next i | Forに戻って変数iは次の数字になります。 |
繰り返す回数を指定し、実行したい処理を記述すると、
同じ処理が指定回数分繰り返される特徴があります。
上記の例を実行すると、このような処理が行われます。
A列のセルに変数iを入力する処理を5回繰り返します。
処理の動作としては、上のようなイメージとなります。
先ほどの説明では初期値と最終値を記述し、1ずつ増えて繰り返し処理を行っていましたが以下のような処理もあります。
使い方 | 例 | 意味 |
Dim i as Long | iという数字(Longは数値のデータ型と変数の項目で紹介しています)が入る変数を定義します。 | |
For 変数 = 初期値 To 最終値 step 増やす値 | For i = 1 To 10 step 2 | iという変数は1~10 で2ずつ増えていきます。 |
実行したい処理 | Range("A" & i ) = i | Aiセルに変数iの数値を入れます。 |
Next 変数 | Next i | Forに戻って変数iは次の数字になります。 |
このように、step値を記述することで繰り返しの値を飛ばすことができます。
step値を記述しなかった初めの例は、step 1 を省略していることとなります。
このように、一つ飛ばしで処理が行われます。
処理の動作としては、上のようなイメージとなります。
上記2つの例は変数の数値が増加していく繰り返し処理でしたが、減っていく繰り返し処理もあります。
使い方 | 例 | 意味 |
Dim i as Long | iという数字(Longは数値のデータ型と変数の項目で紹介しています)が入る変数を定義します。 | |
For 変数 = 初期値 To 最終値 step 減らす値 | For i = 5 To 1 step -1 | iという変数は5~1 で1ずつ減っていきます。 |
実行したい処理 | Range("A" & i ) = i | Aiセルに変数iの数値を入れます。 |
Next 変数 | Next i | Forに戻って変数iは次の数字になります。 |
初期値から最終値へ減っていくため、必ずstepマイナス数値を記述しなければいけません。
処理の動作としては、上のようなイメージとなります。
ForとIFを組み合わせるマクロ
上述したFor文と前章で説明したIF文を組み合わせることができれば、ほとんどの事務処理を自動化することができます。
例えば、売上表の中から○万円以上のデータを赤色にする処理や、○○に該当するデータを削除するなどが可能になります。
以下では2点実例を紹介します。
上の売上表より、売上高が500,000以下の列を赤色にするマクロを例として解説します。
①まず対象となる行は3行目~12行目なのでFor i = 3 to 12 となることが予想できます。
次に繰り返す処理を考えます。
②C列が500,000以下の場合、その列の背景色を赤色にするので、IF C列 <= 500,000 ThenというIF文が予想されます。
③IFの条件に合致していれば、その列の色を赤色にするので、その列のA列~C列= 赤色という処理を行います。
マクロ | 意味 |
Dim i as Long | データ型が数値の変数iを定義します。 |
For i = 3 To 12 (Step 1) | 初期値が3~最終値を12として、 以下の繰り返し処理を行います。(Step 1)としているのは省略可能ということです。 |
IF Range("C" & i ) <= 500000 Then | Ciセル(初期値が3なのでC3セル、 以降C4,C5セルとなっていく)が500000以下なら下記の処理を行う。 |
Range("A" & i & ":C" & i ).Interior.Color = vbred | 少しわかりずらいですが、 Range("A" & i & ":C" & i )というのは、Aiセル~Ciセルという意味です。それらの背景色を赤色にします。 |
End if | IF文が終了なので、Ciセルが500000よりも 大きければ何も処理を行いません。 |
Next i | Forに戻って繰り返します。 |
次に、上の売上表より、兵庫支店以外のデータを削除するマクロを例として解説します。
①先程同様、対象となる行は3行目~12行目なので、For i = 3 To 12と書きたくなりますが、行を削除するマクロは要注意です!
行を削除する際は、12 To 3 Step -1 のように、行の下から上へ処理を行うように書かなければいけません。
その理由を後程詳しく解説します。
②兵庫支店以外のデータを削除する=A列が兵庫支店でなければ、その列全体を削除する処理を書きます。
なので、これらをマクロで記述すると、
マクロ | 意味 |
Dim i as Long | データ型が数値の変数iを定義します。 |
For i = 12 To 3 Step -1 | 初期値が12~最終値を3として、 以下の繰り返し処理を行います。 下の行から上の行へ繰り返し処理を行います。 |
IF Range("A" & i ) <> "兵庫支店" Then | Aiセル(初期値が12なのでA12セル、 以降A11,A10~A3セルとなっていく)が兵庫支店ではなければ以下の処理を実行します。 ○○以外ならという不等号は<>になります。 |
Range("A" & i ).EntireRow.delete | Aiセル全体を削除する処理です。 EntireRowについては、プロパティの章で説明しております。 |
End if | |
Next i | Forに戻って繰り返します。 |
For文 削除する場合は下の行から順に処理を行う!
もし、行削除を上の行から処理を行ってしまうと、
1回目の処理
2回目の処理
このように、行がずれてしまいうまく処理ができないので、
行を削除するマクロを記述する際は、下から上へ処理を行うようにしましょう。
エクセルマクロに関する内容をyoutubeで発信しています。
ぜひご覧ください!
ブログの解説本 Excelマクロ&vba[実践ビジネス入門講座]はこちら