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

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

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

For 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


For Next をステップ イン実行で目で見て確認しましょう。

マクロを1行ずつ実行する方法を、ステップ インと呼びます。
コーディングとデバッグ
効率的なコーディングと、プログラム作成では避けて通れないデバッグについて説明します。また、陥りやすい間違い、よくやってしまう間違い等も説明しておきます。効率的なコーディング モジュールの移動 コール先のSubプロシージャーやFunctionプロシージャーに移りたい場合があります。
デバッグの基礎
・デバッグとは ・論理エラーと文法エラー ・イミディエイトウィンドウ ・ブレークポイント ・ステップ実行 【ここでのポイント】 あまりにも範囲が広いためどこまでが出題範囲なのか悩ましいてころです。デバッグそのものを問う問題だとしても例文にVBAコードが存在する場合はそもそもVBAの基礎そのものが問われることになります。

VBA Excel 画像

VBA Excel 画像

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

VBA Excel 画像

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

VBA Excel 画像

VBA Excel 画像

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

VBA Excel 画像

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

VBA Excel 画像

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

1行置きに処理する場合

1行目、3行目、5行目・・・
このように、1行置きに処理する場合のFor Nextの書き方です。

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

このように、Stepを書き加えます。

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

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

マクロ再入門:第20回.全てのシートに同じ事をする(For~Worksheets.Count)
エクセルの作業で最も面倒かつ時間のかかる作業は同じ作業の繰り返しでしょう1回だけなら数秒でもそれを何十回と繰り返すとなると… 多くのシートがあり同じ作業を全シートに行うとなると…マクロの出番です。シートの指定方法はWorksheets(_シート名_) Worksheets(インデックス) ActiveSheet この3通りを紹介しました。

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)
エクセルの表とは、横に項目が並び、縦にデータが入っているものです、この表を、簡単に計算できなければマクロを作る意味がありません、同じ計算を、データ行数分繰り返すマクロVBAコードです。以下の表で、データ行数分繰り返し計算をやってみましょう。
第6回.表の先頭から最終行まで繰り返す(ForとEnd(xup).Row)
エクセルの表は、横の項目はあまり変更はないものですが、縦のデータ数、つまり行数は常に変わるものです、前回のように、固定の回数しか繰り返せないのでは困ります、データ数に応じて、最終行まで繰り返す方法が必要です。データの最終行が分かれば良いのです。
ForとIfのネストこそがVBAの要点
VBA習得で最も肝心なものは、For文とIf文をしっかりと覚えることです、そして、For文とIf文をネストさせるプログラミング技術の習得です。For~Nextステートメントは、繰り返し処理 If~EndIfステートメントは、条件分岐 つまり、条件により分岐しつつ繰り返し処理を行う。
For Next の使い方いろいろ
VBAの繰り返し処理としては、ForNextまたはDoLoop この二つを最初に学んだのではないでしょうか。プログラムにおける繰り返し処理は、基本中の基本です。特に使用頻度の高いForNextを重点的に学んでいることと思いますが、書き方、使い方は、いくつかのパターンがあります。



同じテーマ「マクロ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 ・・・新着記事一覧を見る

Byte配列と文字コード関数について|VBA技術解説(8月20日)
PowerQueryの強力な機能をVBAから利用する方法|VBA技術解説(8月4日)
練習問題31(セル結合を解除して値を埋める)|VBA練習問題(7月30日)
練習問題30(マトリックス→リスト形式)|VBA練習問題(7月25日)
Applicationを省略できるApplicationのメソッド・プロパティ一覧|VBA技術解説(7月22日)
コレクション(Collection)の並べ替え(Sort)に対応するクラス|VBA技術解説(7月20日)
CSVの読み込み方法(ジャグ配列)|VBAサンプル集(7月15日)
その他のExcel機能(グループ化、重複の削除、オートフィル等)|VBA入門(7月14日)
オートフィルタ退避回復クラスを複数シート対応させるVBAクラス|VBA技術解説(7月6日)
オートフィルタを退避回復するVBAクラス|VBA技術解説(7月6日)


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

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



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

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


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




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