Passer au contenu principal

Comment trouver toutes les combinaisons qui égalent une somme donnée dans Excel?

Auteur : Xiaoyang Dernière modification: 2024-02-29

Découvrir toutes les combinaisons possibles de nombres dans une liste qui totalisent une somme spécifique est un défi que de nombreux utilisateurs d'Excel peuvent rencontrer, que ce soit à des fins de budgétisation, de planification ou d'analyse de données.

Dans cet exemple, nous avons une liste de nombres et l'objectif est d'identifier quelles combinaisons de cette liste totalisent 480. La capture d'écran fournie montre qu'il existe cinq groupes possibles de combinaisons qui atteignent cette somme, y compris des combinaisons comme 300+120. +60, 250+120+60+50, entre autres. Dans cet article, nous explorerons différentes méthodes pour identifier les combinaisons spécifiques de nombres dans une liste qui totalisent une valeur désignée dans Excel.

Trouver une combinaison de nombres égale à une somme donnée avec la fonction Solver

Obtenez toutes les combinaisons de nombres égales à une somme donnée

Obtenez toutes les combinaisons de nombres dont la somme est comprise dans une plage avec le code VBA


Trouver une combinaison de cellules égale à une somme donnée avec la fonction Solver

Plonger dans Excel pour trouver des combinaisons de cellules qui totalisent un nombre spécifique peut sembler intimidant, mais le complément Solver facilite la tâche. Nous vous guiderons à travers les étapes simples pour configurer Solver et trouver la bonne combinaison de cellules, rendant ainsi ce qui semblait être une tâche complexe simple et réalisable.

Étape 1 : Activer le complément Solver

  1. S'il vous plaît aller à Déposez votre dernière attestation > Options, Dans le Options Excel boîte de dialogue, cliquez sur Add-Ins dans le volet de gauche, cliquez ensuite sur Go bouton. Voir la capture d'écran:
  2. Puis le Add-Ins apparaît, vérifiez la Complément Solver option, et cliquez OK pour installer correctement ce complément.

Étape 2: entrez la formule

Après avoir activé le complément Solver, vous devez saisir cette formule dans la cellule B11 :

=SUMPRODUCT(B2:B10,A2:A10)
Notes: Dans cette formule: B2: B10 est une colonne de cellules vides à côté de votre liste de numéros, et A2: A10 est la liste de numéros que vous utilisez.

Étape 3 : Configurez et exécutez Solver pour obtenir le résultat

  1. Cliquez Données > Solver pour aller à la Paramètre du solveur boîte de dialogue, dans la boîte de dialogue, veuillez effectuer les opérations suivantes:
    • (1.) Cliquez sur bouton pour sélectionner la cellule B11 où se trouve votre formule depuis le Fixer un objectif section;
    • (2.) Puis dans le À section, sélectionnez Valeur deet entrez votre valeur cible 480 Comme vous le souhaitez;
    • (3.) Sous le En changeant les cellules variables section, veuillez cliquer bouton pour sélectionner la plage de cellules B2: B10 où marquera vos numéros correspondants.
    • (4.) Ensuite, cliquez sur Ajouter .
  2. Puis, un Ajouter une contrainte La boîte de dialogue s'affiche, cliquez sur bouton pour sélectionner la plage de cellules B2: B10, et sélectionnez coffre dans la liste déroulante. Enfin, cliquez OK bouton. Voir la capture d'écran:
  3. Dans le Paramètre du solveur dialogue, cliquez sur Nous résolvons bouton, quelques minutes plus tard, un Résultats du solveur La boîte de dialogue apparaît et vous pouvez voir la combinaison de cellules qui équivaut à une somme donnée 480 est marquée comme 1 dans la colonne B. Dans la Résultats du solveur boîte de dialogue, veuillez sélectionner Gardez la solution du solveur option, et cliquez OK pour quitter la boîte de dialogue. Voir la capture d'écran:
