第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です。)

数独
vba
 したがいまして、
    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です。)
数独
vba
 したがいまして、
    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)
から
数独
VBA
となって、右下がり対角線の合計の算出と表示に成功したわけです。



魔方陣判定
方陣はすべての列合計・行合計・対角線合計が
111で同じでした。
つまり、魔方陣であることが確定したのです。

さて、
魔方陣?
第6講においては
例2が正しい数独になっているのか、
For文とIf文とを組み合わせて判定していきましょう。



10話へ 第6講第1話へ


トップ

初心者のためのc++ vc++ c言語 入門 基礎から応用までへ
初心者のための excel 2007 2010 2013 vba 入門 基礎から応用まで
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
vb講義トップへ
VB講義基礎へ
専門用語なしのC++入門へ
専門用語なしのJava入門へ
専門用語なしのVBA入門

数独のページ
魔方陣のページ
数学研究室に戻る
本サイトトップへ