Excel で指定した合計値に一致するすべての組み合わせを検索するには、どうすればよいでしょうか?
リスト内の数値から、特定の合計値をつくるすべての可能な組み合わせを見つけるのは、予算編成や計画、データ分析などにおいて多くのExcel ユーザーが直面する課題です。
この例では、数値のリストから合計が480 となる組み合わせを特定することが目的です。添付のスクリーンショットには、その合計値を達成する5 つの可能な組み合わせ(例:300+120+60、250+120+60+50 など)が示されています。本記事では、Excel でリスト内の数値から指定された合計値となる組み合わせを特定するさまざまな方法をご紹介します。

ソルバー機能で指定された合計値と等しいセルの組み合わせを見つける
Excel で特定の数値を実現するセルの組み合わせを見つけるのは難しそうに思えるかもしれませんが、ソルバーアドインを使えば簡単に実現できます。本セクションでは、ソルバーを設定して最適なセルの組み合わせを導き出す簡単な手順をご紹介し、一見複雑なタスクをシンプルかつ確実にこなせるようサポートします。
ステップ1:ソルバーアドインを有効化
- 次に、ファイル > オプションをクリックします。Excel のオプションダイアログボックスが表示されたら、左側のペインからアドインを選択し、続いて実行ボタンをクリックしてください。スクリーンショットをご覧ください:

- 次に、アドインダイアログが表示されるので、ソルバーアドインにチェックを入れて、OKをクリックし、このアドインを正常にインストールしてください。

ステップ2:数式を入力
ソルバーアドインを有効化した後、セル B11 に次の数式を入力する必要があります:
=SUMPRODUCT(B2:B10,A2:A10)

ステップ3:ソルバーを設定・実行して結果を取得
- 次に、データ>ソルバーをクリックしてソルバーパラメーターダイアログボックスを開き、以下の操作を行ってください:
- (1。)
ボタンをクリックして、B11セルを選択します。このセルは数式が入力されている場所で、目的セルの設定セクション内にあります。 - (2。)次に、目標値セクションで、指定の値を選択し、必要に応じて目標値を480に設定してください。
- (3。)変数セルの変更セクションで、
ボタンをクリックし、セル範囲 B2:B10を選択してください。この範囲には対応する数値が記録されます。 - (4。)次に、追加ボタンをクリックしてください。

- (1。)
- 制約の追加ダイアログボックスが表示されたら、
セル範囲を選択するためのB2:B10をクリックし、ドロップダウンリストからbinを選択してください。最後に、OKボタンをクリックします。スクリーンショットをご覧ください:
- ソルバーパラメーターダイアログで解決ボタンをクリックします。数分後、ソルバーの結果ダイアログボックスが表示され、指定された合計値480 と等しいセルの組み合わせが列 B で「1」としてマークされていることを確認できます。ソルバーの結果ダイアログで、ソルバーの解を保存するオプションを選択し、OKをクリックしてダイアログを閉じます。スクリーンショットをご覧ください:

指定された合計値に等しいすべての数値の組み合わせを取得する
Excel の高度な機能を活用すれば、特定の合計値と一致するすべての数値の組み合わせを簡単に見つけることができます。本セクションでは、指定された合計値と完全に一致する数値の組み合わせを効率よく導き出す2 つの方法をご紹介します。
ユーザー定義関数で指定された合計値と等しいすべての数値の組み合わせを取得
特定の数値セットから、合計が指定された値となるすべての可能な組み合わせを明らかにするには、以下に示すカスタム関数が効果的なツールです。
ステップ1:VBA モジュールエディターを開き、コードをコピー
- Excel でALT + F11キーを押すと、Microsoft Visual Basic for Applicationsウィンドウが開きます。
- 次に、挿入>標準モジュールをクリックし、モジュールウィンドウに次のコードを貼り付けます。
VBA コード:指定された合計値と等しいすべての数字の組み合わせを取得Public Function MakeupANumber(xNumbers As Range, xCount As Long) 'updateby Extendoffice Dim arrNumbers() As Long Dim arrRes() As String Dim ArrTemp() As Long Dim xIndex As Long Dim rg As Range MakeupANumber = "" If xNumbers.CountLarge = 0 Then Exit Function ReDim arrNumbers(xNumbers.CountLarge - 1) xIndex = 0 For Each rg In xNumbers If IsNumeric(rg.Value) Then arrNumbers(xIndex) = CLng(rg.Value) xIndex = xIndex + 1 End If Next rg If xIndex = 0 Then Exit Function ReDim Preserve arrNumbers(0 To xIndex - 1) ReDim arrRes(0) Call Combinations(arrNumbers, xCount, ArrTemp(), arrRes()) ReDim Preserve arrRes(0 To UBound(arrRes) - 1) MakeupANumber = arrRes End Function Private Sub Combinations(Numbers() As Long, Count As Long, ArrTemp() As Long, ByRef arrRes() As String) Dim currentSum As Long, i As Long, j As Long, k As Long, num As Long, indRes As Long Dim remainingNumbers() As Long, newCombination() As Long currentSum = 0 If (Not Not ArrTemp) <> 0 Then For i = LBound(ArrTemp) To UBound(ArrTemp) currentSum = currentSum + ArrTemp(i) Next i End If If currentSum = Count Then indRes = UBound(arrRes) ReDim Preserve arrRes(0 To indRes + 1) arrRes(indRes) = ArrTemp(0) For i = LBound(ArrTemp) + 1 To UBound(ArrTemp) arrRes(indRes) = arrRes(indRes) & "," & ArrTemp(i) Next i End If If currentSum > Count Then Exit Sub If (Not Not Numbers) = 0 Then Exit Sub For i = 0 To UBound(Numbers) Erase remainingNumbers() num = Numbers(i) For j = i + 1 To UBound(Numbers) If (Not Not remainingNumbers) <> 0 Then ReDim Preserve remainingNumbers(0 To UBound(remainingNumbers) + 1) Else ReDim Preserve remainingNumbers(0 To 0) End If remainingNumbers(UBound(remainingNumbers)) = Numbers(j) Next j Erase newCombination() If (Not Not ArrTemp) <> 0 Then For k = 0 To UBound(ArrTemp) If (Not Not newCombination) <> 0 Then ReDim Preserve newCombination(0 To UBound(newCombination) + 1) Else ReDim Preserve newCombination(0 To 0) End If newCombination(UBound(newCombination)) = ArrTemp(k) Next k End If If (Not Not newCombination) <> 0 Then ReDim Preserve newCombination(0 To UBound(newCombination) + 1) Else ReDim Preserve newCombination(0 To 0) End If newCombination(UBound(newCombination)) = num Combinations remainingNumbers, Count, newCombination, arrRes Next i End Sub
ステップ2:カスタム数式を入力して結果を取得
コードを貼り付けたら、コードウィンドウを閉じてワークシートに戻りましょう。空白セルに次の数式を入力して結果を表示し、Enterキーを押してすべての組み合わせを取得してください。スクリーンショットをご覧ください:
=MakeupANumber(A2:A10,B2)

=TRANSPOSE(MakeupANumber(A2:A10,B2))

- このカスタム関数はExcel の365 および2021 でのみ動作します。
- この方法は正の数値にのみご利用いただけます。小数点以下の値は自動的に最も近い整数に丸められ、負の数値を入力した場合はエラーとなります。
強力な機能で指定された合計値と等しいすべての数値の組み合わせを取得
前述の関数には制限があるため、迅速かつ包括的なソリューションとして、あらゆるバージョンのExcel でご利用いただける「Kutools for Excel」の数値補完機能をおすすめします。この代替手段は正の数値、小数、負の数値にも対応しており、指定された合計値と一致するすべての組み合わせを素早く取得できます。
- 次に、Kutools > コンテンツ > 数値の補完をクリックしてください。スクリーンショットをご覧ください:

- 次に、表示された数値の補完ダイアログボックスで、
ソース範囲から使用する数値リストを選択するためのボタンをクリックし、その後、合計テキストボックスに目標となる合計値を入力します。最後に、OKボタンをクリックしてください。スクリーンショットをご覧ください:
- すると、結果を表示するセルを選択するよう促すメッセージボックスが表示されますので、OKをクリックしてください。スクリーンショットをご確認ください:

- これで、指定された数値と等しいすべての組み合わせが、以下のスクリーンショットのように表示されました:

VBA コードで合計値が特定の範囲内になるすべての数値の組み合わせを取得
場合によっては、合計が特定の範囲内になるすべての可能な数値の組み合わせを特定する必要があることがあります。例えば、合計が470 から480 の間になるすべての可能な数値のグループを見つけたい場合などが該当します。
特定の範囲内の値となるすべての可能な数値の組み合わせを見つけるのは、Excel において非常に興味深く、かつ実用的な課題です。本セクションでは、この課題を解決するための VBA コードをご紹介します。
ステップ1:VBA モジュールエディターを開き、コードをコピー
- Excel でALT + F11を押すと、Microsoft Visual Basic for Applicationsウィンドウが開きます。
- 次に、挿入>標準モジュールをクリックし、モジュールウィンドウに次のコードを貼り付けます。
VBA コード:特定の範囲内の合計値になるすべての数字の組み合わせを取得Sub Getall_combinations() 'Updateby Extendoffice Dim xNumbers As Variant Dim Output As Collection Dim rngSelection As Range Dim OutputCell As Range Dim LowLimit As Long, HiLimit As Long Dim i As Long, j As Long Dim TotalCombinations As Long Dim CombTotal As Double Set Output = New Collection On Error Resume Next Set rngSelection = Application.InputBox("Select the range of numbers:", "Kutools for Excel", Type:=8) If rngSelection Is Nothing Then MsgBox "No range selected. Exiting macro.", vbInformation, "Kutools for Excel" Exit Sub End If On Error GoTo 0 xNumbers = rngSelection.Value LowLimit = Application.InputBox("Select or enter the low limit number:", "Kutools for Excel", Type:=1) HiLimit = Application.InputBox("Select or enter the high limit number:", "Kutools for Excel", Type:=1) On Error Resume Next Set OutputCell = Application.InputBox("Select the first cell for output:", "Kutools for Excel", Type:=8) If OutputCell Is Nothing Then MsgBox "No output cell selected. Exiting macro.", vbInformation, "Kutools for Excel" Exit Sub End If On Error GoTo 0 TotalCombinations = 2 ^ (UBound(xNumbers, 1) * UBound(xNumbers, 2)) For i = 1 To TotalCombinations - 1 Dim tempArr() As Double ReDim tempArr(1 To UBound(xNumbers, 1) * UBound(xNumbers, 2)) CombTotal = 0 Dim k As Long: k = 0 For j = 1 To UBound(xNumbers, 1) If i And (2 ^ (j - 1)) Then k = k + 1 tempArr(k) = xNumbers(j, 1) CombTotal = CombTotal + xNumbers(j, 1) End If Next j If CombTotal >= LowLimit And CombTotal <= HiLimit Then ReDim Preserve tempArr(1 To k) Output.Add tempArr End If Next i Dim rowOffset As Long rowOffset = 0 Dim item As Variant For Each item In Output For j = 1 To UBound(item) OutputCell.Offset(rowOffset, j - 1).Value = item(j) Next j rowOffset = rowOffset + 1 Next item End Sub
ステップ2:コードを実行
- コードを貼り付けたら、F5キーを押してコードを実行してください。最初に表示されるダイアログで、使用する数値の範囲を選択し、OKをクリックします。スクリーンショットをご確認ください:

- 2 番目のプロンプトボックスで、下限値を入力または選択して、OKをクリックしてください。スクリーンショットをご確認ください:

- 3 番目のプロンプトボックスで上限値を入力または選択し、OKをクリックしてください。スクリーンショットをご覧ください:

- 最後のプロンプトボックスで、結果の出力を開始するセル(出力先セル)を選択し、OKをクリックしてください。スクリーンショットをご確認ください:

