【VBA For Next】ループ処理の基本を5つのステップで完全理解

For Nextステートメント を使った繰り返し処理

VBAで繰り返し処理を実行したい
For Nextの基本的な使い方について知りたい
繰り返し処理を途中で終了したりスキップしたい

あなたはFor Nextステートメントを使ってますか? For Nextステートメントは繰り返し回数を数えるカウンタが所定の回数に到達するまで繰り返し処理を行う場合に使われます。

繰り返し処理はあらゆるプログラミング言語で最も基本的な処理となります。

この記事では、For Nextステートメントの使い方という基本的な内容から、繰り返し処理を途中で抜けたりスキップする応用的な使い方まで5つのステップで理解できるようになっています。

  • For Nextの基本
  • Exit Forでループを抜ける方法
  • GoToでループをスキップする方法
  • For Nextのネスト(入れ子)
  • For Eachで配列を操作する方法

ぜひFor Nextステートメントの基本を理解して実務で役立ててください。

目次

VBAのFor Nextステートメントとは

For Nextステートメントは、繰り返し回数を数えるカウンタが所定の回数に到達するまで繰り返し処理を行う場合に使われます。For Nextステートメントは以下のように記述します。

For カウンタ名 = 初期値 To 到達値
    処理
Next カウンタ名

繰り返し回数を数えるカウンタ名を指定し、それの初期値から到達値に達するまで繰り返し処理を行います。

VBAのFor Nextを理解するための5つのステップ

VBAのFor Nextの基本的な使い方

ここではFor Nextステートメントの基本的な使い方を理解しましょう。

まずは簡単な例として、初期値に1、到達値に10を入れた場合は1 ~ 10まで繰り返し処理を実行することができます。サンプルコードで確認しましょう。

Sub macro1()
    Dim arr() As Variant, i As Integer, str As String
    arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    
    For i = 0 To 9
        str = str & arr(i) & ", "
    Next i
    
    MsgBox str
End Sub

実行結果:
For03

このサンプルコードではまず、Variant型の配列arrを宣言、初期化しています。そしてFor NextステートメントのカウンタにInteger型の変数iを指定し、配列arrの要素にインデックス番号0(ゼロ)から順にアクセスしています。

Stepの使い方

Stepステートメントを使うことでループを1回まわすごとのカウンタ値の増減数を変えることができます。以下のように記述します。

For カウンタ名 = 初期値 To 到達値 Step 増減数
    処理
Next カウンタ名

ちなみに、増減数が1の場合は「Step 増減数」の部分は省略することができます。サンプルコードで確認しましょう。

Sub macro1()
    Dim arr() As Variant, i As Integer, str As String
    arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    
    For i = 0 To 9 Step 2
        str = str & arr(i) & ", "
    Next i
    
    MsgBox str
End Sub

実行結果:
For04

このサンプルコードではまず、Variant型の配列arrを宣言、初期化しています。そしてFor NextステートメントのカウンタにInteger型の変数iを指定し、配列arrの要素にインデックス番号0(ゼロ)から順にアクセスしています。

Stepステートメントで2と設定しているので、2つおきにアクセスしています。

デクリメント(マイナス)で逆順に回す

Stepステートでマイナスの値を指定すると、デクリメント(マイナス)で逆順にループを回すことができます。サンプルコードで確認しましょう。

Sub macro1()
    Dim arr() As Variant, i As Integer, str As String
    arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    
    For i = 9 To 0 Step -2
        str = str & arr(i) & ", "
    Next i
    
    MsgBox str
End Sub

実行結果:
For01

このサンプルコードではまず、Variant型の配列arrを宣言、初期化しています。そしてFor NextステートメントのカウンタにInteger型の変数iを指定し、配列arrの要素にインデックス番号の大きい値から順にアクセスしています。

カウンタiの増減数は-2ですので、配列arrの要素を1つずつ飛ばしながらアクセスしています。

Exit Forでループを抜ける方法

ループ処理では、ある条件を満たすとそれ以降は処理を行わずにループから抜けたい場合があります。そんな場合にはExit Forステートメントを使用します。

サンプルコードで確認しましょう。

Sub macro2()
    Dim i As Integer, subject As String
    
    For i = 2 To 10
        If Not IsNumeric(Range("B" & i)) Then
            subject = Range("A" & i)
            Exit For
        End If
    Next i
    
    MsgBox subject & "には数値以外の値が入っています"
End Sub

実行結果:
For02

このサンプルコードでは、Excelシートの点数部分のセルに数値以外の値が入力されていないか確認を行い、数値以外の値が確認されればFor Nextステートメントのループから抜けるように記述しています。セルに数値が入力されているか、それ以外か確認するためにIsNumeric関数を用いています。

IsNumeric関数は引数が数値の場合はTrueを返し、それ以外はFalseを返します。物理以外の教科でも数値以外の値が入力されていますが、そちらは表示されていませんので物理の5行目まででFor Nextステートメント内の処理は終了していることがわかります。

GoToでループをスキップする方法

ループ処理では、ある条件の場合はそれ以降の処理を省略してループ内の先頭の記述にスキップしたい場合があります。VBA以外のプログラミング言語だとcontinueを使うのが一般的ですが、vbaの場合はGoToステートメントを使用します。

サンプルコードで確認しましょう。

Sub macro3()
    Dim i As Integer, sum As Integer
    
    For i = 2 To 10
L1:
        If Not IsNumeric(Range("B" & i)) Then
            i = i + 1
            GoTo L1
        End If
        
        sum = sum + Range("B" & i)
    Next i
    
    MsgBox "合計点数は" & sum & "点です"
End Sub

実行結果:
GoTo02

このサンプルコードでは、Excelシートのセルに入力されている点数の合計を求めています。セルに数値以外の値が入力されている場合は、GoToステートメントを使って合計を算出する処理をスキップして、For Nextステート内の先頭にあるラベルL1にジャンプしています。

GoToステートメントについては、こちらでも詳しく解説していますので、ぜひ参考にしてください。

For Nextのネスト(入れ子)

For Nextステートメントの中に、さらにFor Nextステートメントを記述することができます。これをネスト(入れ子)といいます。

サンプルコードで確認しましょう。

Sub macro4()
    Dim i As Integer, j As Integer, str As String
    
    For i = 1 To 3
        For j = 1 To 4
            str = str & i & "年" & j & "組" & ", "
        Next j
        
        str = str & vbCrLf
    Next i
    
    MsgBox str
End Sub

実行結果:
For05

For Eachで配列を操作する方法

繰り返し処理を行うよく似たステートメントにFor Eachステートメントがあります。For Eachステートは、配列やコレクションなどのグループの各要素に対して繰り返し処理を行う場合に使用します。

詳しくはこちらのサイトで説明していますので、ぜひ参考にしてください。

まとめ

ここでは、For Nextステートメントについて説明しました。For Nextステートメントは繰り返し処理が必要な場合によく使われます。

ある条件を満たす場合に処理が省略できるようであれば、余計な処理は実行せずにループから抜けたり、スキップするなどして高速化できるようになりましょう! 使いこなすことができるように、この記事を何度も参考にして下さいね!

この記事を書いた人

熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。
お問合せはこちらでも受け付けています。
info@sss-lab.com

目次