第10講 数独の問題を解くプログラムVer0
第3話 4次元ループの最初の2次元でしていること

今回はの部分について説明していきます。
Sub mondaikaiseki()

  Dim i, j, i1, i2, i3, i4, i5, i6 As Integer
    
    For i1 = 0 To 8
      For i2 = 0 To 8

        If mah(i1, i2) = 0 Then
          ・
          ・
          ・
       End If
     Next
   Next


End Sub

最初の2次元は黄色の番号セルを番号の順に動いていっています。
If mah(i1, i2) = 0 Thenがあるので、セルが空欄のところだけ動くわけです。

0 1 2 3 4 5 6 7 8
0 *0 *1 *2 *3 *4 *4 *5 *8 *8
1 4 9 11 12 13 14 15 6 17
2 8 19 1 21 2 23 4 25 26
3 6 28 29 30 4 32 33 34 35
4 36 37 2 1 40 5 8 43 44
5 45 46 47 48 8 50 51 52 9
6 54 55 8 57 5 59 3 61 7
7 63 7 65 66 67 68 69 4 6
8 72 4 9 2 76 77 78 79 80

動きをトレースしてみましょう。
上の表

0 1 2 3 4 5 6 7 8

は変数i2に対応し、

0
1
2
3
4
5
6
7
8

は変数i1に対応します。
i1=0,i2=0のとき、セル

*0

に対応します。ここは空欄なので、
       If mah(i1, i2) = 0 Then
          ・
          ・
          ・
       End If
の中の処理が行われます。
次のi1=0,i2=1のときはセル

*1

に対応し、ここも空欄で
       If mah(i1, i2) = 0 Then
          ・
          ・
          ・
       End If
の中も処理が行われます。同様にして、i1=0,i2=4に対応するセル

*4

までif文の中身が実施されます。
ところが、i1=0,i2=5に対応するセル

*4

には数字4が入っているので、
       If mah(i1, i2) = 0 Then
          ・
          ・
          ・
       End If

は実行されません。以下同様に、i1=6,i2=5に対応するセル

59

はif文が実行され、i1=6,i2=6に対応するセル

3

には数字3が入っていて、if文は実行されません。

結局、空欄である黄色番号セルはif文が実行され、
数字の入っているセルはif文が実行されないことがおわかりかと思います。


第2話へ 第4話へ

VB入門講義応用編トップへ

VB入門講義トップへ