第6講 If文(分岐)を理解しよう

第4話 If文に否定の場合を加える(If~Else~文)

前話問題

ab
解答例
Private Sub CommandButton1_Click()
  Cells(6, 2) = Int(100 * Rnd())
  If Cells(6, 2) >= 60 Then
    Cells(8, 2) = "合格"
  Else
    Cells(8, 2) = "不合格"
  End If
End Sub

さて、いよいよ第6講のメインイベントです。
魔方陣?
例1が魔方陣であり、
例2が数独であることを検証するプログラムに取りかかりましょう。
まず、魔方陣であることを証明するプログラムを作りましょう。
第5講第11話のプログラム
魔方陣判定

を改良して、すべての列・行・対角線の合計が
6×(6×6+1)÷2
に等しいなら、

c
と表示させ、消去ボタンを押すと
魔方陣

となるように改良しましょう。


6×(6×6+1)÷2
は6次魔方陣の行・列・対角線の合計値です。
一般にn次魔方陣の行・列・対角線の合計値は、
n×(n×n+1)÷2
です。
なぜなら、n次魔方陣の1からn×nまでのすべての数字の和は、
n×n×(n×n+1)÷2
でそれを行数であるnで割れば、
n×(n×n+1)÷2
となるからです。
n×n×(n×n+1)÷2は
項数×(末項+初項)÷2の計算です。
等差数列の和の公式です。
n×(n×n+1)÷2をVBA上で実現するときは、
Int(n * (n * n + 1) / 2)
です。
Int(*)は*の小数部分を切り捨て、整数に変換するものです。
割り算があるので、Int()で()の中のものを整数にキャストする必要があります。

といってもこれをすぐに課題にしたのでは、難しすぎます。
そこで、より簡単な課題を出したいと思います。

参考ファイルを開いてください。
e
例によって
数独
とコードは空になっています。
さて、For文使ってB6からF6に100以下のランダムな整数を発生させ、
それがすべて50以上なら、
f
1教科でも50未満なら、
g
となるプログラムを考えてください。
Byte型の変数hを用意しておいて、
はじめそれに1を代入しておきます。
そして、セルB6からF6の数字を50と比べます。
もし、50未満なら・・・
以降皆さんご自分で考えてみましょう。

3話へ 第5話へ


トップ


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

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