Excel VBA質問箱 IV

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

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


75714 / 76738 ←次へ | 前へ→

【5456】Re:数字の組みあわせ方
回答  ichinose  - 03/5/14(水) 18:39 -

引用なし
パスワード
   ▼さくら さん:
こんにちは。
>説明です
>       C3に1 D3に2 E3に3 F3に4 G3に5 H3に6 
>       C4に7 D4に8 E4に9 F4に10 と数字入力します。
>      
>   そしてC7.D7.E7.F7.G7から組合せ
>        1, 2, 3, 4, 5
>        1, 2, 3, 4, 6
>        1, 2, 3, 4, 7
>        1, 2, 3, 4, 8
>        1, 2, 3, 4, 9
>        1, 2, 3, 4,10
>        : : : : :
>        5, 7, 8, 9,10
>        6, 7, 8, 9,10
>
>上記はC3〜F4を、10個と固定した時の組合せですが、
>数字入力が5個のときや、6個、7個、8個、9個でも、くみあわせ出来るように
>したいのですが、いまいちわからないので教えてください。
>
>おしえてください・・。
>
>よろしくおねがいします。
じっくりデバッグしてないんで、確認はして下さい
'==========================================================
Sub test()
  Dim ans()
  Dim 抜き取り As Long
  抜き取り = 5
  '     ↑の数字を6個、7個、8個、9個に変えてください
  cmb = comb(ans(), Range("C3:H3,C4:F4"), 抜き取り)
  Range(Cells(7, 4), Cells(cmb + 6, 4 + 抜き取り - 1)).Value = ans()
  MsgBox "以上" & cmb & "通りのリストです"
End Sub
'===========================================================
Function comb(ans(), Optional rng As Range = Nothing, Optional seln As Long = 0, Optional ByVal myx As Long = 0, Optional ByVal ctx As Long = 0) As Long
'input rng : 組み合わせメンバーセル範囲
'   seln: 抜き取り数
'out  ans() 組み合わせリスト
'   mxy ctx は 内部パラメータ指定不可
  Dim crng As Range
  Static svn As Long
  Static myarray()
  Static idx As Long
  Static gyou As Long
  Static mylim As Long
  Dim cnt As Long
  If seln > 0 Then
    svn = seln
    Erase myarray
    i = 1
    For Each crng In rng
     ReDim Preserve myarray(1 To i)
     myarray(i) = crng.Value
     i = i + 1
     Next
    mylim = rng.Count
    myx = 1
    gyou = WorksheetFunction.Combin(rng.Count, seln)
    comb = gyou
    ReDim ans(1 To gyou, 1 To svn)
    ctx = 1
    idx = 1
    End If
  cnt = 0
  Do While myx <= mylim And idx <= gyou
   If cnt > 0 And idx > 1 Then
     For i = 1 To ctx - 1
      ans(idx, i) = ans(idx - 1, i)
      Next
     End If
   ans(idx, ctx) = myarray(myx)
   If ctx + 1 <= svn Then
     Call comb(ans(), , , myx + 1, ctx + 1)
     End If
   myx = myx + 1
   idx = idx + 1
   cnt = cnt + 1
   Loop
  idx = idx - 1
End Function

3 hits

【5435】数字の組みあわせ方 さくら 03/5/13(火) 20:45 質問
【5456】Re:数字の組みあわせ方 ichinose 03/5/14(水) 18:39 回答
【5458】Re:数字の組みあわせ方 さくら 03/5/14(水) 19:55 質問
【5462】Re:数字の組みあわせ方 ichinose 03/5/15(木) 0:39 回答
【5481】Re:数字の組みあわせ方 さくら 03/5/15(木) 14:41 お礼

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