Notes: Cette méthode présente cependant une limite : elle ne peut identifier qu'une seule combinaison de cellules dont la somme correspond à la somme spécifiée, même s'il existe plusieurs combinaisons valides.

Obtenez toutes les combinaisons de nombres égales à une somme donnée

L'exploration des fonctionnalités plus approfondies d'Excel vous permet de trouver chaque combinaison de nombres correspondant à une somme spécifique, et c'est plus facile que vous ne le pensez. Cette section vous montrera deux méthodes pour trouver toutes les combinaisons de nombres égales à une somme donnée.

Obtenez toutes les combinaisons de nombres égales à une somme donnée avec la fonction définie par l'utilisateur

Pour découvrir toutes les combinaisons possibles de nombres d'un ensemble spécifique qui atteignent collectivement une valeur donnée, la fonction personnalisée décrite ci-dessous constitue un outil efficace.

Étape 1 : Ouvrez l'éditeur de module VBA et copiez le code

  1. Maintenez la touche ALT + F11 clés dans Excel, et il ouvre le Microsoft Visual Basic pour applications fenêtre.
  2. Cliquez insérer > Moduleet collez le code suivant dans la fenêtre Module.
    Code VBA : Obtenez toutes les combinaisons de nombres égales à une somme donnée
    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
    

Étape 2 : Saisissez la formule personnalisée pour obtenir le résultat

Après avoir collé le code, fermez la fenêtre de code pour revenir à la feuille de calcul. Entrez la formule suivante dans une cellule vide pour afficher le résultat, puis appuyez sur Entrer clé pour obtenir toutes les combinaisons. Voir capture d'écran :

=MakeupANumber(A2:A10,B2)
Notes: Dans cette formule: A2: A10 est la liste de numéros, et B2 est la somme totale que vous souhaitez obtenir.

Conseil : Si vous souhaitez lister les résultats de la combinaison verticalement dans une colonne, veuillez appliquer la formule suivante :
=TRANSPOSE(MakeupANumber(A2:A10,B2))
Les limites de cette méthode:
  • Cette fonction personnalisée ne fonctionne que dans Excel 365 et 2021.
  • Cette méthode est efficace exclusivement pour les nombres positifs ; les valeurs décimales sont automatiquement arrondies à l'entier le plus proche et les nombres négatifs entraîneront des erreurs.

Obtenez toutes les combinaisons de nombres égales à une somme donnée avec une fonctionnalité puissante

Compte tenu des limites de la fonction susmentionnée, nous recommandons une solution rapide et complète : la fonctionnalité Make up a Number de Kutools for Excel, qui est compatible avec n'importe quelle version d'Excel. Cette alternative peut gérer efficacement les nombres positifs, les nombres décimaux et les nombres négatifs. Avec cette fonctionnalité, vous pouvez rapidement obtenir toutes les combinaisons égales à une somme donnée.

Pourboires: Appliquer cette Créer un numéro fonctionnalité, tout d’abord, vous devez télécharger Kutools for Excel, puis appliquez la fonction rapidement et facilement.
  1. Cliquez Kutools > Contenu > Créer un numéro, voir capture d'écran:
  2. Ensuite, dans le Composez un numéro boîte de dialogue, veuillez cliquer pour sélectionner la liste de numéros que vous souhaitez utiliser dans le La source de données, puis entrez le nombre total dans le Somme zone de texte. Enfin, cliquez OK bouton, voir capture d'écran:
  3. Et puis, une boîte de dialogue apparaîtra pour vous rappeler de sélectionner une cellule pour localiser le résultat, puis cliquez sur OK, voir capture d'écran:
  4. Et maintenant, toutes les combinaisons égales à ce nombre donné ont été affichées comme ci-dessous :
Notes: Pour appliquer cette fonctionnalité, veuillez télécharger et installer Kutools pour Excel d'abord.

