ExcelマクロVBA入門 | 第16回.繰り返し処理(For Next) | Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説



最終更新日:2017-12-10

第16回.繰り返し処理(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 [変数]

[変数]は、省略可能です。

例文です。

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行目、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段階までにしましょう。


繰り返し処理はプログラミングの基本中の基本です。
以下の記事も参考に、ぜひしっかり習得してください。

マクロ再入門





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

第17回.繰り返し処理(Do Loop)
第18回.最終行の取得(End,Rows.Count)
第19回.総合練習問題1
第20回.条件分岐(IF)
第21回.条件分岐(ElseIf)
第22回.条件分岐(Select Case)
第23回.メッセージボックス(MsgBox関数)

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

大量VlookupをVBAで高速に処理する方法について|ExcelマクロVBA技術解説(12月12日)
オセロを作りながらマクロVBAを学ぼう|ExcelマクロVBAサンプル集(11月26日)
ScreenUpdating=False時にエラー停止後にシートが固まったら|ExcelマクロVBA技術解説(11月21日)
データクレンジングと名寄せ|ExcelマクロVBA技術解説(10月20日)
SUMIFの間違いによるパフォーマンスの低下について|エクセル関数超技(6月17日)
条件式のいろいろな書き方:TrueとFalseの判定とは|ExcelマクロVBA技術解説(6月15日)
空白セルを正しく判定する方法2|ExcelマクロVBA技術解説(5月6日)
フルパスをディレクトリ、ファイル名、拡張子に分ける|ExcelマクロVBA技術解説(4月15日)
テキストボックスの各種イベント|Excelユーザーフォーム入門(4月9日)
フォルダ(サブフォルダも全て)削除する、Optionでファイルのみ削除|ExcelマクロVBAサンプル集(4月4日)

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

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



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

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


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

    ↑ PAGE TOP