Sub Triple_A(Work, LoopFlg) ' 行、列、あるいはブロックの3か所に3対の数字があり、他の場所にはその数字がない場合、 ' 3対の数字あった場所にあるその他の数字は削除する。 Dim Counter As Integer Dim I As Integer Dim I1, I2, I3 As Integer Dim ITop As Integer Dim J As Integer Dim J1, J2, J3 As Integer Dim K As Integer Dim L As Integer Dim JTop As Integer Dim N1, N2, N3 As Integer Dim Pair1, Pair2, Pair3 As String Dim S As String If LoopFlg <> "" Then Exit Sub '確定文字がすでに見つかっているのでこのサブルーチンは実施しない For I = 1 To 9 'I行で「3対」を探す For N1 = 1 To 7 For N2 = N1 + 1 To 8 For N3 = N2 + 1 To 9 Counter = 0 Pair1 = N1 '数値をPair1,Pair2,Pair3の文字変数に変換 Pair2 = N2 Pair3 = N3 For J = 1 To 9 If InStr(Work(I, J), Pair1) > 0 Or InStr(Work(I, J), Pair2) > 0 Or InStr(Work(I, J), Pair3) > 0 Then Counter = Counter + 1 Next J If Counter = 3 Then For J = 1 To 9 If InStr(Work(I, J), Pair1) > 0 Or InStr(Work(I, J), Pair2) > 0 Or InStr(Work(I, J), Pair3) > 0 Then S = "" If InStr(Work(I, J), Pair1) > 0 Then S = S & Pair1 If InStr(Work(I, J), Pair2) > 0 Then S = S & Pair2 If InStr(Work(I, J), Pair3) > 0 Then S = S & Pair3 If S <> Work(I, J) Then Work(I, J) = S LoopFlg = "Triple_A" End If End If Next J If LoopFlg <> "" Then Exit Sub End If Next N3 Next N2 Next N1 Next I For J = 1 To 9 'J列で「3対」を探す For N1 = 1 To 7 For N2 = N1 + 1 To 8 For N3 = N2 + 1 To 9 Counter = 0 Pair1 = N1 '数値をPair1,Pair2,Pair3の文字変数に変換 Pair2 = N2 Pair3 = N3 For I = 1 To 9 If InStr(Work(I, J), Pair1) > 0 Or InStr(Work(I, J), Pair2) > 0 Or InStr(Work(I, J), Pair3) > 0 Then Counter = Counter + 1 Next I If Counter = 3 Then For I = 1 To 9 If InStr(Work(I, J), Pair1) > 0 Or InStr(Work(I, J), Pair2) > 0 Or InStr(Work(I, J), Pair3) > 0 Then S = "" If InStr(Work(I, J), Pair1) > 0 Then S = S & Pair1 If InStr(Work(I, J), Pair2) > 0 Then S = S & Pair2 If InStr(Work(I, J), Pair3) > 0 Then S = S & Pair3 If S <> Work(I, J) Then Work(I, J) = S LoopFlg = "Triple_A" End If End If Next I If LoopFlg <> "" Then Exit Sub End If Next N3 Next N2 Next N1 Next J For ITop = 1 To 7 Step 3 'ブロックで「3対」を探す For JTop = 1 To 7 Step 3 For N1 = 1 To 7 For N2 = N1 + 1 To 8 For N3 = N2 + 1 To 9 Counter = 0 Pair1 = N1 '数値をPair1,Pair2,Pair3の文字変数に変換 Pair2 = N2 Pair3 = N3 For I = ITop To ITop + 2 For J = JTop To JTop + 2 If InStr(Work(I, J), Pair1) > 0 Or InStr(Work(I, J), Pair2) > 0 Or InStr(Work(I, J), Pair3) > 0 Then Counter = Counter + 1 Next J Next I If Counter = 3 Then For I = ITop To ITop + 2 For J = JTop To JTop + 2 If InStr(Work(I, J), Pair1) > 0 Or InStr(Work(I, J), Pair2) > 0 Or InStr(Work(I, J), Pair3) > 0 Then S = "" If InStr(Work(I, J), Pair1) > 0 Then S = S & Pair1 If InStr(Work(I, J), Pair2) > 0 Then S = S & Pair2 If InStr(Work(I, J), Pair3) > 0 Then S = S & Pair3 If S <> Work(I, J) Then Work(I, J) = S LoopFlg = "Triple_A" End If End If Next J Next I If LoopFlg <> "" Then Exit Sub End If Next N3 Next N2 Next N1 Next JTop Next ITop End Sub