ExcelマクロVBA入門
第16回.繰り返し処理(For Next)

Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説
最終更新日:2018-06-14

第16回.繰り返し処理(For Next)

VBAのFor Nextは、同じ処理を繰り返し行うためのVBA構文です。


VBAで繰り返し処理をする方法は何通りかありますが、

最も頻繁に使われていて、最も簡単便利であり、

まず最初に覚えるべき繰り返し処理のVBA構文がFor Nextになります。



For Nextは、繰り返し処理をするためのステートメントで、
同じ処理を複数回繰り返したい場合に使います、
マクロで処理を自動化する為の必須記述になります。

エクセルの表とは、横に項目が並び、縦にデータが入っている事が多いわけですが、
この表の全データを、For Nextを使って短い記述で繰り返し処理できるようになります。

繰り返し処理はループ処理とも呼ばれます。
マクロでのループ処理の記述は何通りかありますが、
まず最初に覚えるべきものが、今回説明するFor Nextです。

それでは、For Nextの基本的な構文から確認していきましょう。


For Next ステートメント

指定した回数だけ、一連のステートメントを繰り返すフロー制御ステートメントです。

構文

For counter = start To end [Step step]
  [statements]
  [Exit For]
  [statements]

  
Next [counter]

counter 必ず指定します。
カウンタに使う数値変数を指定します。
配列変数およびブール型 (Boolean) に含まれる変数は指定できません。
start 必ず指定します。
引数 counter の初期値を指定します。
end 必ず指定します。
引数 counter の最終値を指定します。
step 省略可能です。
ループを繰り返すごとに引数 counter に加算される値を指定します。
引数 step を省略すると、ループを繰り返すごとに引数 counter には 1 が加算されます。
statements 省略可能です。
ループ内で実行される一連のステートメントで、For と Next の間に記述します。
ここに記述したステートメントは、For...Next ステートメントで指定した回数だけ実行されます。

これは、Excelのヘルプからの抜粋です。
これを読んでわかるなら苦労しないし、このサイトは見ないでしょうから、

詳しく、説明します。

まず、ステートメントとは、マクロの挙動を制御する構文、命令文です。

では、上記構文の余分なものを消して、日本語に直してみましょう。

For 変数 = 開始数値 To 終了数値
  ・・・処理・・・
Next

つまり、変数開始数値から終了数値になるまで繰り返すということです。

※Nextの後ろに書くカウンター変数
Next [カウンター変数]
このカウンター変数は、省略可能です。
見栄えだけの問題ですので、書いても書かなくても問題ありません。
当サイト内でも、書いてあったりなかったりしていますが、特に意図はありません。



例文で理解を深めましょう。

A1セルからA10セルに、1を入れる場合です。

Sub 練習1()
  Dim i
  For i = 1 To 10
    Cells(i, 1) = 1
  Next i
End Sub

変数iが、1から10まで、自動的にアップしていきます

つまり、

Cells(1, 1) = 1
Cells(2, 1) = 1
・・・
Cells(10, 1) = 1

と、順に、変数i1〜10で実行してくれます。

1行ずつ説明を書くと

Sub 練習1()
  Dim i        '変数iを宣言

  For i = 1 To 10   '変数iを1から10まで1づつカウントアップ
    Cells(i, 1) = 1 '値列のi行目のセルに1を入れる
  Next i        'Forの範囲はここまで
End Sub



ステップ イン実行で目で見て確認しましょう。
マクロを1行ずつ実行する方法を、ステップ インと呼びます。
コーディングとデバッグ
デバッグの基礎

VBA Excel 画像

VBA Excel 画像


SubからEnd Subの範囲内に入力カーソルがある状態で、
ステップ イン実行、F8を押します。

VBA Excel 画像

黄色い行は、これからこの行を実行するという事です。
F8を押すごとに、黄色い行が進んでいきます。

VBA Excel 画像

VBA Excel 画像

マウスカーソルを変数の上に当てると、変数の値がポップアップ表示されます。

VBA Excel 画像

F8を次々に押しながら、
その時の、シートの状態を確認してください。

VBA Excel 画像

変数の変化と、シートの変化を実際に見て確認してください。


