VBAで多重ループ

2020年3月8日

VBAのfor文の練習で、九九表をつくることがよくあると思います。「VBA 九九」などと検索すると、たくさんの解説サイトが出てきます。

しかし、作成した九九表を、さらに下に2つ表示したいときはどうすれば良いか(つまり3重ループを使う)、「VBA 三重ループ」や「VBA 多重ループ」などと検索をしても、あまり欲しい情報が出てこなかったので、メモ。

作りたい目標の九九表

3つの九九表を縦に3つ並べます。ループ用の変数を3つ使用、for文のなかに、for文が入る多重ループです。

二重ループのコード例

Option Explicit '変数の宣言を強制する設定

Sub loop3()
    Dim i As Long ' 1つ目のループ
    Dim j As Long ' 2つ目のループ

    For i = 1 To 9 '行を作ります
        For j = 1 To 9  ' 列を作ります
        Cells(i, j) = i * j
        Next j
    Next i
End Sub

一つ目の九九表ができました。よくある一つの解です。for文は、行を作るのはi列を作るのはj、と考えると私はわかりやすかったです。

次に、この状態で下に九九表を2つ作るにはどうすれば良いか考えます。

Option Explicit

Sub loop3()
    
    Dim i As Long ' 1つ目のループ
    Dim j As Long ' 2つ目のループ
    
    For i = 1 To 9 '行を作ります
        For j = 1 To 9  ' 列を作ります
        Cells(i, j) = i * j
        Next j
    Next i
    
    For i = 1 To 9  '行を作ります
        For j = 1 To 9  ' 列を作ります
        Cells(i + 9, j) = i * j  ' 2つ目の九九表は10行目から作るので、+9とします。
        Next j
    Next i
    
        For i = 1 To 9  '行を作ります
        For j = 1 To 9   ' 列を作ります
        Cells(i + 18, j) = i * j  '3つ目の九九表は19行目から作るので、+18とします。
        Next j
    Next i
    
End Sub

ベタで書くとこのようになります。二重ループを二つ、下に記述すれば良いだけです。その際に開始する行を i に足してやれば良いのです。ただ、せっかくVBAを使っているのに、あまりスマートではありません。せっかくなので、変数を一つ加えて、短いコードにしてしまいます。

完成コード

Option Explicit

Sub loop3()
    
    Dim i As Long ' 1つ目のループ
    Dim j As Long ' 2つ目のループ
    Dim k As Long ' 3つ目のループ
    
    For i = 1 To 9 '行を作ります
        For j = 1 To 9  ' 列を作ります
            For k = 0 To 18 Step 9 ' 九九表を縦に並べます。kの値は9ずつ増えます。
                 Cells(i + k, j) = i * j
            Next k
        Next j
    Next i

End Sub
 

変数kを追加し、for文の中にもう一つfor文を入れてやります。三重ループです。
kの値は、9ずつ増えるように for文のところに、Step 9 としてやるとうまくいきます。これで九九表が縦に3つ並びます。