第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を上手く使って配置を上図のようにします。

今回の課題が成功したら、魔方陣や数独に直接繋がる課題
方陣順列へと挑戦して頂きます。









4話へ 第6話へ


トップ

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

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