結果
これで、条件を満たす各組み合わせがワークシートの連続する行にリストされ、指定した出力セルから始まります。
Excel には、合計が特定の値となる数値の組み合わせを見つけるためのさまざまな方法があり、それぞれ動作が異なるため、あなたのExcel スキルやプロジェクトの要件に応じて最適なものを選べます。 さらに多くのExcel のヒントやテクニックを知りたい場合は、当社ウェブサイトに数千ものチュートリアルをご用意しています。ご一読いただきありがとうございます。今後も役立つ情報を提供できるよう努めてまいります!
関連記事:
- 考えられるすべての組み合わせを一覧または生成する
- たとえば、次のような2 つのデータ列があり、これらに基づいて考えられるすべての組み合わせを、左側のスクリーンショットのように一覧表示したいとします。値が少ない場合は手作業で一つずつ列挙することも可能ですが、複数の列にわたり多数の値の組み合わせを効率よく処理したい場合、Excel には役立つテクニックがいくつかあります。
- 単一の列から考えられるすべての組み合わせを一覧表示する
- Excel で下のスクリーンショットのような結果を得るために、単一の列のデータから考えられるすべての組み合わせを効率的に取得する迅速な方法はありますか?
- 3 列または複数列のすべての組み合わせを生成する
- たとえば、3 列のデータがあり、これらの3 列に含まれるデータのすべての組み合わせを、下のスクリーンショットのように生成したり一覧表示したりしたいとします。Excel でこのタスクを効率よくこなす優れた方法はあるでしょうか?
- 考えられるすべての4 桁の数字の組み合わせを一覧生成する
- 場合によっては、0000、0001、0002…9999 といった0 から9 までの数字を使ったすべての4 桁の組み合わせを生成する必要があります。Excel でこのリスト作成タスクをスピーディーにこなすため、いくつかの便利なテクニックをご紹介します。
最高のオフィス生産性向上ツール
| 🤖 | KUTOOLS AI アシスト:次に基づいてデータ分析を革新します:インテリジェント実行 | コード生成| カスタム数式作成 | データ分析とチャート生成| 拡張機能呼び出し… |
| 人気機能:検索、ハイライト、または重複をマーキング | 空白行を削除する | データを失うことなく列の結合またはセルを | 数式を使用しない四捨五入... | |
| スーパー LOOKUP:複数条件 VLookup | 複数値 VLookup | 複数シート間 VLookup | ファジーマッチ.... | |
| 高度なドロップダウンリスト:ドロップダウンリストをすばやく作成 | 連動型ドロップダウンリスト | 複数選択可能なドロップダウンリスト.... | |
| 列マネージャー:指定した数の列を追加|列の移動|非表示列の表示/非表示状態を切り替え|範囲および列の比較... | |
| 注目の機能:グリッドフォーカス | デザインビュー |強化された数式バー | ワークブック&シートマネージャー | リソースライブラリ(オートテキスト)| 日付ピッカー | ワークシートの統合 | 暗号化/セルの復号化 | リストからメール送信 | スーパーフィルター | 特殊フィルタ(太字のフォントを持つセルをフィルタリング/斜体/取り消し線…) 。。。 | |
| トップ15 ツールセット:12 テキストツール(テキストの追加、特定の文字を削除、...)| 50+チャートタイプ(ガントチャート、...)| 40+実用的数式(誕生日に基づいて年齢を計算します、...)| 19 挿入ツール(QR コードを挿入、パスから画像を挿入、...)| 12 変換ツール(単語に変換する、為替レートの変換、...)| 7 結合と分割ツール(高度な行のマージ、セルの分割、...)|…他にも多数 |
Kutools for Excel でExcel スキルを強化し、これまでにない効率を体験しましょう。Kutools for Excel は、生産性を飛躍的に高める300 以上の高度な機能を提供し、時間を大幅に節約します。必要な機能を今すぐ入手するにはここをクリック。。。
Office Tab が Office にタブインターフェースを導入し、作業を大幅に簡単にします
- Word、Excel、PowerPoint、Publisher、Access、Visio、Project でタブを使った編集と閲覧を有効にします。
- 新しいウィンドウではなく、同じウィンドウの新しいタブで複数のドキュメントを開いたり作成したりできます。
- 日々の生産性を50% 向上させ、毎日数百回のマウスクリックを削減します!
Kutools アドインすべて。インストーラーは1 つだけ
Kutools for Officeスイートには、Excel ・Word ・Outlook 用のアドインに加え、PowerPoint 対応機能と Office Tab Pro が含まれており、複数の Office アプリケーションを横断して作業するチームに最適です。
- オールインワンスイート— Excel、Word、Outlook、およびPowerPoint のアドイン+Office Tab Pro
- インストーラーもライセンスも1 つだけ— 数分でセットアップ可能(MSI 対応)
- 連携でさらに強力に— Office アプリ全体で生産性を最適化
- 30 日間のフル機能トライアル— 登録不要、クレジットカード不要
- ベストバリュー— 個別アドイン購入よりお得


ボタンをクリックして、B11セルを選択します。このセルは数式が入力されている場所で、目的セルの設定セクション内にあります。
セル範囲を選択するためのB2:B10をクリックし、ドロップダウンリストからbinを選択してください。最後に、OKボタンをクリックします。スクリーンショットをご覧ください:

ソース範囲から使用する数値リストを選択するためのボタンをクリックし、その後、合計テキストボックスに目標となる合計値を入力します。最後に、OKボタンをクリックしてください。スクリーンショットをご覧ください:




