第5講 4次魔方陣と6次魔方陣の作成
第7話 逆対角線部分の交換
を実現するプログラム例
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
End Sub
Private Sub CommandButton2_Click()
Rows("3:2000").Select
Selection.ClearContents
Cells(1, 1).Select
End Sub
参考ダウンロード添付ファイル
次は
36 | 2 | 3 | 4 | 5 | 31 |
7 | 29 | 9 | 10 | 26 | 12 |
13 | 14 | 22 | 21 | 17 | 18 |
19 | 20 | 16 | 15 | 23 | 24 |
25 | 11 | 27 | 28 | 8 | 30 |
6 | 32 | 33 | 34 | 35 | 1 |
の薄緑の部分を上下に交換です。
36 | 2 | 3 |
7 | 29 | 9 |
13 | 14 | 22 |
ちょっと難しい課題ですが、
2,9,13のセルの選択を1次元Forで実現してください。
ヒントは、例えばbをでa割ったときの余りを求めるには
余り = b Mod a
とします。
余りを求める式は初めてですので、
具体例を出すと、
16 Mod 5
の答えは1です。
余りを使えば
0 | 1 | 2 | |
0 | 36 | 2 | 3 |
1 | 7 | 29 | 9 |
2 | 13 | 14 | 22 |
座標(0,1),(1,2),(2,0)をうまく選択できます。
要は1→2→0を実現させればよいのです。
第6話へ 第8話へ