第8講 多次元ループ=多次元For文の学習

第4話 2次順列作成(2次元For文)コード例
m
を実現するプログラム例
Private Sub CommandButton1_Click()

  CommandButton2_Click
  f '2順列作成プロシージャ

End Sub
Sub f()

  Dim i As Integer, j As Integer, k As Integer, cn As Integer
  Dim a(2) As Integer
  cn = 0
  For i = 1 To 2
    a(0) = i
    For j = 1 To 2
      If j <> a(0) Then
        a(1) = j
        Call g(cn, a())
        cn = cn + 1
      End If
    Next
  Next
  
End Sub

Sub g(cn As Integer, a() As Integer)

  Dim i As Integer
  For i = 0 To 1
    Cells(5, 1 + i + 3 * cn) = a(i)
  Next
  
End Sub
(CommandButton2_Clickは省略。この後も省略します。)
参考ダウンロード添付ファイル

解説
コードの行数は短いですが、
かなり頭が混乱しますね。
a(0)とa(1)のすべての場合は
(1,1)(1,2)(2,1)(2,2)
ですが、このうち(1,1)と(2,2)が順列の規則に反します。
規則は、数字の重複があってはならないです。
重複させないために、
    For j = 1 To 2
      If j <> a(0) Then
        a(1) = j
        Call g(cn, a())
        cn = cn + 1
      End If
    Next
中のIf文があります。
この条件をクリアして(1,2)となったときに順列になりますので、
始めて表示関数gによって、結果シートに打ち出されているわけです。
    Cells(5, 1 + i + 3 * cn) = a(i)
のcnは結果が3つ飛びに表示させる働きをしています。

m

D5はA5から3つ飛んでますよね。
もし、
   Cells(5, 1 + i ) = a(i)
だったとすると、
(1,2)と(2,1)が同じ
A5とB5に重ねて表示されてしまいます。
以上をヒントに3次順列に挑戦しましょう。
p
難しいですが、粘り強く頑張りましょう。




第3話へ 第5話へ

004

eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
vc++講義へ
excel 2013 2010 2007 vba入門へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
専門用語なしの C言語 C++ 入門(Visual C++ 2010で学ぶ C言語 C++ 入門)
専門用語なしの excel vba マクロ 入門 2013 2010 2007 対応講義 第1部
eclipse java 入門へ
excel 2016 vba 入門へ第2部へ
小学生からエンジニアまでのRuby入門へ
小学生からエンジニアまでのC言語入門 基礎から応用まで
本サイトトップへ