Excelで指定の合計になる組み合わせを探す方法|VBAなしの選び方

「120、180、200、310、190のうち、どれを足すと500になるか」。この問いは、一覧を全部足す作業とは違います。必要なのは、各行を使うか、使わないかを決めることです。ExcelのSUMを別の関数に置き換えるだけでは、その選択は決まりません。

この記事では、ITtripが提供する「合計さがし」を使う手順も紹介します。金額の組み合わせを探す道具として使い、元の明細や取引の内容は手元の資料で確認してください。

目次

まず、集計と組み合わせ探しを分ける

知りたいこと必要な操作
一覧全体はいくらか金額列を合計する
取引先Aだけでいくらか取引先という既知の条件で集計する
どの明細を足すと500か行を選び、その合計が500になる組み合わせを探す

共通の請求番号がある場合は、その番号で照合するほうが先です。番号などの共通キーがないときに、合計金額から候補を探す方法が役立ちます。条件がすでに決まっている集計は、条件が決まっているデータを Power Query で集計するも参考になります。

Excelでは「使う=1、使わない=0」の列を作る

B2:B6に金額、C2:C6に選択用の0を入れます。C列は元の金額を変更せず、採用する行を記録するための列です。E2には次の式を入力します。

=SUMPRODUCT(B2:B6,C2:C6)
金額(B列)選択(C列)の例
1201
1801
2001
3100
1900

この選択なら、120×1+180×1+200×1+310×0+190×0=500です。SUMPRODUCTは対応する値の積を合計する関数で、この「金額×選択」の形に使えます。SUMPRODUCT 関数(Microsoft)で関数の仕様を確認できます。

ソルバーで選択列の0と1を決める

Microsoft公式のソルバーは、目的セルと変数セル、制約を指定するアドインです。上の表は、金額を固定し、選択列だけを変更するモデルとして作れます。

  1. [データ]の[ソルバー]を開きます。表示されない場合は、利用環境でソルバー アドインを有効にできるか確認します。
  2. 目的セルをE2にし、目的の値を500に設定します。
  3. 変更する変数セルをC2:C6にします。
  4. C2:C6にbin(バイナリ)の制約を加え、選択を0または1に限定します。
  5. この式は固定金額と選択変数の積の合計なので、線形モデルとしてシンプレックス LPを選び、解決します。
  6. 得られたC列を確認し、1の行の金額を手元で再合計します。

binを付けずに小数を許すと、たとえば一つの請求書を0.5件だけ採用するような結果が混ざり、明細の組み合わせという目的から外れます。Microsoftのソルバーを使って問題を定義し、解決する(Microsoft)では制約と目的値の指定を確認できます。Excel for the webでは、この標準のソルバー アドインを利用できません。

候補を複数見比べる単発作業なら合計さがしを使う

合計さがしの初期版は、整数の金額を30件まで貼り付け、目標金額に一致する候補を表示します。この例には、120+180+200と310+190の2候補があります。一つ見つかった段階で唯一の答えと決めず、元の明細を比べます。

金額120・180・200・310・190の5件から、合計500に一致する2候補を表示した合計さがしの全体画面
金額5件を目標500で検索した例。120+180+200と310+190の2候補が表示されます。
  1. 金額一覧に120、180、200、310、190を1行ずつ貼り付けます。
  2. 目標金額を500にし、[この合計を探す]を押します。
  3. 候補の行と金額を確認します。完了と打ち切りの表示を読み分けます。
合計500に一致する候補Aの一覧の1・2・3行、120円・180円・200円を展開した画面
候補Aは120+180+200=500。候補の行番号を見ながら、元の一覧と対応させて確認します。

どちらの方法を選ぶか

作業の条件選び方
同じブックで条件を変えて繰り返す選択列とソルバーのモデルを残す
30件以内の整数を一度だけ照合する貼り付け検索で候補を比較する
納期や個数など別の制約も必要制約を設定できるモデルを検討する
小数、31件以上、業務全体の継続照合初期版の検索範囲を超えるため、別の方法を選ぶ

ソルバーの一回の結果は、すべての一致候補を列挙した証拠にはなりません。合計さがしも約5秒・100候補の上限で打ち切る場合があります。必要なのは、見つかった候補と、まだ調べていない範囲を分けて扱うことです。

よくある質問

SUMPRODUCTだけで行を選べますか?

選択列を与えたときの合計は計算できますが、どの行を1にするかは別に決める必要があります。上の例ではソルバーが選択列を変更します。

表示を整数にすれば小数の明細を検索できますか?

表示形式を変えるだけで元の値が整数になるとは限りません。小数を勝手に四捨五入すると照合対象が変わるので、元データの単位と端数処理を確認してください。

参考にした公式資料

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次