| 
    
     |  | ▼カカ さん、awuさん、こんばんは。 
 >はじめて投稿させていただきます。
 >第一グループとしてセルA1〜A6まで数字が6個あります。
 >第二グループとしてセルB1〜B6まで数字が6個あります。
 >第三グループとしてセルC1〜C6まで数字が6個あります。
 
 >これとは別に対応表があって、上記の1〜3のグループでできる組み合わせを対応表から抜き出す。
 対応表のレイアウトや1〜3のグループでできる組み合わせが
 対応表とどのように関わっているのか明確にしましょう!!
 
 以下のいコードはa1:c6にサンプルデータを作成し、
 そのグループでできる組み合わせリストをE列に表示するコードです。
 標準モジュールに
 
 '==============================================================
 Sub main()
 Dim ans()
 '  ↑組み合わせメンバーを取得する配列
 Dim rng As Range
 '  ↑組み合わせセル範囲
 With Range("a1:c6")
 .Formula = "=int(rand()*500)+1"
 .Value = .Value
 End With
 'サンプルデータ作成
 Set rng = Range("a1:c6")
 ReDim ans(1 To rng.Columns.Count)
 combcnt = init_allcomb(rng) '総当り数取得
 Do While get_allcomb(ans()) = 0
 Cells(idx + 1, 5).Value = Join(ans(), "-")
 idx = idx + 1
 Loop
 MsgBox "以上" & combcnt & "通り表示しました"
 End Sub
 
 
 別の標準モジュールに
 '===================================================================
 Private c_myarray()
 Private c_idx() As Long
 '===================================================================
 Function init_allcomb(rng As Range) As Double
 '総当り組み合わせデータをセットする
 'input : rng 組み合わせセル範囲
 'output: allcomb_init 組み合わせ総数
 c_svn = seln
 Erase c_myarray
 Erase c_idx
 With rng
 c_myarray() = .Value
 init_allcomb = .Rows.Count ^ .Columns.Count
 ReDim c_idx(1 To .Columns.Count)
 For idx = LBound(c_idx()) To UBound(c_idx())
 c_idx(idx) = 1
 Next
 c_idx(UBound(c_idx())) = 0
 End With
 End Function
 '======================================================================
 Function get_allcomb(ans()) As Long
 '総当り組み合わせメンバーを配列に出力する
 'output: ans() メンバの配列
 '    get_allcomb:0 -- 正常に配列取得
 '         1 -- メンバの終わり
 get_allcomb = 1
 For i = UBound(c_idx()) To LBound(c_idx()) Step -1
 If c_idx(i) + 1 <= UBound(c_myarray(), 1) Then
 c_idx(i) = c_idx(i) + 1
 get_allcomb = 0
 Exit For
 Else
 c_idx(i) = 1
 End If
 Next
 If get_allcomb = 0 Then
 For i = LBound(c_idx()) To UBound(c_idx())
 ans(i) = c_myarray(c_idx(i), i)
 Next
 End If
 End Function
 
 このリストが作成できれば、後は対応表との関わりだけですよね?
 このような解釈で正しいですか?
 
 
 |  |