では、1行目、3行目、5行目・・・
このように、
1行置きに処理する場合

Sub 練習2()
  Dim i
  For i = 1 To 10 Step 2
    Cells(i, 1) = 1
  Next i
End Sub

と指定します。

Step 2

これが1行置きの指定です、iが2ずつ増えていきます
つまり、これを書かない時は、

Step 1

と言う事です。
このStepは、マイナス数値も指定できます

Step -1

とすれば、iは、1ずつ減っていきます。
セルの行を下から処理したい場合や、シートを後ろから処理したい場合です。
これは非常に多くの場合に使用されます。

マクロ再入門:第20回.全てのシートに同じ事をする(For〜Worksheets.Count)



Exit For

Exit Forは、For〜Nextのループを抜けます。

指定の終了数値に達する前に、
For〜Nextのループ処理を終了したい場合に使用します。

通常のFor〜Nextは指定回数繰り返す為に使うので、Exit Forを使う事はすくないのですが、
特定の条件になった場合は、指定回数の処理を完了する前にループを抜けたい場合に使用します。

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のネスト(入れ子)

縦10行、横10列に1を入れる場合です。

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

実行して、確認して下さい。

For〜Nextのネストは何段階でも書けますが、
あまり多くのネストをしてしまうと可読性(読みやすさ)が低下します。

ネストは、概ね3段階までにしましょう。



繰り返し処理はプログラミングの基本中の基本です。
これが曖昧では、実務でマクロを使う事は出来ません。
以下の記事も参考に、ぜひしっかり習得してください。

マクロ再入門

第5回.同じ計算を行数分繰り返す(For〜Next)

第6回.表の先頭から最終行まで繰り返す(ForとEnd(xup).Row)

ForとIfのネストこそがVBAの要点
VBA習得で最も肝心なものは、For文とIf文をしっかりと覚えることです、そして、For文とIf文をネストさせるプログラミング技術の習得です。For〜Nextステートメントは、繰り返し処理 If〜EndIfステートメントは、条件分岐 つまり

For Next の使い方いろいろ





同じテーマ「マクロVBA入門」の記事

定数と型宣言文字(Const)
文字の結合と継続行(&アンパサンド)
四則演算と注釈
繰り返し処理(For Next)
繰り返し処理(Do Loop)
最終行の取得(End,Rows.Count)
総合練習問題1
条件分岐(IF)
条件分岐(ElseIf)
条件分岐(Select Case)
メッセージボックス(MsgBox関数)

新着記事NEW ・・・新着記事一覧を見る

「VBAによる解析シリーズその2 カッコ」をやってみた|エクセル(5月21日)
VBA+SeleniumBasicで検索順位チェッカー作成|VBA技術解説(5月18日)
テーブル操作のVBAコード(ListObject)|VBA入門(5月12日)
テーブル操作の概要(ListObject)|VBA入門(5月12日)
VBAのスクレイピングを簡単楽にしてくれるSelenium|VBA技術解説(5月6日)
Excelワークシート関数一覧(2010以降)|VBAリファレンス(4月22日)
クラスとCallByNameとポリモーフィズム(多態性)|VBA技術解説(4月6日)
VBAでのタイマー処理(SetTimer,OnTime)|VBA技術解説(4月3日)
クラスとイベントとマルチプロセス並列処理|VBA技術解説(4月2日)
エクセルの日付と時刻のまとめ|エクセル関数超技(3月6日)

アクセスランキング ・・・ ランキング一覧を見る

1.ひらがな⇔カタカナの変換|エクセル基本操作
2.最終行の取得(End,Rows.Count)|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.RangeとCellsの使い方|ExcelマクロVBA入門
6.変数とデータ型(Dim)|ExcelマクロVBA入門
7.マクロって何?VBAって何?|ExcelマクロVBA入門
8.繰り返し処理(For Next)|ExcelマクロVBA入門
9.とにかく書いて見よう(Sub,End Sub)|VBA入門
10.セルに文字を入れるとは(Range,Value)|VBA入門



  • >
  • >
  • >
  • 繰り返し処理(For Next)

    このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。






    このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。

    本文下部へ