第6講 4次魔方陣を作ってみよう。

第3話 4次魔方陣プログラムの改良

4次魔方陣プログラム解答例改良例


プログラム解説

Private Sub CommandButton1_Click()

    Dim i As Integer, j As Integer, w As Integer

    For i = 1 To 4
        For j = 1 To 4
            Cells(i + 4, j + 2) = 4 * (i - 1) + j
        Next
    Next

    For i = 1 To 2
        w = Cells(i + 4, i + 2)
        Cells(i + 4, i + 2) = Cells(9 - i, 7 - i)
        Cells(9 - i, 7 - i) = w
    Next

    For i = 1 To 2
        w = Cells(i + 4, 7 - i)
        Cells(i + 4, 7 - i) = Cells(9 - i, i + 2)
        Cells(9 - i, i + 2) = w
    Next

    Cells(9, 1) = "縦合計"
    For i = 1 To 4
        w = 0
        For j = 1 To 4
            w = w + Cells(j + 4, i + 2)
        Next
        Cells(9, i + 2) = w
    Next


    Range("g2:g4").Select
    Selection.HorizontalAlignment = xlRight
    Cells(2, 7) = "横"
    Cells(3, 7) = "合"
    Cells(4, 7) = "計"
    Range("a1").Select
    For i = 1 To 4
        w = 0
        For j = 1 To 4
            w = w + Cells(i + 4, j + 2)
        Next
        Cells(i + 4, 7) = w
    Next


    Cells(10, 1) = "右斜め対角線合計"
    w = 0
    For i = 1 To 4
        w = w + Cells(i + 4, i + 2)
    Next
    Cells(10, 5) = w

    Cells(11, 1) = "左斜め対角線合計"
    w = 0
    For i = 1 To 4
        w = w + Cells(i + 4, 7 - i)
    Next
    Cells(11, 5) = w

End Sub

紺色の部分が横合計を求めるプログラムです。
合計を求める変数として、
交換の際に値を保存しておく変数として使ったwを使っていますが、
もちろん別の変数(例えば、waなど)を使ってもがよいのです。
変数を減らすと、
コンピュータのメモリーを節約することができるというメリットとともに、
プログラムがわかりにくくなるというデメリットもあります。

ピンク
の部分が横合計を求めるプログラムです。
Selection.HorizontalAlignment = xlRightは選択してあるセルを右寄せしなさいという命令です。
Excelのセルは数は右寄せ、文字は左寄せという設定になっていて、
ずれてしまうので右寄せさせて下の合計の数字と位置がずれないようにしているのです。
ですから、見栄えの問題ですからSelection.HorizontalAlignment = xlRight
の1文はなくても結構です。
なお、センタリングさせたいならSelection.HorizontalAlignment = xlCenter
右寄せならSelection.HorizontalAlignment = xlLeftです。


の部分は右下がりの対角線合計を求めるプログラムです。

薄緑の部分は右上がり対角線合計を求めるプログラムです。
Cells(i + 4, 7 - i)は、
iが1,2,3,4と動くと、

3 4 5 6
5 16 2 3 13
6 5 11 10 8
7 9 7 6 12
8 4
14 15 1

Cells(5, 6),Cells(6, 5),Cells(7, 4),Cells(8, 3)
と動いていきます。
結局、魔方陣のピンクの部分を動いていることがわかると思います。


第2話へ 第4話へ

講義トップへ

数学研究室に戻る