長さが異なる部材が3種類以上ある場合には、「各部材を何本ずつ取るのが最適なのか?」という事を、数学的に求める方法は存在しません。
余りが最短となる組合せを最適とした場合においても、余りの長さが等しくなる組合せが複数存在するかもしれませんから、一律には決める事は出来ません。
只、Excelを利用して、「切出す事の出来る全ての組合せを、リストに表示する」事であれば可能です。
多数ある組合せの中から、どの組合せにするのかは、人間側の都合によって変わりますから、パソコンが勝手に判断して決める事は出来ず、組合せを選択して決めるのは人間の仕事になります。
例えば、添付画像の方法では、B1セルに元となる材料(以下「原材」と仮称)の長さを入力し、A2以下に切出す各部材の名称を入力し、B2以下に切出す各部材の長さを、それぞれ入力しますと、
D3セルに原材の長さが表示され、
E3から右方向に向かって、各部材の長さが、長いものから順番に表示され、
D列よりも右側にある列の6行目以下には、切出す事が可能な、全ての組合せが表示され、
D6以下には、各組合せごとの、切出した後に残る余った部分の長さが表示されます。
尚、D1よりも右側にあるセルに表示されている数字は、各部材の長さの順位です。
この様なリストを自動的に作成させるための方法は、以下の様なものです。
まず、A1セルに「原材」、D2セルに「原材長」、D5セルに「余り長」、と入力して下さい。
次に、D3セルに次の数式を入力して下さい。
=IF(ISNUMBER(1/SQRT($B$1)),$B$1,"")
次に、E3セルに次の数式を入力して下さい。
=IF(OR($D$3="",COUNT($B:$B)<COLUMNS($D:E)),"",LARGE(INDEX($B:$B,ROW($A$1)+1):INDEX($B:$B,MATCH(9^9,$B:$B)),COLUMNS($E:E)))
次に、E1セルに次の数式を入力して下さい。
=IF(ISNUMBER(E$3),RANK(E$3,(INDEX($B:$B,ROW($A$1)+1):INDEX($B:$B,MATCH(9^9,$B:$B)))),"")
次に、E2セルに次の数式を入力して下さい。
=IF(ISNUMBER(E$3),INDEX($A:$A,SUMPRODUCT(ROW(INDEX($B:$B,ROW($A$1)+1):INDEX($B:$B,MATCH(9^9,$B:$B)))*(INDEX($B:$B,ROW($A$1)+1):INDEX($B:$B,MATCH(9^9,$B:$B))=E$3)*(COUNTIF(OFFSET(INDEX($B:$B,ROW($A$1)),1,,ROW(INDEX($B:$B,ROW($A$1)+1):INDEX($B:$B,MATCH(9^9,$B:$B)))-ROW($A$1)),E$3)=COUNTIF($E$3:E$3,E$3))))&"長","")
次に、E5セルに次の数式を入力して下さい。
=IF(E$2="","",SUBSTITUTE(E$2,"長","数量",LEN(E$2)-LEN(SUBSTITUTE(E$2,"長",))))
次に、E1~E5の範囲をコピーして、F1~F5の範囲に貼り付けて下さい。
次に、E6セルに次の数式を入力して下さい。
=IF(ISNUMBER(E$3),INT($D$3/E$3),"")
次に、F6セルに次の数式を入力して下さい。
=IF(ISNUMBER(F$3),INT(($D$3-SUMPRODUCT($E$3:E$3*$E6:E6))/F$3),"")
次に、E7セルに次の数式を入力して下さい。
=IF(ISNUMBER(E6),IF(SUM(E6:INDEX(6:6,MATCH(9^9,$3:$3)))<=E6+INDEX(6:6,MATCH(9^9,$3:$3)),IF(E6=0,"",E6-1),E6),"")
次に、F7セルに次の数式を入力して下さい。
=IF(AND(ISNUMBER(F$3),ISNUMBER($E7)),IF(OR(G$3="",SUM(F6:INDEX(6:6,MATCH(9^9,$3:$3)))=INDEX(6:6,MATCH(9^9,$3:$3))),INT(($D$3-SUMPRODUCT($E$3:E$3*$E7:E7))/F$3),F6-(SUM(F6:INDEX(6:6,MATCH(9^9,$3:$3)))<=F6+INDEX(6:6,MATCH(9^9,$3:$3)))),"")
次に、F1~F7の範囲をコピーして、同じ行の右方向に向かって(「1本の原材から切り出す部材の種類の数」を上回るのに充分な列数だけ)貼り付けて下さい。
次に、D6セルに次の数式を入力して下さい。
=IF(OR($D$3="",COUNT($B:$B)<2),"",$D$3-SUMPRODUCT($E$3:INDEX($3:$3,MATCH(9^9,$3:$3))*$E6:INDEX(6:6,MATCH(9^9,$3:$3))))
次に、D6セルコピーして、D7セルに貼り付けて下さい。
次に、7行目全体をコピーして、8行目以下に貼り付けて下さい。
枠線は適時設定して下さい。
これで準備は完了で、後はB1セルに原材の長さを、A2以下に切出す各部材の名称を、B2以下に切出す各部材の長さを、それぞれ入力しますと、切出す事が可能な、全ての組合せのリストが自動的に表示されます。
お礼
数式と入力方法の解説、及び私の足らない説明への配慮 ありがとうございました。 ご教授頂いた表を活用して行きます。