ソルバーを使ってはどうでしょうか。
概要は以下のとおりです。
○単価が同じデータは、集約したほうが何かと都合がよい。
- 集約したほうが効率がよい。
- ソルバーの制約条件(変数の個数は最大200個、条件数は最大100)に抵触するリスクを回避できます。
○ソルバーの内容
- 変動させる変数
単価毎の各データにおける加減個数を以下、n(i)と書き、これを変動変数とします。
- 制約条件
0. n(i)は整数であること。
0. n(i) は、減算後の個数はプラスである必要があります。
(例. n(i) >= (-1) * 現在の個数(i)
これはiの数だけ,個々に記述する必要があります。)
0. Σn(i) = -1
(合計セルを作っておいて、それが -1であることを要件に。)
0. Σn(i) * 単価(i) が必要な差分に等しいこと。
(計算式をセルに埋め、これが差分に一致することを要件に。)
- 最適化目標
n(i)の絶対値の合計を"最小化"します。(計算セルを作り、それを最小化。)
- 3つのアルゴリズムのうち、"エボリューショナリー"が適切かと思います。
○ 実行には分単位で時間がかかると思いますが、提示されたケースでは、以下のような結果が得られます。
単価 修正個数
2190 6
880 5
840 0
700 -1
670 0
640 0
580 0
520 -2
240 -9
--------------------
個数増減計 -1
金額増減計 13640
(表示されたデータだけでは、現在金額合計を再現できない。表示されたデータを元に、差分13640を構成する組み合わせを算出したものです。)
なお、詳細を書く能力がありませんので、問い合わせにはお応えできません。