第5講 For文(繰り返し処理)を理解しよう
第11話 魔方陣の判定プログラム
前話問題解答例
Private Sub CommandButton1_Click()
Dim w As Byte, i As Byte
w = 0
For i = 0 To 5
w = w + Cells(7 + i, 1)
Next
Cells(13, 1) = w
w = 0
For i = 0 To 5
w = w + Cells(7 + i, 2)
Next
Cells(13, 2) = w
w = 0
For i = 0 To 5
w = w + Cells(7 + i, 3)
Next
Cells(13, 3) = w
w = 0
For i = 0 To 5
w = w + Cells(7 + i, 4)
Next
Cells(13, 4) = w
w = 0
For i = 0 To 5
w = w + Cells(7 + i, 5)
Next
Cells(13, 5) = w
w = 0
For i = 0 To 5
w = w + Cells(7 + i, 6)
Next
Cells(13, 6) = w
w = 0
For i = 0 To 5
w = w + Cells(7, 1 + i)
Next
Cells(7, 7) = w
w = 0
For i = 0 To 5
w = w + Cells(8, 1 + i)
Next
Cells(8, 7) = w
w = 0
For i = 0 To 5
w = w + Cells(9, 1 + i)
Next
Cells(9, 7) = w
w = 0
For i = 0 To 5
w = w + Cells(10, 1 + i)
Next
Cells(10, 7) = w
w = 0
For i = 0 To 5
w = w + Cells(11, 1 + i)
Next
Cells(11, 7) = w
w = 0
For i = 0 To 5
w = w + Cells(7 + i, 1 + i)
Next
Cells(14, 3) = "右下がり対角線合計 "
Cells(14, 6) = w
w = 0
For i = 0 To 5
w = w + Cells(7 + i, 6 - i)
Next
Cells(15, 3) = "右上がり対角線合計 "
Cells(15, 6) = w
End Sub
Private Sub CommandButton2_Click()
Range("A13:F15").Select
Selection.ClearContents
Range("G7:G12").Select
Selection.ClearContents
Range("A1").Select
End Sub
参考ファイル
解説
w = 0
For i = 0 To 5
w = w + Cells(7 + i, 1 + i)
Next
Cells(14, 3) = "右下がり対角線合計 "
Cells(14, 6) = w
w = 0
For i = 0 To 5
w = w + Cells(7 + i, 6 - i)
Next
Cells(15, 3) = "右上がり対角線合計 "
Cells(15, 6) = w
の部分をトレースしてみます。
まず、
w = 0
からwは0になります。
そして、
For i = 0 To 5
w = w + Cells(7 + i, 1 + i)
Next
のよるループ処理になります。
i = 0(1回目のループ処理)のとき
w = w + Cells(7 + i, 1 + i)
から
w = w + Cells(7 + 0, 1 + 0)
すなわち
w = w + Cells(7, 1) (Cells(7, 1)はセルA7です。)
したがいまして、
w = 0 + 1
の計算から
w = 1
i = 1(2回目のループ処理)のとき
w = w + Cells(7 + i, 1 + i)
から
w = w + Cells(7 + 1, 1 + 1)
すなわち
w = w + Cells(8, 2) (Cells(8, 2)はセルB8です。)
したがいまして、
w = 1 + 8
の計算から
w = 9
i = 2(3回目のループ処理)のとき
w = w + Cells(7 + i, 1 + i)
から
w = w + Cells(7 + 2, 1 + 2)
すなわち
w = w + Cells(9, 3) (Cells(9, 3)はセルC9です。)
したがいまして、
w = 9 + 15
の計算から
w = 24
i = 3(4回目のループ処理)のとき
w = w + Cells(7 + i, 1 + i)
から
w = w + Cells(7 + 3, 1 + 3)
すなわち
w = w + Cells(10, 4) (Cells(10, 4)はセルD10です。)
したがいまして、
w = 24 + 23
の計算から
w = 47
i = 4(5回目のループ処理)のとき
w = w + Cells(7 + i, 1 + i)
から
w = w + Cells(7 + 4, 1 + 4)
すなわち
w = w + Cells(11, 5) (Cells(11, 5)はセルE11です。)
したがいまして、
w = 47 + 30
の計算から
w = 77
i = 5(6回目のループ処理)のとき
w = w + Cells(7 + i, 1 + i)
から
w = w + Cells(7 + 5, 1 + 5)
すなわち
w = w + Cells(12, 6) (Cells(12, 6)はセルE11です。)
したがいまして、
w = 77 + 34
の計算から
w = 111
これでループ処理は終わり
Cells(14, 3) = "右下がり対角線合計 "
Cells(14, 6) = w (Cells(14, 6) はセルF14)
から
となって、右下がり対角線の合計の算出と表示に成功したわけです。
この後
w = 0
For i = 0 To 5
w = w + Cells(7 + i, 6 - i)
Next
Cells(15, 3) = "右上がり対角線合計 "
Cells(15, 6) = w
は右上がり対角線の合計算出と表示を担当します。
w = 0
で積算してきたものを0に戻します。
For i = 0 To 5
w = w + Cells(7 + i, 6 - i)
Next
でループ処理に入ります。
i = 0(1回目のループ処理)のとき
w = w + Cells(7 + i, 6 - i)
から
w = w + Cells(7 + 0, 6 - 0)
すなわち
w = w + Cells(7, 6) (Cells(7, 6)はセルF7です。)
したがいまして、
w = 0 + 3
の計算から
w = 3
i = 1(2回目のループ処理)のとき
w = w + Cells(7 + i, 6 - i)
から
w = w + Cells(7 + 1, 6 - 1)
すなわち
w = w + Cells(8, 5) (Cells(8, 2)はセルE8です。)
したがいまして、
w = 3 + 7
の計算から
w = 10
i = 2(3回目のループ処理)のとき
w = w + Cells(7 + i, 6 - i)
から
w = w + Cells(7 + 2, 6 - 2)
すなわち
w = w + Cells(9, 4) (Cells(9, 4)はセルD9です。)
したがいまして、
w = 10 + 14
の計算から
w = 24
i = 3(4回目のループ処理)のとき
w = w + Cells(7 + i, 6 - i)
から
w = w + Cells(7 + 3, 6 - 3)
すなわち
w = w + Cells(10, 3) (Cells(10, 4)はセルC10です。)
したがいまして、
w = 24 + 22
の計算から
w = 46
i = 4(5回目のループ処理)のとき
w = w + Cells(7 + i, 6 - i)
から
w = w + Cells(7 + 4, 6 - 4)
すなわち
w = w + Cells(11, 2) (Cells(11, 5)はセルB11です。)
したがいまして、
w = 46 + 29
の計算から
w = 75
i = 5(6回目のループ処理)のとき
w = w + Cells(7 + i, 6 - i)
から
w = w + Cells(7 + 5, 6 - 5)
すなわち
w = w + Cells(12, 1) (Cells(12, 6)はセルA11です。)
したがいまして、
w = 75 + 36
の計算から
w = 111
Cells(15, 3) = "右上がり対角線合計 "
Cells(15, 6) = w (Cells(15, 6) はセルF15)
から
となって、右下がり対角線の合計の算出と表示に成功したわけです。
方陣はすべての列合計・行合計・対角線合計が
111で同じでした。
つまり、魔方陣であることが確定したのです。
さて、
第6講においては
例2が正しい数独になっているのか、
For文とIf文とを組み合わせて判定していきましょう。
初心者のためのc++ vc++ c言語 入門 基礎から応用までへ
初心者のための excel 2007 2010 2013 vba 入門 基礎から応用まで
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
vb講義トップへ
VB講義基礎へ
専門用語なしのC++入門へ
専門用語なしのJava入門へ
専門用語なしのVBA入門
数独のページ
魔方陣のページ
数学研究室に戻る
本サイトトップへ