第7講 Do While〜Loop文(繰り返し処理2)
第3話 Do While〜Loop文による2次元ループ
自然配列

3 4 5 6
5 1 2 3 4
6
5 6 7 8
7
9 10 11 12
8
13
14 15 16

を発生させるプログラムをDo While〜Loop文によって、作ってみましょう。

サンプル702参照

Private Sub CommandButton1_Click()

    Dim i As Integer, j As Integer, w As Integer

    i = 1
    Do While i < 5
        j = 1
        Do While j < 5
            Cells(i + 4, j + 2) = 4 * (i - 1) + j
            j = j + 1
        Loop
        i = i + 1
    Loop

End Sub


j=1の位置に気をつけてください。うっかりすると
Private Sub CommandButton1_Click()

    Dim i As Integer, j As Integer, w As Integer

    i = 1
    j = 1
    Do While i < 5
        Do While j < 5
            Cells(i + 4, j + 2) = 4 * (i - 1) + j
            j = j + 1
        Loop
        i = i + 1
    Loop

End Sub
でいいような気がしてしまいますが、実行してみると

3 4 5 6
5 1 2 3 4

となってしまって、下3行ができません。
なぜなら、上のプログラムでは、
i=1のときは、
Do While j < 5
    Cells(i + 4, j + 2) = 4 * (i - 1) + j
    j = j + 1
Loop
は実行されますが、
i=2のときには、実行されません。
理由は、i=1の一番最後にj=5となってしまっているので、
条件式 j < 5を満たさないからです。
ですから、ループが始まる前にj=1としてリセットしなければならないのです。

では皆さん、第6講で作った4次魔方陣プログラムの3つ
4次魔方陣プログラムその1
4次魔方陣プログラムその2
4次魔方陣プログラムその3
をDo While〜Loop文によって改良してみましょう。


第2話へ 第4話へ

講義トップへ

数学研究室に戻る