第6講 If文(分岐)を理解しよう
第8話 数独列判定・行判定の完成
解答例
Private Sub CommandButton1_Click()
・
・
・
Dim v As Long
v = 1
For i = 0 To 8
v = v * CLng(Cells(7 + i, 9))
Next
If v = CLng(1) * CLng(2) * CLng(3) * CLng(4) * CLng(5) * CLng(6) * CLng(7) * CLng(8) * CLng(9) Then Cells(16, 9) = "○" Else Cells(16, 9) = "×"
v = 1
For i = 0 To 8
v = v * CLng(Cells(7 + i, 10))
Next
If v = CLng(1) * CLng(2) * CLng(3) * CLng(4) * CLng(5) * CLng(6) * CLng(7) * CLng(8) * CLng(9) Then Cells(16, 10) = "○" Else Cells(16, 10) = "×"
v = 1
For i = 0 To 8
v = v * CLng(Cells(7 + i, 11))
Next
If v = CLng(1) * CLng(2) * CLng(3) * CLng(4) * CLng(5) * CLng(6) * CLng(7) * CLng(8) * CLng(9) Then Cells(16, 11) = "○" Else Cells(16, 11) = "×"
v = 1
For i = 0 To 8
v = v * CLng(Cells(7 + i, 12))
Next
If v = CLng(1) * CLng(2) * CLng(3) * CLng(4) * CLng(5) * CLng(6) * CLng(7) * CLng(8) * CLng(9) Then Cells(16, 12) = "○" Else Cells(16, 12) = "×"
v = 1
For i = 0 To 8
v = v * CLng(Cells(7 + i, 13))
Next
If v = CLng(1) * CLng(2) * CLng(3) * CLng(4) * CLng(5) * CLng(6) * CLng(7) * CLng(8) * CLng(9) Then Cells(16, 13) = "○" Else Cells(16, 13) = "×"
v = 1
For i = 0 To 8
v = v * CLng(Cells(7 + i, 14))
Next
If v = CLng(1) * CLng(2) * CLng(3) * CLng(4) * CLng(5) * CLng(6) * CLng(7) * CLng(8) * CLng(9) Then Cells(16, 14) = "○" Else Cells(16, 14) = "×"
v = 1
For i = 0 To 8
v = v * CLng(Cells(7 + i, 15))
Next
If v = CLng(1) * CLng(2) * CLng(3) * CLng(4) * CLng(5) * CLng(6) * CLng(7) * CLng(8) * CLng(9) Then Cells(16, 15) = "○" Else Cells(16, 15) = "×"
v = 1
For i = 0 To 8
v = v * CLng(Cells(7 + i, 16))
Next
If v = CLng(1) * CLng(2) * CLng(3) * CLng(4) * CLng(5) * CLng(6) * CLng(7) * CLng(8) * CLng(9) Then Cells(16, 16) = "○" Else Cells(16, 16) = "×"
v = 1
For i = 0 To 8
v = v * CLng(Cells(7 + i, 17))
Next
If v = CLng(1) * CLng(2) * CLng(3) * CLng(4) * CLng(5) * CLng(6) * CLng(7) * CLng(8) * CLng(9) Then Cells(16, 17) = "○" Else Cells(16, 17) = "×"
v = 1
For i = 0 To 8
v = v * CLng(Cells(7, 9 + i))
Next
If v = CLng(1) * CLng(2) * CLng(3) * CLng(4) * CLng(5) * CLng(6) * CLng(7) * CLng(8) * CLng(9) Then Cells(7, 18) = "○" Else Cells(7, 18) = "×"
v = 1
For i = 0 To 8
v = v * CLng(Cells(8, 9 + i))
Next
If v = CLng(1) * CLng(2) * CLng(3) * CLng(4) * CLng(5) * CLng(6) * CLng(7) * CLng(8) * CLng(9) Then Cells(8, 18) = "○" Else Cells(8, 18) = "×"
v = 1
For i = 0 To 8
v = v * CLng(Cells(9, 9 + i))
Next
If v = CLng(1) * CLng(2) * CLng(3) * CLng(4) * CLng(5) * CLng(6) * CLng(7) * CLng(8) * CLng(9) Then Cells(9, 18) = "○" Else Cells(9, 18) = "×"
v = 1
For i = 0 To 8
v = v * CLng(Cells(10, 9 + i))
Next
If v = CLng(1) * CLng(2) * CLng(3) * CLng(4) * CLng(5) * CLng(6) * CLng(7) * CLng(8) * CLng(9) Then Cells(10, 18) = "○" Else Cells(10, 18) = "×"
v = 1
For i = 0 To 8
v = v * CLng(Cells(11, 9 + i))
Next
If v = CLng(1) * CLng(2) * CLng(3) * CLng(4) * CLng(5) * CLng(6) * CLng(7) * CLng(8) * CLng(9) Then Cells(11, 18) = "○" Else Cells(11, 18) = "×"
v = 1
For i = 0 To 8
v = v * CLng(Cells(12, 9 + i))
Next
If v = CLng(1) * CLng(2) * CLng(3) * CLng(4) * CLng(5) * CLng(6) * CLng(7) * CLng(8) * CLng(9) Then Cells(12, 18) = "○" Else Cells(12, 18) = "×"
v = 1
For i = 0 To 8
v = v * CLng(Cells(13, 9 + i))
Next
If v = CLng(1) * CLng(2) * CLng(3) * CLng(4) * CLng(5) * CLng(6) * CLng(7) * CLng(8) * CLng(9) Then Cells(13, 18) = "○" Else Cells(13, 18) = "×"
v = 1
For i = 0 To 8
v = v * CLng(Cells(14, 9 + i))
Next
If v = CLng(1) * CLng(2) * CLng(3) * CLng(4) * CLng(5) * CLng(6) * CLng(7) * CLng(8) * CLng(9) Then Cells(14, 18) = "○" Else Cells(14, 18) = "×"
v = 1
For i = 0 To 8
v = v * CLng(Cells(15, 9 + i))
Next
If v = CLng(1) * CLng(2) * CLng(3) * CLng(4) * CLng(5) * CLng(6) * CLng(7) * CLng(8) * CLng(9) Then Cells(15, 18) = "○" Else Cells(15, 18) = "×"
End Sub
Private Sub CommandButton2_Click()
Range("A13:F16").Select
Selection.ClearContents
Range("G7:G12,I16:Q16,R7:R15").Select
Selection.ClearContents
Range("A1").Select
End Sub
参考ファイル
最後から2番目のの課題です。
For文を使いブロックの判定をしてください。
これも2次元ループを使った方が簡単なのですが、
入れ子式でないFor文(1次元ループ)でも工夫すれば判定できます。
ヒントなしだと難しいと思いますので、
ヒントを入れておきましょう。
For文に関しては1行目は同じ
For i = 0 To 8
で良いのです。
ただし、Byte型の変数を2つa、s加えておきます。
1つ目の変数は、iを3で割ったときの余りを収納します。
iを3で割った余りは、i Mod 3で求められます。
sの方は、iを3で割った整数を収納します。
3で割った整数にするためにはInt(i / 3)を使えば良いのです。
この2つの変数aとsを使えば、
1次元のFor文でも2次元の動きをさせることができます。
ただし、動く順番は
1 | 2 | 3 |
4 | 5 | 6 |
7 | 8 | 9 |
です。皆さん考えてみてください。
尚、今回はエクセルシートの方もいじってください。
第1ブロックが入力されているセルは、
配置を標準に戻しています。
初心者のためのc++ vc++ c言語 入門 基礎から応用までへ
初心者のための excel 2007 2010 2013 vba マクロ 入門 基礎から応用まで
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
vb講義トップへ
VB講義基礎へ
専門用語なしのC++入門へ
専門用語なしのJava入門へ
専門用語なしのVBA入門
数独のページ
魔方陣のページ
数学研究室に戻る
本サイトトップへ