第16回.繰り返し処理(For Next)
VBAのFor Nextは、同じ処理を繰り返し行うためのVBA構文です。
マクロでのループ処理の記述は何通りかありますが、
まず最初に覚えるべきものが、今回説明するFor Nextです。
マクロVBAで処理を自動化する為の必須記述になります。
この表の全データを、For Nextを使って短い記述で繰り返し処理できるようになります。
For Next ステートメント
[statements]
[Exit For]
[statements]
Next [counter]
counter | 必ず指定します。 カウンタに使う数値変数を指定します。 配列変数およびブール型 (Boolean) に含まれる変数は指定できません。 |
start | 必ず指定します。 引数 counter の初期値を指定します。 |
end | 必ず指定します。 引数 counter の最終値を指定します。 |
step | 省略可能です。 ループを繰り返すごとに引数 counter に加算される値を指定します。 引数 step を省略すると、ループを繰り返すごとに引数 counter には 1 が加算されます。 |
statements | 省略可能です。 ループ内で実行される一連のステートメントで、For と Next の間に記述します。 ここに記述したステートメントは、For...Next ステートメントで指定した回数だけ実行されます。 |
これは、Excelのヘルプからの抜粋です。
これを読んでわかるなら苦労しないし、このサイトは見ないでしょうから、
詳しく、説明します。
・・・処理・・・
Next
このカウンター変数は、省略可能です。
見栄えだけの問題と考えてもらって構いません、書いても書かなくても問題ありません。
当サイト内でも、書いてあったりなかったりしていますが、特に意図はありません。
For Next 例文
A1セルからA10セルに、1を入れる場合です。
Sub 練習1()
Dim i
For i = 1 To 10
Cells(i, 1) = 1
Next
i
End Sub
つまり、
Cells(1, 1) = 1
Cells(2, 1) = 1
・・・
Cells(10, 1) = 1
このように、順に変数iを1~10で実行してくれます。
1行ずつ説明を書くと
Sub 練習1()
Dim i '変数iを宣言
For i = 1 To 10 '変数iを1から10まで1づつカウントアップ
Cells(i, 1) = 1 'A列のi行目のセルに1を入れる
Next i 'Forの範囲はここまで
End Sub
For Next をステップ イン実行で目で見て確認しましょう。


ステップ イン実行、F8を押します。

F8を押すごとに、黄色い行が進んでいきます。



その時々のシートの状態を確認してください。

1行置きに処理する場合
このように、1行置きに処理する場合のFor Nextの書き方です。
Sub 練習2()
Dim i
For i = 1 To 10 Step
2
Cells(i, 1) = 1
Next i
End Sub
このように、Stepを書き加えます。
これが1行置きの指定です。
iが2ずつ増えていきます。
つまり、これを書かない時は、
Step 1
と言う事です。
Step -1
とすれば、iは1ずつ減っていきます。
セルの行を下から処理したい場合や、シートを後ろから処理したい場合です。
これは非常に多くの場合に使用されます。
Exit For
For~Nextのループ処理を終了したい場合に使用します。
特定の条件になった場合は、指定回数の処理を完了する前にループを抜けたい場合に使用します。
Sub 練習3()
Dim i
For i = 1 To 10
If Cells(i, 1) <> "" Then
Exit For
End If
Cells(i, 1) = 1
Next
End Sub
10行目まで繰り返したいが、
A列に既に値が入っていたら、そこで終了するという処理になります。
For~Nextのネスト(入れ子)
Sub 練習3()
Dim i, j
For i = 1 To 10
For j = 1 To
10
Cells(i, j) = 1
Next j
Next i
End
Sub
F8ステップインで実行して、内側のForから外側のForに移る様子を確認して下さい。
あまり多くのネストをしてしまうと可読性(読みやすさ)が低下します。
最後に一言
これが曖昧では、実務でマクロVBAを使う事は出来ません。
以下の記事も参考に、ぜひしっかり習得してください。
同じテーマ「マクロVBA入門」の記事
第13回.定数宣言のConstと型宣言文字
第14回.文字の結合(&アンパサンド)と継続行(_アンダーバー)
第15回.四則演算と注釈(コメント)
第16回.繰り返し処理(For Next)
第17回.繰り返し処理(Do Loop)
第18回.最終行の取得(End,Rows.Count)
第19回.総合練習問題1
第20回.条件分岐(IF)
第21回.条件分岐(ElseIf)
第22回.条件分岐(Select Case)
第23回.メッセージボックス(MsgBox関数)
新着記事NEW ・・・新着記事一覧を見る
VBA100本ノック 79本目:Wordにセル範囲を図として挿入|VBA練習問題(2月1日)
VBA100本ノック 78本目:グラフのデータ範囲拡張|VBA練習問題(1月30日)
VBA100本ノック 77本目:シート挿入イベント|VBA練習問題(1月29日)
VBA100本ノック 76本目:ボタンの表示名の位置へ移動|VBA練習問題(1月27日)
VBA100本ノック 75本目:ログインフォームの作成|VBA練習問題(1月26日)
VBA100本ノック 74本目:1シート複数表をDB形式に変換|VBA練習問題(1月25日)
VBA100本ノック 73本目:新規ブックにボタン作成しマクロ登録|VBA練習問題(1月23日)
VBA100本ノック 72本目:ITをDXに変換(文字列操作)|VBA練習問題(1月22日)
VBA100本ノック 71本目:パワーポイントへグラフを貼り付け|VBA練習問題(1月20日)
VBA100本ノック 70本目:ステータスバーに1秒ごとに時刻が表示|VBA練習問題(1月19日)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.マクロって何?VBAって何?|VBA入門
5.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.とにかく書いてみよう(Sub,End Sub)|VBA入門
10.マクロはどこに書くの(VBEの起動)|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。