Sub Pair_B(Work, LoopFlg) ' 同じ2文字だけで対を作っている場合、他の枠にその数字があっても対に入る数字はそのうちの一つ ' そちらに文字が使われるので、他の枠にある文字は削除する。 Dim I As Integer Dim I1 As Integer Dim I2 As Integer Dim ITop As Integer Dim J As Integer Dim J1 As Integer Dim JTop As Integer Dim J2 As Integer Dim N As Integer Dim Pair1 As String Dim Pair2 As String Dim S(1 To 9) As String Dim Sx As String If LoopFlg <> "" Then Exit Sub '確定文字がすでに見つかっているのでこのサブルーチンは実施しない For I = 1 To 9 'I行でタイプBの「対」を探す For J1 = 1 To 8 If Len(Work(I, J1)) = 2 Then For J2 = J1 + 1 To 9 If Work(I, J1) = Work(I, J2) Then ' (I,J1)と(I,J2)は対である Pair1 = Right(Work(I, J1), 1) Pair2 = Left(Work(I, J1), 1) For J = 1 To 9 If J = J1 Or J = J2 Then Else Sx = Work(I, J) Work(I, J) = Replace(Replace(Sx, Pair1, ""), Pair2, "") If Sx <> Work(I, J) Then LoopFlg = "Pair_B" End If End If Next J If LoopFlg <> "" Then Exit Sub End If Next J2 End If Next J1 Next I For J = 1 To 9 'J列でタイプBの「対」を探す For I1 = 1 To 8 If Len(Work(I1, J)) = 2 Then For I2 = I1 + 1 To 9 If Work(I1, J) = Work(I2, J) Then ' (I1,J)と(I2,J)は対である Pair1 = Right(Work(I1, J), 1) Pair2 = Left(Work(I1, J), 1) For I = 1 To 9 If I = I1 Or I = I2 Then Else Sx = Work(I, J) Work(I, J) = Replace(Replace(Sx, Pair1, ""), Pair2, "") If Sx <> Work(I, J) Then LoopFlg = "Pair_B" End If End If Next I If LoopFlg <> "" Then Exit Sub End If Next I2 End If Next I1 Next J For ITop = 1 To 7 Step 3 'ブロックでタイプAの「対」を探す For JTop = 1 To 7 Step 3 N = 0 For I = ITop To ITop + 2 For J = JTop To JTop + 2 N = N + 1 S(N) = Work(I, J) Next J Next I For I1 = 1 To 8 If Len(S(I1)) = 2 Then For I2 = I1 + 1 To 9 If S(I1) = S(I2) Then '対が見つかった Pair1 = Right(S(I1), 1) Pair2 = Left(S(I1), 1) For I = 1 To 9 If I = I1 Or I = I2 Then Else Sx = S(I) S(I) = Replace(Replace(Sx, Pair1, ""), Pair2, "") End If Next I End If Next I2 End If Next I1 N = 0 For I = ITop To ITop + 2 For J = JTop To JTop + 2 N = N + 1 If S(N) <> Work(I, J) Then LoopFlg = "Pair_B" Work(I, J) = S(N) End If Next J Next I If LoopFlg <> "" Then Exit Sub Next JTop Next ITop End Sub