第6講 4次魔方陣を作ってみよう。
第3話 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話へ