第7講 For文を入れ子式に使い多次元ループを実現する
第5話 自然配列転置等解答例
コード例
Private Sub CommandButton1_Click()
Dim i As Byte, j As Byte
For i = 1 To 10
For j = 1 To 10
Cells(4 + i, 1 + j) = 10 * (i - 1) + j
Next
Next
For i = 1 To 10
For j = 1 To 10
Cells(15 + i, 1 + j) = 101 - (10 * (i - 1) + j)
Next
Next
For i = 1 To 10
For j = 1 To 10
Cells(4 + i, 12 + j) = 10 * (j - 1) + i
Next
Next
For i = 1 To 10
For j = 1 To 10
Cells(15 + i, 12 + j) = 101 - (10 * (j - 1) + i)
Next
Next
End Sub
Private Sub CommandButton2_Click()
Rows("5:200").Select
Selection.ClearContents
Range("A1").Select
End Sub
参考ファイル
さて、皆さんに数独や魔方陣に繋がる課題を出すことにしましょう。
(図のエクセルファイルはすべて水平位置は中央に揃えてあります。
参考ファイル開いて改良してください。)
このマクロは123の順列をすべて作り出すプログラムです。
これを3次元For文で実現して頂きたいのです。
実は、初心者の方には大変難しい課題です。
初心者どころか、ある程度プログラミングの経験を積んでいる人でさえ、
『えっ、どうやるの????』ではないでしょうか。
ですから、ヒントを書きます。
For文は
For i = 1 To 3
For j = 1 To 3
If i <> j Then
For k = 1 To 3
If k <> i And k <> j Then
と組ます。
iは図の赤を担当し、jは緑、kは青紫を担当します。
問題は、配置です。
つまり、Cellsをどうするかです。
配置をコントロールするのに、For文の制御変数i、j、k以外に、
もうひとつカウンターといわれる変数を用意します。
カウンターとは数えるという意味です。
回数を数える変数を用意するのです。
回数というのは、何回目の順列を作っているかの数です。
例えば、その回数を数える変数をcnとして、
cnを上手く使って配置を上図のようにします。
今回の課題が成功したら、魔方陣や数独に直接繋がる課題
へと挑戦して頂きます。
初心者のためのc++ vc++ c言語 入門 基礎から応用までへ
初心者のための excel 2007 2010 2013 vba マクロ 入門 基礎から応用まで
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
vb講義トップへ
VB講義基礎へ
専門用語なしのC++入門へ
専門用語なしのJava入門へ
専門用語なしのVBA入門
数独のページ
魔方陣のページ
数学研究室に戻る
本サイトトップへ