Obtenez toutes les combinaisons de nombres dont la somme est comprise dans une plage avec le code VBA

Parfois, vous pourriez vous retrouver dans une situation où vous devez identifier toutes les combinaisons possibles de nombres qui totalisent collectivement une somme dans une plage spécifique. Par exemple, vous cherchez peut-être à trouver tous les regroupements possibles de nombres dont le total se situe entre 470 et 480.

Découvrir toutes les combinaisons possibles de nombres qui totalisent une valeur dans une plage spécifique représente un défi fascinant et très pratique dans Excel. Cette section présentera un code VBA pour résoudre cette tâche.

Étape 1 : Ouvrez l'éditeur de module VBA et copiez le code

  1. Maintenez la touche ALT + F11 clés dans Excel, et il ouvre le Microsoft Visual Basic pour applications fenêtre.
  2. Cliquez insérer > Moduleet collez le code suivant dans la fenêtre Module.
    Code VBA : obtenez toutes les combinaisons de nombres qui totalisent une plage spécifique
    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
    
    
    

Étape 2 : Exécuter le code

  1. Après avoir collé le code, appuyez sur F5 pour exécuter ce code, dans la première boîte de dialogue qui apparaît, sélectionnez la plage de nombres que vous souhaitez utiliser et cliquez sur OK. Voir la capture d'écran:
  2. Dans la deuxième zone d'invite, sélectionnez ou saisissez le numéro de limite basse, puis cliquez sur OK. Voir la capture d'écran:
  3. Dans la troisième zone d'invite, sélectionnez ou saisissez le nombre de limite supérieure, puis cliquez sur OK. Voir la capture d'écran:
  4. Dans la dernière boîte de dialogue, sélectionnez une cellule de sortie, où les résultats commenceront à être générés. Puis clique OK. Voir la capture d'écran:

Résultat

Désormais, chaque combinaison qualifiante sera répertoriée dans des lignes consécutives dans la feuille de calcul, en commençant par la cellule de sortie que vous avez choisie.

Excel vous propose plusieurs façons de rechercher des groupes de nombres qui totalisent un certain total. Chaque méthode fonctionne différemment. Vous pouvez donc en choisir une en fonction de votre connaissance d'Excel et de ce dont vous avez besoin pour votre projet. Si vous souhaitez découvrir davantage de trucs et astuces Excel, notre site Web propose des milliers de didacticiels, veuillez cliquez ici pour y accéder. Merci d'avoir lu et nous sommes impatients de vous fournir des informations plus utiles à l'avenir !


Articles connexes:

  • Lister ou générer toutes les combinaisons possibles
  • Disons que j'ai les deux colonnes de données suivantes, et maintenant, je veux générer une liste de toutes les combinaisons possibles en fonction des deux listes de valeurs comme illustré à gauche. Peut-être que vous pouvez lister toutes les combinaisons une par une s'il y a peu de valeurs, mais, s'il y a plusieurs colonnes avec plusieurs valeurs nécessaires pour répertorier les combinaisons possibles, voici quelques astuces rapides qui peuvent vous aider à résoudre ce problème dans Excel .
  • Générez toutes les combinaisons de 3 ou plusieurs colonnes
  • En supposant que j'ai 3 colonnes de données, maintenant, je souhaite générer ou répertorier toutes les combinaisons de données dans ces 3 colonnes, comme illustré ci-dessous. Avez-vous de bonnes méthodes pour résoudre cette tâche dans Excel?
  • Générer une liste de toutes les combinaisons possibles à 4 chiffres
  • Dans certains cas, nous pouvons avoir besoin de générer une liste de toutes les combinaisons possibles de 4 chiffres de 0 à 9, ce qui signifie générer une liste de 0000, 0001, 0002… 9999. Pour résoudre rapidement la tâche de liste dans Excel, je vous présente quelques astuces.
