【記事2: For…Next ループの活用】《ループ処理について》

はじめに

前回の記事では、VBAのループ処理の基本概念と種類を学びました。今回は、For…Next ループを中心に、その活用方法や実践的な例を解説していきます。For…Next ループは、指定された回数だけ繰り返し処理を行うために使用される制御構造です。さまざまなシーンで活用することで、効率的なVBAコードを書くことができます。

For…Next ループの基本構文

For…Next ループの基本構文は以下のようになります。

For 変数 = 初期値 To 終了値 [Step 増分値]
    ' 繰り返し行う処理
Next 変数

変数にはループカウンタとして使用する変数名を指定し、初期値から終了値までの範囲を設定します。増分値を省略した場合、デフォルトで1が設定されます。

For…Next ループの実践例

以下に、For…Next ループを活用した実践的な例を示します。

セル範囲の値を操作

For…Next ループを使って、セル範囲の値を操作する例です。

Sub UpdateCellValues()
    Dim i As Long
    For i = 1 To 10
        Cells(i, 1).Value = i * 2
    Next i
End Sub

このコードでは、A1からA10までのセルに、1から10までの整数を2倍した値を順番に代入しています。

配列を操作

For…Next ループを使って、配列の要素を操作する例です。

Sub ProcessArray()
    Dim i As Long
    Dim numbers(1 To 5) As Long

    ' 配列に値を代入
    For i = 1 To 5
        numbers(i) = i * 10
    Next i

    ' 配列の値を出力
    For i = 1 To 5
        Debug.Print numbers(i)
    Next i
End Sub

このコードでは、まず配列に値を代入し、その後配列の値を出力しています。

条件に応じた処理

For…Next ループ内で条件に応じた処理を行う例です。

Sub ProcessEvenNumbers()
    Dim i As Long
    For i = 1 To 10
        If i Mod 2 = 0 Then
Debug.Print i & " is even."
Else
Debug.Print i & " is odd."
End If
Next i
End Sub

このコードでは、1から10までの整数について、偶数か奇数かを判定し、それぞれの場合にDebug.Printを使って出力しています。

ネストされたFor…Next ループ

For…Next ループをネストさせて、複数のループカウンタを用いた処理を行う例です。

Sub MultiplicationTable()
    Dim i As Long
    Dim j As Long

    For i = 1 To 9
        For j = 1 To 9
            Debug.Print i & " × " & j & " = " & i * j
        Next j
    Next i
End Sub

このコードでは、九九の計算結果を出力しています。外側のループで1から9までの数値を、内側のループでも1から9までの数値を取り、それぞれの組み合わせで掛け算の結果を出力しています。

まとめ

本記事では、For…Next ループの活用方法と実践的な例を解説しました。For…Next ループは、特定の回数だけ処理を繰り返す際に非常に便利な制御構造です。セル範囲の操作や配列の処理、条件分岐やネストされたループなど、様々なシーンで活用して効率的なVBAコードを書くことができます。次回は、For Each…Next ループを中心にその活用方法を学んでいきましょう。

演習問題

以下の演習問題を解いて、For…Next ループの活用方法を理解しましょう。
問題1: A1からA10までのセルに、1から10までの整数を逆順で代入するVBAコードを、For…Next ループを使って書いてください。

問題2: 1から50までの整数のうち、3の倍数かつ5の倍数である数を出力するVBAコードを、For…Next ループとIf文を使って書いてください。

問題3: A1からA5までのセルに整数が入力されているとします。これらの整数の合計を計算し、B1に表示するVBAコードを、For…Next ループを使って書いてください。

解答

問題1の解答:

Sub ReverseOutputNumbers() Dim i As Long For i = 10 To 1 Step -1 Cells(11 - i, 1).Value = i Next i End Sub

問題1の解説: For…Nextループを使用して、変数iに10から1までの整数を逆順に代入し、それをA1からA10までのセルに代入しています。
問題2の解答:

Sub OutputMultiples()
    Dim i As Long
    For i = 1 To 50
        If i Mod 3 = 0 And i Mod 5 = 0 Then
            Debug.Print i
        End If
    Next i
End Sub

問題2の解説: For…Nextループ内で、If文を使用して3の倍数かつ5の倍数である数を判定し、該当する場合にDebug.Printを使って出力しています。

問題3の解答:

Sub SumCells()
    Dim i As Long
    Dim total As Long
    total = 0
    
    For i = 1 To 5
        total = total + Cells(i, 1).Value
    Next i
    
    Cells(1, 2).Value = total
End Sub

問題3の解説: For…Nextループを使用して、A1からA5までのセルの値を合計し、その合計値を変数totalに代入しています。ループ終了後、B1に合計値を表示しています。

これらの演習問題と解答を通じて、For…Next ループの活用方法を理解することができます。今後もさまざまな状況でFor…Next ループを活用して、効率的なVBAコードを書いていきましょう。

今回の演習問題を通じて、For…Next ループの基本的な使い方や活用方法が身に付いたことでしょう。VBAを使用する上で、For…Next ループは頻繁に使われる構文のひとつです。これらの知識を活かして、より複雑で実践的な問題にも対応できるようになりましょう。また、今後は他のループ処理や制御構造も学び、自分のスキルを向上させていくことが大切です。次回は、For Each…Next ループについて学んでいきましょう。これにより、オブジェクトのコレクションや配列の要素を効率的に処理する方法を身に付けることができます。

コメント