第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 31
29 27 10 26 12
19 14 22 21 17 18
13 20 16 15 23 24
25 11 28 30
33 34 35

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


第7話へ 第9話へ


トップへ