第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が加算されます。 つまり省略時は、Step 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行置きの指定です。
つまり、これを書かない時は、
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 ・・・新着記事一覧を見る
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.メッセージボックス(MsgBox関数)|VBA入門
9.条件分岐(Select Case)|VBA入門
10.ブック・シートの選択(Select,Activate)|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。