| 
    
     |  | ▼ichinose さん: >>これで、すべての小幅が組み合わされています。
 >まず、仕様です。
 >上の例題に値を固定してコードを書きました。
 >コードを見ていただければ、変更は可能かと思います。
 >
 >アクティブシートのセルA1〜A7に小幅メンバーの数値が入力して下さい。
 >   A
 >1  305
 >2  305
 >3  125
 >4  300
 >5  50
 >6  430
 >7  430
 >
 >この数値を入力して(値は変えてもかまいません)下記に記述してあるmainを実行して下さい。
 >
 >C列 3行目からリストが表示され、F列には、差幅値(残幅)が表示されます。
 >
 >では、コードです。
 >標準モジュール(Module1)に、
 >'====================================================================
 > Sub main()
 >  Const 抜き取り = 2
 >  Dim rng As Range
 >  Dim 最小差幅リスト
 Dim r_cnt As Long ' 使ってないので削除
 >  Dim dsprow As Long
 Dim nrng As Range '使ってないので削除
 >  Dim 組み合わせ数 As Long
 >  組み合わせ数 = 抜き取り
 >  dsprow = 3
 >  Set rng = Range("a1:a7") '小幅メンバセル範囲のセット
 >  Do While Not rng Is Nothing
 >   If rng.Count >= 抜き取り Then
 >    組み合わせ数 = 抜き取り
 >   Else
 >    組み合わせ数 = rng.Count
 >    End If
 >   If get_min_comb(rng, 最小差幅リスト, 組み合わせ数, 500) = 0 Then
 >'                              ↑大幅の値を変更するならこの500を変更
 >
 >    wk = UBound(最小差幅リスト) - LBound(最小差幅リスト)
 >    Range(Cells(dsprow, 3), Cells(dsprow, 3 + wk)).Value = 最小差幅リスト
 >    Cells(dsprow, 6).Value = Evaluate("500-(" & Join(最小差幅リスト, "+") & ")")
 >    dsprow = dsprow + 1
 >    End If
 >   Set rng = get_next_rng(rng, 最小差幅リスト)
 >'        ↑表示したセル以外の範囲を設定
 >   Loop
 > End Sub
 
 
 留意点
 
 小幅メンバの中に大幅の値を越える値が入っていると
 正常に作動しません。(例えば、505とか600)
 mainでは、この辺のチェックも必要ですね!!
 
 
 |  |