Sub Normalize(Work, LoopFlg) 'Workを正規化する。 Dim INor, JNor As Integer '正規化の元になる確定枠のI行、J列 Dim ITop, JTop As Integer 'INor,JNorのブロックのトップ枠の行と列 Dim I, J As Integer '正規化対象枠の行列 Dim S As String Dim SubLoopFlg As Integer If LoopFlg <> "" Then Exit Sub Do SubLoopFlg = 0 For INor = 1 To 9 For JNor = 1 To 9 If Len(Work(INor, JNor)) = 1 Then '確定枠であれば以下のプロシージャを実施 '影響のある列から(INor,JNor)にある字を削除 For I = 1 To 9 If I <> INor Then '確定枠以外から削除 If InStr(Work(I, JNor), Work(INor, JNor)) > 0 Then '該当文字 S = Work(I, JNor) Work(I, JNor) = Replace(S, Work(INor, JNor), "") If S <> Work(I, JNor) Then SubLoopFlg = 1 LoopFlg = "Normalize" End If End If End If Next I '影響のある行から(INor,JNor)にある字を削除 For J = 1 To 9 If J <> JNor Then If InStr(Work(INor, J), Work(INor, JNor)) > 0 Then S = Work(INor, J) Work(INor, J) = Replace(S, Work(INor, JNor), "") If S <> Work(INor, J) Then SubLoopFlg = 1 LoopFlg = "Normalize" End If End If End If Next J '影響のあるブロックから(INor,JNor)にある字を削除 ITop = BlockTop(INor) JTop = BlockTop(JNor) For I = ITop To ITop + 2 For J = JTop To JTop + 2 If I = INor And J = JNor Then Else If InStr(Work(I, J), Work(INor, JNor)) Then S = Work(I, J) Work(I, J) = Replace(S, Work(INor, JNor), "") If S <> Work(I, J) Then SubLoopFlg = 1 LoopFlg = "Normalize" End If End If End If Next J Next I End If Next JNor Next INor For I = 1 To 9 For J = 1 To 9 Cells(4 + I, 11 + J) = Work(I, J) Next J Next I Loop While SubLoopFlg = 1 End Sub