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つ並びます。