Przejdź do głównej zawartości

Jak znaleźć wszystkie kombinacje równe danej sumie w Excelu?

Odkrywanie wszystkich możliwych kombinacji liczb na liście, które dają określoną sumę, jest wyzwaniem, przed którym może stanąć wielu użytkowników Excela, czy to w celach związanych z budżetowaniem, planowaniem, czy analizą danych.

W tym przykładzie mamy listę liczb, a celem jest określenie, które kombinacje z tej listy sumują się do 480. Dostarczony zrzut ekranu pokazuje, że istnieje pięć możliwych grup kombinacji, które osiągają tę sumę, w tym kombinacje takie jak 300+120 +60, 250+120+60+50 m.in. W tym artykule przyjrzymy się różnym metodom określania konkretnych kombinacji liczb na liście, których suma oznacza wyznaczoną wartość w programie Excel.

Znajdź kombinację liczb równą podanej sumie za pomocą funkcji Solver

Znajdź wszystkie kombinacje liczb równe danej sumie

Uzyskaj wszystkie kombinacje liczb, których suma mieści się w zakresie, za pomocą kodu VBA


Znajdź kombinację komórek równą podanej sumie za pomocą funkcji Solver

Zagłębianie się w program Excel w celu znalezienia kombinacji komórek dających sumę określonej liczby może wydawać się trudne, ale dodatek Solver sprawia, że ​​jest to dziecinnie proste. Przeprowadzimy Cię przez proste kroki umożliwiające skonfigurowanie Solvera i znalezienie właściwej kombinacji komórek, dzięki czemu to, co wydawało się złożone, stanie się proste i wykonalne.

Krok 1: Włącz dodatek Solver

  1. Proszę przejść do filet > Opcje, W Opcje programu Excel okno dialogowe, kliknij Dodatki w lewym okienku, a następnie kliknij Go przycisk. Zobacz zrzut ekranu:
  2. A później Dodatki pojawi się okno dialogowe, sprawdź Dodatek Solver opcję i kliknij OK aby pomyślnie zainstalować ten dodatek.

Krok 2: Wprowadź formułę

Po aktywowaniu dodatku Solver należy w komórkę B11 wpisać następującą formułę:

=SUMPRODUCT(B2:B10,A2:A10)
Note: W tym wzorze: B2: B10 to kolumna pustych komórek obok listy numerów, oraz A2: A10 to lista numerów, której używasz.

Krok 3: Skonfiguruj i uruchom Solver, aby uzyskać wynik

  1. Kliknij Dane > Solver , aby przejść do Parametr dodatku Solver w oknie dialogowym, w oknie dialogowym wykonaj następujące czynności:
    • (1.) Kliknij aby wybrać komórkę B11 skąd znajduje się Twoja formuła Ustaw cel Sekcja;
    • (2.) Następnie w Do sekcja, wybierz Wartośći wprowadź wartość docelową 480 tak jak potrzebujesz;
    • (3.) Pod Zmieniając zmienne komórki kliknij aby wybrać zakres komórek B2: B10 gdzie zaznaczy odpowiednie numery.
    • (4.) Następnie kliknij Dodaj przycisk.
  2. Następnie plik Dodaj wiązanie wyświetli się okno dialogowe, kliknij aby wybrać zakres komórek B2: B10i wybierz kosz z rozwijanej listy. Wreszcie kliknij OK przycisk. Zobacz zrzut ekranu:
  3. W Parametr dodatku Solver dialog, kliknij przycisk Rozwiązać przycisk, kilka minut później, a Wyniki rozwiązania Solver wyskakuje okno dialogowe i możesz zobaczyć kombinację komórek, które równają się danej sumie 480 i są oznaczone jako 1 w kolumnie B. W Wyniki rozwiązania Solver wybierz Zachowaj rozwiązanie Solver opcję i kliknij OK aby zamknąć okno dialogowe. Zobacz zrzut ekranu:
Note: Ta metoda ma jednak ograniczenie: może zidentyfikować tylko jedną kombinację komórek, które sumują się do określonej sumy, nawet jeśli istnieje wiele prawidłowych kombinacji.

Znajdź wszystkie kombinacje liczb równe danej sumie

Poznawanie głębszych możliwości programu Excel pozwala znaleźć każdą kombinację liczb odpowiadającą określonej sumie i jest to łatwiejsze, niż mogłoby się wydawać. W tej sekcji zostaną przedstawione dwie metody znajdowania wszystkich kombinacji liczb równych danej sumie.

Uzyskaj wszystkie kombinacje liczb równe danej sumie za pomocą funkcji zdefiniowanej przez użytkownika

Aby odkryć każdą możliwą kombinację liczb z określonego zestawu, które łącznie osiągają określoną wartość, skutecznym narzędziem jest opisana poniżej funkcja niestandardowa.

Krok 1: Otwórz edytor modułów VBA i skopiuj kod

  1. Przytrzymaj przycisk ALT + F11 klucze w programie Excel i otwiera plik Microsoft Visual Basic for Applications okno.
  2. Kliknij wstawka > Modułi wklej następujący kod w oknie modułu.
    Kod VBA: Uzyskaj wszystkie kombinacje liczb równe podanej sumie
    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
    

Krok 2: Wprowadź niestandardową formułę, aby uzyskać wynik

Po wklejeniu kodu zamknij okno kodu, aby wrócić do arkusza. Wprowadź następującą formułę w pustej komórce, aby wyświetlić wynik, a następnie naciśnij Wchodzę klawisz, aby uzyskać wszystkie kombinacje. Zobacz zrzut ekranu:

=MakeupANumber(A2:A10,B2)
Note: W tym wzorze: A2: A10 to lista numerów, oraz B2 to całkowita suma, którą chcesz otrzymać.

Wskazówka: Jeśli chcesz wyświetlić wyniki kombinacji pionowo w kolumnie, zastosuj następującą formułę:
=TRANSPOSE(MakeupANumber(A2:A10,B2))
Ograniczenia tej metody:
  • Ta funkcja niestandardowa działa tylko w programach Excel 365 i 2021.
  • Ta metoda jest skuteczna wyłącznie w przypadku liczb dodatnich; wartości dziesiętne są automatycznie zaokrąglane do najbliższej liczby całkowitej, a liczby ujemne spowodują błędy.

Uzyskaj wszystkie kombinacje liczb równe danej sumie za pomocą potężnej funkcji

Biorąc pod uwagę ograniczenia wyżej wymienionej funkcji, zalecamy szybkie i kompleksowe rozwiązanie: Kutools dla programu Excel's Make up a Number funkcja, która jest kompatybilna z dowolną wersją programu Excel. Ta alternatywa może skutecznie obsługiwać liczby dodatnie, dziesiętne i liczby ujemne. Dzięki tej funkcji możesz szybko uzyskać wszystkie kombinacje równe danej sumie.

Tips: Aby to zastosować Uzupełnij liczbę funkcję, po pierwsze należy ją pobrać Kutools dla programu Excel, a następnie szybko i łatwo zastosuj tę funkcję.
  1. Kliknij Kutools > Treść > Uzupełnij liczbęzobacz zrzut ekranu:
  2. Następnie w Wymyśl liczbę kliknij , aby wybrać listę numerów, której chcesz użyć Źródło danych, a następnie wprowadź całkowitą liczbę do pliku Suma pole tekstowe. Na koniec kliknij OK przycisk, zobacz zrzut ekranu:
  3. Następnie pojawi się okno z przypomnieniem o wybraniu komórki w celu zlokalizowania wyniku, a następnie kliknij OKzobacz zrzut ekranu:
  4. A teraz wszystkie kombinacje równe podanej liczbie zostały wyświetlone, jak pokazano na zrzucie ekranu poniżej:
Note: Aby zastosować tę funkcję, proszę pobierz i zainstaluj Kutools dla Excela pierwszy.

Uzyskaj wszystkie kombinacje liczb, których suma mieści się w zakresie, za pomocą kodu VBA

Czasami możesz znaleźć się w sytuacji, w której musisz zidentyfikować wszystkie możliwe kombinacje liczb, które łącznie dają sumę mieszczącą się w określonym zakresie. Na przykład możesz chcieć znaleźć każdą możliwą grupę liczb, których suma mieści się w przedziale od 470 do 480.

Odkrywanie wszystkich możliwych kombinacji liczb, które sumują się do wartości w określonym zakresie, stanowi fascynujące i wysoce praktyczne wyzwanie w programie Excel. W tej sekcji zostanie przedstawiony kod VBA umożliwiający rozwiązanie tego zadania.

Krok 1: Otwórz edytor modułów VBA i skopiuj kod

  1. Przytrzymaj przycisk ALT + F11 klucze w programie Excel i otwiera plik Microsoft Visual Basic for Applications okno.
  2. Kliknij wstawka > Modułi wklej następujący kod w oknie modułu.
    Kod VBA: Uzyskaj wszystkie kombinacje liczb, które sumują się do określonego zakresu
    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
    
    
    

Krok 2: Wykonaj kod

  1. Po wklejeniu kodu naciśnij F5 Aby uruchomić ten kod, w pierwszym wyskakującym oknie dialogowym wybierz zakres liczb, którego chcesz użyć, i kliknij OK. Zobacz zrzut ekranu:
  2. W drugim polu zachęty wybierz lub wpisz dolny limit i kliknij OK. Zobacz zrzut ekranu:
  3. W trzecim polu zachęty wybierz lub wpisz górny limit i kliknij OK. Zobacz zrzut ekranu:
  4. W ostatnim polu zachęty wybierz komórkę wyjściową, w której zaczną się wyświetlać wyniki. Następnie kliknij OK. Zobacz zrzut ekranu:

Wynik

Teraz każda kwalifikująca kombinacja zostanie wyświetlona w kolejnych wierszach arkusza, zaczynając od wybranej komórki wyjściowej.

Excel udostępnia kilka sposobów wyszukiwania grup liczb, których suma daje określoną sumę. Każda metoda działa inaczej, więc możesz wybrać jedną na podstawie znajomości programu Excel i potrzeb w swoim projekcie. Jeśli chcesz poznać więcej porad i wskazówek dotyczących Excela, nasza witryna internetowa oferuje tysiące samouczków kliknij tutaj, aby uzyskać do nich dostęp. Dziękujemy za przeczytanie i mamy nadzieję, że w przyszłości przekażemy Ci więcej przydatnych informacji!


Podobne artykuły:

  • Wypisz lub wygeneruj wszystkie możliwe kombinacje
  • Powiedzmy, że mam następujące dwie kolumny danych, a teraz chcę wygenerować listę wszystkich możliwych kombinacji na podstawie dwóch list wartości, jak pokazano na lewym zrzucie ekranu. Być może możesz wymienić wszystkie kombinacje jeden po drugim, jeśli jest kilka wartości, ale jeśli istnieje kilka kolumn z wieloma wartościami, które należy wymienić, możliwe kombinacje, oto kilka szybkich sztuczek, które mogą pomóc w rozwiązaniu tego problemu w programie Excel .
  • Wypisz wszystkie możliwe kombinacje z jednej kolumny
  • Jeśli chcesz zwrócić wszystkie możliwe kombinacje z danych w pojedynczej kolumnie, aby uzyskać wynik, jak pokazano na poniższym zrzucie ekranu, czy masz jakieś szybkie sposoby radzenia sobie z tym zadaniem w programie Excel?
  • Wygeneruj wszystkie kombinacje 3 lub wielu kolumn
  • Przypuśćmy, że mam 3 kolumny danych, teraz chcę wygenerować lub wyświetlić wszystkie kombinacje danych w tych 3 kolumnach, jak pokazano poniżej. Czy masz jakieś dobre metody rozwiązania tego zadania w programie Excel?
  • Wygeneruj listę wszystkich możliwych kombinacji 4 cyfr
  • W niektórych przypadkach może zajść potrzeba wygenerowania listy wszystkich możliwych kombinacji 4 cyfr od 0 do 9, co oznacza wygenerowanie listy 0000, 0001, 0002… 9999. Aby szybko rozwiązać zadanie listy w Excelu, przedstawiam kilka sztuczek.
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