Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


49505 / 76732 ←次へ | 前へ→

【32137】Re:指定した条件に合致するものを抜き出す
発言  ichinose  - 05/12/6(火) 22:10 -

引用なし
パスワード
   ▼カカ さん、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

このリストが作成できれば、後は対応表との関わりだけですよね?
このような解釈で正しいですか?
0 hits

【32095】指定した条件に合致するものを抜き出す カカ 05/12/6(火) 13:14 質問
【32121】Re:指定した条件に合致するものを抜き出す awu 05/12/6(火) 17:04 発言
【32137】Re:指定した条件に合致するものを抜き出す ichinose 05/12/6(火) 22:10 発言

49505 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free