第5講 4次魔方陣と6次魔方陣の作成
第8話 該当セルを上下に交換させる

102
を実現するプログラム例
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

End Sub
Private Sub CommandButton2_Click()
  Rows("3:2000").Select
  Selection.ClearContents
  Cells(1, 1).Select
End Sub
参考ダウンロード添付ファイル

次は

36 32 3 4 5 31
7 29 27 10 26 12
19 14 22 21 17 18
13 20 16 15 23 24
25 11 9 28 8 30
6 2 33 34 35 1

の青い部分を左右に交換して、
101
6次魔方陣を完成させましょう。


第7話へ 第9話へ


トップへ