Comments (51)
No ratings yet. Be the first to rate!
This comment was minimized by the moderator on the site
hola esta muy interesante la demostración del código para excel, pero si deseo que me combine números, con cierta cantidad de números por combinación, por ejemplo 4 números por combinación, y solo me arroje eso, para optimizar la memoria del procesador:
1,2,3,4
2,3,4,5
5,2,6,8

en este caso como sería el código
This comment was minimized by the moderator on the site
Hola muy interesante la explicación, me sirvió bastante, pero deseo consultar como serpia el código si deseo que me de las combinaciones de 6 dígitos, o 5 digitos, según corresponda
This comment was minimized by the moderator on the site
Hi everyone,

I'm trying to find a way to to find all possible combinations of workershifts for a specific amount of workhours within a specific amount of working days.

Both, solver and Kutools basically work, but:

Solver only ever displays one combination not all of them (which is what I would need).

Kutools on the other hand only uses each value once, for example I know there are solutions with say 3 7-hour shifts but it won't pick the shift more than once.

Thanks in advance for any responses!

Hope I'm not threadnecroing too hard here.
This comment was minimized by the moderator on the site
Hello, simsok,
Sorry, I can't understand you clearly.
Could you give your problem more detailed, or can you insert a screenshot of your problem here?
Thank you!
This comment was minimized by the moderator on the site
Thank you so much!!! The solver add-in worked for me!
This comment was minimized by the moderator on the site
How to get list of cell names that add to a given no.
This comment was minimized by the moderator on the site
Hello, Ranka,
I'm sorry, at present, there is no good way for getting the cells that add to a given number.
Thank you!
This comment was minimized by the moderator on the site
ExtendOffice - How To Find All Combinations That Equal A Given Sum In Excel

In this example, I would like to run 100 rows instead of the 8 in your example. When I try to create more rows the formula stops working. I started over with a fresh sheet and I still can not get the formula to work.

Running windows 10
Excel 2207
Office 365
This comment was minimized by the moderator on the site
Hello, Shaw

Unfortunately, the formula in this article has a limit of 20 values, if there are more than 20 numbers, the result will not come out. In this case, I will recommend the Make Up A Number feature of Kutools for Excel, with it, you can find all combinations from the list of numbers. If you have a lot of numbers and many combination results, it will take much time, but you can set the number of combinations to make it faster. See screenshot:
https://www.extendoffice.com/images/stories/comments/comment-skyyang/doc-make-up-number-1.png

You can download this tool from here: https://www.extendoffice.com/download/kutools-for-excel.html
You can try it for free 30 days, please have a try, hope it can help you!
This comment was minimized by the moderator on the site
Hi I have tried doing this with the first method and it just isn't working. I'm unsure what I'm doing wrong as I seem to have followed the instructions exactly. Are there any common errors to watch out for? There is no error showing in the formula itself and all cells are all in the same position as yours are, but it's a list of 48 numbers rather than 8.
This comment was minimized by the moderator on the site
Hello, Angie
If you can't get the result by using the first method, you can view the video at the bottom of this article:
https://www.extendoffice.com/documents/excel/3557-excel-find-all-combinations-that-equal-given-sum.html#demo
Also, you can try our tool-Kutools for Excel's Make up a number feature, it will get all combinations quickly and easily.
Thank you!
This comment was minimized by the moderator on the site
So will any of these work when I have been paid by a client, but with no remit so don’t know which invoices have been paid.
This comment was minimized by the moderator on the site
For the solver add in on excel, can you make it solve for closest to 480 rather than value of 480 (example used above)? I really need some help on how this might work out, thanks in advance

This comment was minimized by the moderator on the site
Could this be adapted to find combinations that sum up to specific range i.e. sum between 450 and 500? Is there a way to set it so that each cell value can be used only in one combination not more?
There are no comments posted here yet
Load More
Please leave your comments in English
Posting as Guest
×
Rate this post:
0   Characters
Suggested Locations