Hoppa till huvudinnehåll

Hur hittar jag alla kombinationer som motsvarar en viss summa i Excel?

Att upptäcka alla möjliga kombinationer av siffror inom en lista som summerar till en specifik summa är en utmaning som många Excel-användare kan stöta på, oavsett om det gäller budgetering, planering eller dataanalys.

I det här exemplet har vi en lista med siffror och målet är att identifiera vilka kombinationer från denna lista som summerar till 480. Skärmdumpen visar att det finns fem möjliga grupper av kombinationer som uppnår denna summa, inklusive kombinationer som 300+120 +60, 250+120+60+50, bland annat. I den här artikeln kommer vi att utforska olika metoder för att lokalisera de specifika kombinationerna av siffror i en lista som sammanlagt ett angivet värde i Excel.

Hitta en kombination av tal lika med en given summa med Solver-funktionen

Få alla kombinationer av tal lika med en given summa

Få alla kombinationer av tal som har en summa i ett intervall med VBA-kod


Hitta cellkombinationer som är lika med en given summa med Solver-funktionen

Att dyka in i Excel för att hitta cellkombinationer som summerar till ett visst antal kan verka skrämmande, men Solver-tillägget gör det enkelt. Vi leder dig genom de enkla stegen för att ställa in Solver och hitta rätt kombination av celler, vilket gör vad som verkade vara en komplex uppgift enkel och genomförbar.

Steg 1: Aktivera tillägget Solver

  1. Vänligen gå till Fil > TillbehörI Excel-alternativ dialogrutan, klicka Tillägg från den vänstra rutan, klicka sedan Go knapp. Se skärmdump:
  2. Sedan Tillägg dialogrutan visas, kontrollera Solver-tillägg alternativet och klicka på OK för att installera detta tillägg framgångsrikt.

Steg 2: Ange formeln

Efter att ha aktiverat Solver-tillägget måste du ange denna formel i cellen B11:

=SUMPRODUCT(B2:B10,A2:A10)
Anmärkningar: I denna formel: B2: B10 är en kolumn med tomma celler bredvid din nummerlista, och A2: A10 är nummerlistan som du använder.

Steg 3: Konfigurera och kör Solver för att få resultatet

  1. Klicka Data > Lösare för att gå till Lösningsparameter dialogrutan, gör följande i dialogrutan:
    • (1.) Klicka på för att välja cellen B11 var din formel finns från Ställ in mål sektion;
    • (2.) Sedan i Till avsnitt, välj Värdet avoch ange ditt målvärde 480 som du behöver;
    • (3.) Under Genom att ändra variabla celler avsnitt, klicka för att välja cellintervall B2: B10 där markerar dina motsvarande nummer.
    • (4.) Klicka sedan på Lägg till knapp.
  2. Sedan, en Lägg till begränsning dialogrutan visas, klicka för att välja cellintervall B2: B10, och välj bin från rullgardinsmenyn. Äntligen, klicka OK knapp. Se skärmdump:
  3. I Lösningsparameter dialogrutan, klicka på Lös knappen, några minuter senare, a Lösningsresultat dialogrutan dyker upp och du kan se kombinationen av celler som motsvarar en given summa 480 är markerade som 1 i kolumn B. I Lösningsresultat välj Behåll lösningsmedelslösningen alternativet och klicka på OK för att avsluta dialogen. Se skärmdump:
Anmärkningar: Den här metoden har dock en begränsning: den kan bara identifiera en kombination av celler som summerar till den angivna summan, även om det finns flera giltiga kombinationer.

Få alla kombinationer av tal lika med en given summa

Genom att utforska Excels djupare möjligheter kan du hitta varje sifferkombination som matchar en specifik summa, och det är enklare än du kanske tror. Det här avsnittet kommer att visa dig två metoder för att hitta alla kombinationer av tal som är lika med en given summa.

Få alla kombinationer av tal lika med en given summa med användardefinierad funktion

För att avslöja alla möjliga kombinationer av siffror från en specifik uppsättning som tillsammans når ett givet värde, fungerar den anpassade funktionen som beskrivs nedan som ett effektivt verktyg.

Steg 1: Öppna VBA-modulredigeraren och kopiera koden

  1. Håll ner ALT + F11 nycklar i Excel, och det öppnar Microsoft Visual Basic för applikationer fönster.
  2. Klicka Insert > Modulernaoch klistra in följande kod i modulfönstret.
    VBA-kod: Få alla kombinationer av tal lika med en given summa
    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
    

Steg 2: Ange den anpassade formeln för att få resultatet

När du har klistrat in koden, stäng kodfönstret för att gå tillbaka till kalkylbladet. Skriv in följande formel i en tom cell för att mata ut resultatet och tryck sedan på ange för att få alla kombinationer. Se skärmdump:

=MakeupANumber(A2:A10,B2)
Anmärkningar: I denna formel: A2: A10 är nummerlistan, och B2 är den totala summan du vill få.

