dポイントプレゼントキャンペーン実施中!

A列に人名が100人、B列に数字が10から4800まで入っています。たとえば一番の伊藤さんは52、二番の佐藤さんは2280、三番の武藤さんは158、とかです。
そのB列の合計ができるだけ5000に近く、しかも5000未満になる人同士の組を作りたいのです。
人数に制限はなく、組の数にも制限はありません。

どういう関数ならできますか。

A 回答 (2件)

既存のExcelに組み込まれた関数では実現は難しいです。


不可能というわけではありません(計算用に十数シート作るハメになる)が、
条件が不明で質問内容だけではどうにもなりません。
マクロなら大した話ではありませんが、補足で条件を追記した方が良いと思います。

不足条件
 数字は一意?重複する?
  大した理由ではないです。一意なら処理が速いってレベル

 5000に近い順から組み合わせ?人数が少ない順から組み合わせ?
 組の合計が同じ場合の優先順位は?
  最終的なアウトプットをどうしたいかに依ります。

 5000未満にならない場合(組になれない人)は?

 5000未満で組と認識されない条件は?
  これは全パターン出力させれば済む話・・に見えますが
  例えば100人から4人の組となりうるパターンは390万パターンあります。
  全部が全部5000未満にはならないとは思いますが、「ならない」確証がありません
  仮に全員が200以下の数字であった場合、26人の組が成立し、パターンだけで約7垓。
  ある程度足切りさせる条件が無いと理論上実行しても結果が出るまで何か月(何年)かかるレベルになります。
    • good
    • 2

そのような関数はありません。


関数はおろか、最適解を求めるアルゴリズムもたぶんないでしょう。

試行錯誤でやるしかありませんが、VBAでやるとしたらなるべく大きい数字から確定させていく方法でしょうかね(それが最適解になるとは限りません)。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!