【Excel VBAでのFor文の書き方5選】

ExcelVBA

Excel VBAにおけるFor文は、繰り返し処理を行うための非常に便利な構文です。ここでは、For文のすべての書き方を取り上げ、わかりやすく説明します。

1.固定回数のループ処理

固定回数のループ処理を行いたい場合には、以下のようなFor文を使います。

カウントアップのFor文

カウントアップのFor文は、指定した範囲内で変数を1ずつ増やしながら、ループ内の処理を実行する構文です。以下のように書きます。

For i = 初期値 To 終了値
    ' ループ内で行いたい処理を記述する
Next i

例えば、1から10までの整数を表示するプログラムを書く場合、以下のようになります。

For i = 1 To 10
    MsgBox i
Next i

変数iは1から10まで1ずつ増加していきます。ループ内で行いたい処理は、ForNextの間に記述します。上記の例では、MsgBox関数を使って変数iの値を表示しています。

カウントダウンのFor文

カウントダウンのFor文は、指定した範囲内で変数を1ずつ減らしながら、ループ内の処理を実行する構文です。以下のように書きます。

For i = 初期値 To 終了値 Step -1
    ' ループ内で行いたい処理を記述する
Next i

例えば、10から1までの整数を表示するプログラムを書く場合、以下のようになります。

For i = 10 To 1 Step -1
    MsgBox i
Next i

変数iは10から1まで1ずつ減少していきます。Step -1の部分で、1ずつではなく-1ずつ増減するように指定しています。(整数の2とすると2ずつカウントアップされます。)

この方法に対するメリットとデメリットは以下のとおりです。

メリット:

  • 簡単にループ回数を設定できるため、処理の回数が明確に分かる。

デメリット:

  • ループ回数が事前に決まっている必要があるため、変化する可能性のある処理には向いていない。

2.変数を使ったループ処理

変数を使ってループ処理を行いたい場合には、以下のようなFor文を使います。

Dim maxNumber As Integer
maxNumber = 10

For i = 1 To maxNumber
    ' ループ内で行いたい処理を記述する
Next i

この例では、変数maxNumberをDim文で宣言し、その変数を使ってループ処理が行われます。

メリット:

  • ループ回数を柔軟に変更できるため、変化する可能性のある処理に向いている。

デメリット:

  • 変数の宣言が必要なため、プログラムの行数が増える可能性がある。

3.コレクションのループ処理

コレクションのループ処理はFor Each文を使います。コレクション内の各要素を1つずつ取り出しながら、ループ内の処理を実行する構文です。以下のように書きます。

For Each 要素 In コレクション
    ' ループ内で行いたい処理を記述する
Next 要素

例えば、セルの値を順番に表示するプログラムを書く場合、以下のようになります。

Dim cell As Range
For Each cell In Range("A1:A10")
    MsgBox cell.Value
Next cell

Rangeオブジェクトを使って、A1からA10までのセルを指定しています。For Eachの後には、取り出したい要素の型(例:RangeWorksheetChartObjectなど)と、その要素に使いたい変数名を指定します。ループ内では、変数名を使って要素の値にアクセスすることができます。

この方法に対するメリットとデメリットは以下のとおりです。

メリット:

  • 複数の要素に対して同じ処理を行う場合に向いている。
  • 要素数が変化する場合にも対応できる。

デメリット:

  • 要素数が多い場合に処理が遅くなる可能性がある。

4.条件付きのFor文

条件付きのFor文は、ループ内の処理を実行する前に、指定した条件式がTrueかどうかを判定し、Trueであればループを継続する構文です。以下のように書きます。

For i = 初期値 To 終了値 Step ステップ数
    If 条件式 Then
        ' ループ内で行いたい処理を記述する
    End If
Next i

例えば、1から10までの整数で、偶数の場合にはその値を表示するプログラムを書く場合、以下のようになります。

For i = 1 To 10
    If i Mod 2 = 0 Then
        MsgBox i
    End If
Next i

Mod演算子を使って、変数iを2で割った余りが0である場合に、ループ内の処理を実行するように指定しています。

この方法に対するメリットとデメリットは以下のとおりです。

メリット:

  • 特定の条件を満たす要素に対して処理を行うことができる。

デメリット:

  • 条件式が複雑になりやすく、誤った条件式を書いてしまう可能性がある。
  • 条件を満たす要素がない場合、ループが一度も実行されない可能性がある。

5.For文のネスト

ネストされたFor文は、1つのForループの中で別のForループを実行する方法です。この方法は、多次元のデータを扱う場合や、複数の変数に対する処理を行う場合に便利です。

以下は、2次元配列を扱うためのネストされたFor文の例です。

Dim myArray(1 To 3, 1 To 3) As Integer ' 2次元配列の宣言

' 2次元配列の初期化
myArray(1, 1) = 1
myArray(1, 2) = 2
myArray(1, 3) = 3
myArray(2, 1) = 4
myArray(2, 2) = 5
myArray(2, 3) = 6
myArray(3, 1) = 7
myArray(3, 2) = 8
myArray(3, 3) = 9

' ネストされたFor文による2次元配列の要素の表示
For i = 1 To 3
    For j = 1 To 3
        Debug.Print myArray(i, j);
    Next j
    debug.Print
Next i

この例では、1つのForループの中で、もう1つのForループが実行されています。外側のForループはiという変数を使用して、1から3までの値を繰り返します。内側のForループはjという変数を使用して、1から3までの値を繰り返します。ネストされたForループを使用することで、2次元配列のすべての要素を順番に表示することができます。

ネストされたForループのメリットとデメリットは以下の通りです。

メリット:

  • 多次元配列や複数の変数に対する処理を扱いやすい。
  • 処理のフローが直感的で、コードが簡潔になる場合がある。
  • ネストされたForループを使用することで、処理の順序や範囲を制御できる。

デメリット:

  • 処理が複雑になりやすく、ネストの深さが深くなると可読性が低下する可能性がある。
  • 外側のループが完了するまで、内側のループが完了しないため、処理が遅くなる場合がある。
  • エラーの発生や処理の誤りに気付きにくい場合がある。

ネストされたForループは、繰り返し処理において非常に重要な役割を果たす一方、適切に使用しない場合は、可読性や実行速度の問題が発生する可能性があるため、注意が必要です。適切な使用方法を選択し、可読性の高いコードを記述することが大切です。

まとめ

以上が、Excel VBAのFor文の書き方についての説明です。使い方を覚えると、繰り返し処理が必要なプログラムを簡単に記述することができます。