第5講 4次魔方陣と6次魔方陣の作成
第9話 該当セルを左右に交換して6次魔方陣を完成させる
を実現するプログラム例
Private Sub CommandButton1_Click()
CommandButton2_Click
Dim i As Byte, j As Byte, n As Byte
n = 6 '汎用的にするためにnとした。
For i = 0 To n - 1 '自然配列の作成
For j = 0 To n - 1
Cells(3 + i, 2 + j) = n * i + j + 1
Next
Next
For i = 0 To n - 1 'B3からG8までをB9からG17までコピー
For j = 0 To n - 1
Cells(10 + i, 2 + j) = Cells(3 + i, 2 + j)
Next
Next
Cells(9, 2) = "対角線を交換すると、"
Dim w As Byte
For i = 0 To Int((n - 1) / 2) '対角線部分の交換
w = Cells(15 - i, 7 - i)
Cells(15 - i, 7 - i) = Cells(10 + i, 2 + i)
Cells(10 + i, 2 + i) = w
Next
For i = 0 To n - 1 'B10からG17までをB16からG17までにコピー
For j = 0 To n - 1
Cells(17 + i, 2 + j) = Cells(10 + i, 2 + j)
Next
Next
Cells(16, 2) = "逆対角線を交換すると、"
For i = 0 To Int((n - 1) / 2) '逆対角線部分の交換
w = Cells(17 + n - 1 - i, 2 + i)
Cells(17 + n - 1 - i, 2 + i) = Cells(17 + i, 2 + n - 1 - i)
Cells(17 + i, 2 + n - 1 - i) = w
Next
For i = 0 To n - 1 'B17からG23までをB24からG30までにコピー
For j = 0 To n - 1
Cells(24 + i, 2 + j) = Cells(17 + i, 2 + j)
Next
Next
Cells(23, 2) = "該当セルを上下に交換すると、"
For i = 0 To Int((n - 1) / 2) '該当セルを上下に交換する
w = Cells(24 + (n - 1 - i), 2 + ((i + 1) Mod 3))
Cells(24 + (n - 1 - i), 2 + ((i + 1) Mod 3)) = Cells(24 + i, 2 + ((i + 1) Mod 3))
Cells(24 + i, 2 + ((i + 1) Mod 3)) = w
Next
For i = 0 To n - 1 'B24からG30までをB31からG37までにコピー
For j = 0 To n - 1
Cells(31 + i, 2 + j) = Cells(24 + i, 2 + j)
Next
Next
Cells(30, 2) = "該当セルを左右に交換すると、"
For i = 0 To Int((n - 1) / 2) '該当セルを上下に交換する
w = Cells(31 + i, 2 + (n - 1 - ((i + 2) Mod 3)))
Cells(31 + i, 2 + (n - 1 - ((i + 2) Mod 3))) = Cells(31 + i, 2 + ((i + 2) Mod 3))
Cells(31 + i, 2 + ((i + 2) Mod 3)) = w
Next
Cells(37, 2) = "6次魔方陣の完成!"
End Sub
Private Sub CommandButton2_Click()
Rows("3:2000").Select
Selection.ClearContents
Cells(1, 1).Select
End Sub
参考ダウンロード添付ファイル
ついに6次魔方陣が完成しました。
第6講では細胞(プログラムを構成する単位)であるサブプロシージャについて学びます。
第8話へ 第6講第1話へ