' Construct Generators for Squares of Subtraction (7 x 7)
' Tested with Office 365 under Windows 10
Sub CnstrGen7()
Dim a(49), a1(49), a2(49), nRw(7), b(49)
y = MsgBox("Blocked", vbInformation, "CnstrGen7")
End
Sheets("Klad1").Select
n1 = 0: n9 = 0: k1 = 1: k2 = 1
n0 = 1: n8 = 55534: n81 = 6154
ShtNm1 = "AntiSym7"
For j1 = n0 To n81
n10 = 7: Erase a
For i1 = 1 To 7
a1(i1) = Sheets(ShtNm1).Cells(j1, i1).Value
Next i1
nRw(1) = j1
For i1 = 1 To 7 'First Line
a(i1) = a1(i1)
Next i1
GoSub 200 'Remainder of Lines
If fl2 = 0 Then GoTo 5
' Add Complementary Rows
For i1 = 22 To 42
a(i1) = 50 - a(i1 - 21)
Next i1
' Complete Generator (Last Row)
Erase b
For i1 = 1 To 42
b(a(i1)) = a(i1)
Next i1
i2 = 42
For i1 = 1 To 49
If b(i1) = 0 Then
i2 = i2 + 1: a(i2) = i1
End If
Next i1
'' n9 = n9 + 1: GoSub 655 'Print results (Squares)
n9 = n9 + 1: GoSub 650 'Print results (Lines)
5
n10 = n10 - 7
10 Next j1
End
200 fl2 = 0
For j2 = n0 + 1 To n8
j100 = j2: j101 = 2: GoSub 100: If fl1 = 0 Then GoTo 20
nRw(2) = j2
For j3 = j2 + 1 To n8
j100 = j3: j101 = 3: GoSub 100: If fl1 = 0 Then GoTo 30
nRw(3) = j3
fl2 = 1
Return
n10 = n10 - 7
30 Next j3
n10 = n10 - 7
20 Next j2
Return
100 fl1 = 1
For i1 = 1 To 7
a2(i1) = Sheets(ShtNm1).Cells(j100, i1).Value
Next i1
For i1 = 1 To 7
a20 = a2(i1)
For i2 = 1 To n10
If a20 = a(i2) Then fl1 = 0: Return
If a20 = 50 - a(i2) Then fl1 = 0: Return 'Check Complement
Next i2
Next i1
n10 = n10 + 7
i2 = 0
For i1 = n10 - 7 + 1 To n10
i2 = i2 + 1
a(i1) = a2(i2)
Next i1
Return
' Print Results (lines)
655 For i1 = 1 To 49
Cells(n9, i1).Value = a(i1)
Next i1
Cells(n9, 50).Value = n9
Cells(1, 51).Value = n9
Return
' Print Results (Squares)
650 n2 = n2 + 1
If n2 = 5 Then
n2 = 1: k1 = k1 + 8: k2 = 1
Else
If n9 > 1 Then k2 = k2 + 8
End If
Cells(k1, k2 + 1).Select
Cells(k1, k2 + 1).Font.Color = -4165632
Cells(k1, k2 + 1).Value = n9
i3 = 0
For i1 = 1 To 7
For i2 = 1 To 7
i3 = i3 + 1
Cells(k1 + i1, k2 + i2).Value = a(i3)
Next i2
' Row Number
Cells(k1 + i1, k2 + 8).Value = nRw(i1)
' Sheets(ShtNm1).Cells(nRw(i1), 8).Value = 1 'Mark Used Row (Option)
Next i1
Return
End Sub