Tips: Om du vill lista kombinationsresultaten vertikalt i en kolumn, använd följande formel:
=TRANSPOSE(MakeupANumber(A2:A10,B2))
Begränsningarna för denna metod:
  • Denna anpassade funktion fungerar bara i Excel 365 och 2021.
  • Denna metod är endast effektiv för positiva tal; decimala värden avrundas automatiskt till närmaste heltal, och negativa tal kommer att resultera i fel.

Få alla kombinationer av tal lika med en given summa med en kraftfull funktion

Med tanke på begränsningarna för den ovannämnda funktionen rekommenderar vi en snabb och omfattande lösning: Kutools for Excels Make up a Number-funktion, som är kompatibel med alla versioner av Excel. Detta alternativ kan effektivt hantera positiva tal, decimaler och negativa tal. Med den här funktionen kan du snabbt få alla kombinationer som är lika med en given summa.

tips: Att tillämpa detta Gör upp ett nummer funktionen, först bör du ladda ner Kutools för Excel, och använd sedan funktionen snabbt och enkelt.
  1. Klicka Kutools > Innehåll > Gör upp ett nummer, se skärmdump:
  2. Då, i Gör upp ett nummer Klicka i dialogrutan för att välja den nummerlista som du vill använda från Datakällaoch ange sedan det totala antalet i Sum textruta. Klicka slutligen OK knapp, se skärmdump:
  3. Och sedan kommer en uppmaningsruta att dyka upp för att påminna dig om att välja en cell för att hitta resultatet, klicka sedan på OK, se skärmdump:
  4. Och nu har alla kombinationer som är lika med det givna numret visats som nedanstående skärmdump:
Anmärkningar: För att använda den här funktionen, vänligen ladda ner och installera Kutools för Excel först.

Få alla kombinationer av tal som har en summa i ett intervall med VBA-kod

Ibland kan du hamna i en situation där du behöver identifiera alla möjliga kombinationer av tal som tillsammans summerar till en summa inom ett specifikt intervall. Du kanske till exempel försöker hitta alla möjliga grupper av siffror där summan ligger mellan 470 och 480.

Att upptäcka alla möjliga kombinationer av siffror som summerar till ett värde inom ett specifikt område är en fascinerande och mycket praktisk utmaning i Excel. Det här avsnittet kommer att introducera en VBA-kod för att lösa denna uppgift.

Steg 1: Öppna VBA-modulredigeraren och kopiera koden

  1. Håll ner ALT + F11 nycklar i Excel, och det öppnar Microsoft Visual Basic för applikationer fönster.
  2. Klicka Insert > Modulernaoch klistra in följande kod i modulfönstret.
    VBA-kod: Få alla kombinationer av tal som summerar till ett specifikt intervall
    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
    
    
    

Steg 2: Kör koden

  1. När du har klistrat in koden trycker du på F5 för att köra den här koden, i den första öppnade dialogrutan, välj det antal nummer du vill använda och klicka OK. Se skärmdump:
  2. I den andra uppmaningsrutan, välj eller skriv det låga gränsvärdet och klicka OK. Se skärmdump:
  3. I den tredje uppmaningsrutan, välj eller skriv det högsta gränsnumret och klicka OK. Se skärmdump:
  4. I den sista uppmaningsrutan väljer du en utdatacell, det är där resultaten kommer att börja matas ut. Klicka sedan OK. Se skärmdump:

Resultat

Nu kommer varje kvalificerande kombination att listas i på varandra följande rader i kalkylbladet, med början från den utdatacell du valde.

Excel ger dig flera sätt att hitta grupper av siffror som summerar till en viss summa, varje metod fungerar olika, så du kan välja ett baserat på hur bekant du är med Excel och vad du behöver för ditt projekt. Om du är intresserad av att utforska fler Excel-tips och tricks, erbjuder vår webbplats tusentals handledningar, vänligen klicka här för att komma åt dem. Tack för att du läser, och vi ser fram emot att ge dig mer användbar information i framtiden!


Relaterade artiklar:

  • Lista eller generera alla möjliga kombinationer
  • Låt oss säga, jag har följande två datakolumner, och nu vill jag skapa en lista över alla möjliga kombinationer baserat på de två värdelistorna som vänster skärmdump visas. Kanske kan du lista alla kombinationer en efter en om det finns få värden, men om det finns flera kolumner med flera värden som behövs för att lista de möjliga kombinationerna, här är några snabba tricks som kan hjälpa dig att hantera detta problem i Excel .
  • Skapa en lista över alla möjliga 4-siffriga kombinationer
  • I vissa fall kan vi behöva generera en lista över alla möjliga fyra siffror kombinationer av nummer 4 till 0, vilket innebär att generera en lista med 9, 0000, 0001… 0002. För att snabbt lösa listuppgiften i Excel introducerar jag några knep för dig.
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