第5講 4次魔方陣と6次魔方陣の作成
第7話 逆対角線部分の交換

103
を実現するプログラム例
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 31
29 10 26 12
13 14 22 21 17 18
19 20 16 15 23 24
25 11 27 28 30
32 33 34 35

の薄緑の部分を上下に交換です。

36
29
13 14 22

ちょっと難しい課題ですが、
2,9,13のセルの選択を1次元Forで実現してください。
ヒントは、例えばbをでa割ったときの余りを求めるには
余り = b Mod a
とします。
余りを求める式は初めてですので、
具体例を出すと、
16 Mod 5
の答えは1です。
余りを使えば

   0
0 36
1 29
2 13 14 22

座標(),(),()をうまく選択できます。
要はを実現させればよいのです。
102


第6話へ 第8話へ


トップへ