Sub Sudoku_Main() Dim Ans(1 To 9, 1 To 9) As String ' 解答用行列変数 で解が確定した枠は数字が、未確定の枠は ""が入る Dim Work(1 To 9, 1 To 9) As String ' 解読作業用行列変数で確定枠にはその数字、未確定の枠には可能性のある文字が入る Dim I As Integer 'Forループの行カウンター、その他 Dim J As Integer 'Forループの列カウンター、その他 Dim LoopFlg As String '確定文字を見つけたサブルーチン名 初期値は"" (=ヌル) Dim S As String '問題テーブルから文字を読み込み、それが1文字数字であればその文字を、そうでなければ""をAnsに書き込む。 For I = 1 To 9 For J = 1 To 9 S = Cells(15 + I, 1 + J) '問題のI行、J列を読み込む If Len(S) = 1 And InStr("123456789", S) > 0 Then 'Sに読み込んだ値が1字の数字か? Ans(I, J) = S ' そうであればAns(I,J)にSを格納 Else Ans(I, J) = "" 'そうでなければ "" を格納 End If Next J Next I 'Ansを解答テーブルに書き込む For I = 1 To 9 For J = 1 To 9 Cells(4 + I, 1 + J) = Ans(I, J) 'AnsのI行、J列を解答テーブルに書き込む Next J Next I 'Workの初期化で確定枠にはAnsから値を、未確定の枠には"123456789"とすべての数字を格納し、作業テーブルにも書き込む For I = 1 To 9 For J = 1 To 9 If Len(Ans(I, J)) = 1 Then Work(I, J) = Ans(I, J) Else Work(I, J) = "123456789" End If Cells(4 + I, 11 + J) = Work(I, J) Next J Next I End Sub