第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文が実行されないことがおわかりかと思います。