can ( j , 1 ) = 空白セルの番地、例えば、 ( 3 ,8 )
can ( j , 2 ) = 空白セルの行番号、 3
can ( j , 3 ) = 空白セルの列番号、 8
can ( j , 4 ) = 空白セルの属するブロック番号、例えば、中央ブロックは 5
can ( j , 5 ) = 候補の個数、 k 個とする。
can ( j , 6 ) = 一番目の候補、 a1
can ( j , 7 ) = 二番目の候補、 a2
・・・・・・・・・・・
can ( j , 5+k ) = k 番目の候補、 ak
can matrix に蓄えられる候補の digit は、1 から 9 までの digit の中で小さい数から順に k 個蓄えられるのがプログラム上のポイントである。
can matrix を使った M_search マクロの例を以下に示そう。
Sub M_search()
empty_cell = Sheets("Sheet1").Range("K2")
For i = 1 To empty_cell
If can(i, 5) = 1 Then
ii = can(i, 2)
jj = can(i, 3)
ak = can(i, 6)
If Sheets("Sheet1").Cells(ppp + ii, qqq + jj) <> "" Then GoTo contii
Sheets("Sheet1").Cells(ppp + ii, qqq + jj) = ak
numa = numa + 1
Sheets("Sheet6").Cells(numa + 17, 1) = numa - 1
Sheets("Sheet6").Cells(numa + 17, 2) = "(" & ii & "," & jj & ")"
Sheets("Sheet6").Cells(numa + 17, 3) = ak
Sheets("Sheet6").Cells(numa + 17, 4) = sch
Sheets("Sheet6").Cells(numa + 17, 21) = 0.01 * (Int(100 * (Timer - timer0)))
Sheets("Sheet6").Range("A18") = numa - 1
End If
contii:
Next i
End Sub
M_search の「候補を一つしか持たないセル」は、 can ( j , 5 )= 1 と簡単にあらわすことができるので、マクロの中で四行目だけが重要である。あとは何番目に見つかったかや、その番地や数字、その探索法と時間を記録しているだけである。
0 件のコメント:
コメントを投稿