Ana içeriğe atla

Excel'de belirli bir toplama eşit olan tüm kombinasyonları nasıl bulabilirim?

Belirli bir toplamı oluşturan bir listedeki tüm olası sayı kombinasyonlarını keşfetmek, bütçeleme, planlama veya veri analizi amacıyla birçok Excel kullanıcısının karşılaşabileceği bir zorluktur.

Bu örnekte, bir sayılar listemiz var ve amaç, bu listedeki hangi kombinasyonların toplamının 480'e ulaştığını belirlemektir. Sağlanan ekran görüntüsü, 300+120 gibi kombinasyonlar da dahil olmak üzere, bu toplamı elde eden beş olası kombinasyon grubunun olduğunu göstermektedir. +60, 250+120+60+50 ve diğerleri. Bu makalede, Excel'de belirlenmiş bir değeri toplayan bir listedeki belirli sayı kombinasyonlarını belirlemek için çeşitli yöntemleri inceleyeceğiz.

Çözücü işleviyle belirli bir toplama eşit sayıların birleşimini bulun

Belirli bir toplama eşit olan tüm sayı kombinasyonlarını alın

VBA koduyla bir aralıkta toplamı olan tüm sayı kombinasyonlarını alın


Çözücü işleviyle belirli bir toplama eşit olan hücre kombinasyonunu bulun

Belirli bir sayıya karşılık gelen hücre birleşimlerini bulmak için Excel'e dalmak göz korkutucu görünebilir, ancak Çözücü Eklentisi bunu kolaylaştırır. Solver'ı kurmanız ve doğru hücre kombinasyonunu bulmanız için size basit adımlarda yol göstereceğiz, böylece karmaşık gibi görünen bir görevi basit ve yapılabilir hale getireceğiz.

1. Adım: Çözücü Eklentisini Etkinleştirin

  1. Lütfen şu adrese git fileto > Opsiyonlar, In Excel Seçenekleri iletişim kutusunu tıklayın Eklentiler sol bölmeden, ardından Go buton. Ekran görüntüsüne bakın:
  2. Ardından, Eklentiler iletişim kutusu görüntülenir, kontrol edin Çözücü Eklentisi seçeneğini işaretleyin ve tıklayın. OK bu eklentiyi başarıyla yüklemek için.

2. Adım: Formülü girin

Çözücü eklentisini etkinleştirdikten sonra bu formülü B11 hücresine girmeniz gerekir:

=SUMPRODUCT(B2:B10,A2:A10)
not: Bu formülde: B2: B10 numara listenizin yanında boş hücrelerden oluşan bir sütundur ve A2: A10 kullandığınız numara listesidir.

3. Adım: Sonucu almak için Çözücüyü yapılandırın ve çalıştırın

  1. Tıkla Veri > Çözücü gitmek için Çözücü Parametresi iletişim kutusunda, iletişim kutusunda lütfen aşağıdaki işlemleri yapın:
    • (1.) Tıklayın hücreyi seçmek için düğme B11 formülünüzün bulunduğu yer Hedef Belirleyin Bölüm;
    • (2.) Sonra için bölümünde, seçin Değerive hedef değerinizi girin 480 gerek duyduğunuz kadar;
    • (3.) Altında Değişken Hücreleri Değiştirerek bölümü, lütfen tıklayın hücre aralığını seçmek için düğme B2: B10 Karşılık gelen numaralarınızı nerede işaretleyeceksiniz.
    • (4.) Ardından, Ekle düğmesine basın.
  2. Sonra bir Kısıtlama Ekle iletişim kutusu görüntülenir, tıklayın hücre aralığını seçmek için düğme B2: B10Seçin ve çöp kutusu açılır listeden. Sonunda tıklayın OK buton. Ekran görüntüsüne bakın:
  3. içinde Çözücü Parametresi iletişim kutusunda Çözmek düğmesi, birkaç dakika sonra bir Çözücü Sonuçları iletişim kutusu açılır ve belirli bir toplam 480'e eşit olan hücre kombinasyonunun B sütununda 1 olarak işaretlendiğini görebilirsiniz. Çözücü Sonuçları iletişim kutusu, lütfen seçin Çözücü Çözümü Tutun seçeneğini işaretleyin ve tıklayın. OK iletişim kutusundan çıkmak için. Ekran görüntüsüne bakın:
not: Ancak bu yöntemin bir sınırlaması vardır: birden fazla geçerli kombinasyon mevcut olsa bile, toplamı belirtilen toplamı sağlayan yalnızca bir hücre kombinasyonunu tanımlayabilir.

Belirli bir toplama eşit olan tüm sayı kombinasyonlarını alın

Excel'in daha derin yeteneklerini keşfetmek, belirli bir toplamla eşleşen her sayı kombinasyonunu bulmanızı sağlar ve bu, düşündüğünüzden daha kolaydır. Bu bölüm size belirli bir toplama eşit olan tüm sayı kombinasyonlarını bulmanın iki yöntemini gösterecektir.

Kullanıcı Tanımlı İşlev ile belirli bir toplama eşit olan tüm sayı kombinasyonlarını alın

Belirli bir kümedeki toplu olarak belirli bir değere ulaşan tüm olası sayı kombinasyonlarını ortaya çıkarmak için aşağıda özetlenen özel işlev etkili bir araç görevi görür.

Adım 1: VBA modül düzenleyicisini açın ve kodu kopyalayın

  1. basılı tutun ALT + F11 Excel'de anahtarlar ve açılır Uygulamalar için Microsoft Visual Basic pencere.
  2. Tıkla Ekle > modülve aşağıdaki kodu Modül Penceresine yapıştırın.
    VBA kodu: Belirli bir toplama eşit olan tüm sayı kombinasyonlarını alın
    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
    

Adım 2: Sonucu almak için özel formülü girin

Kodu yapıştırdıktan sonra çalışma sayfasına geri dönmek için kod penceresini kapatın. Sonucun çıktısını almak için aşağıdaki formülü boş bir hücreye girin ve ardından tuşuna basın. Keşfet Tüm kombinasyonları elde etmek için tuşuna basın. Ekran görüntüsüne bakın:

=MakeupANumber(A2:A10,B2)
not: Bu formülde: A2: A10 numara listesidir ve B2 almak istediğiniz toplam tutardır.

Bahşiş: Kombinasyon sonuçlarını dikey olarak bir sütunda listelemek istiyorsanız lütfen aşağıdaki formülü uygulayın:
=TRANSPOSE(MakeupANumber(A2:A10,B2))
Bu yöntemin sınırlamaları:
  • Bu özel işlev yalnızca Excel 365 ve 2021'de çalışır.
  • Bu yöntem yalnızca pozitif sayılar için etkilidir; ondalık değerler otomatik olarak en yakın tam sayıya yuvarlanır ve negatif sayılar hatalara neden olur.

Güçlü bir özellik ile belirli bir toplama eşit olan tüm sayı kombinasyonlarını elde edin

Yukarıda belirtilen işlevin sınırlamaları göz önüne alındığında, hızlı ve kapsamlı bir çözüm öneriyoruz: Kutools for Excel'in Make a Number özelliği, Excel'in herhangi bir sürümüyle uyumludur. Bu alternatif, pozitif sayıları, ondalık sayıları ve negatif sayıları etkili bir şekilde işleyebilir. Bu özellik sayesinde, belirli bir toplama eşit olan tüm kombinasyonları hızlı bir şekilde elde edebilirsiniz.

İpuçları: Bunu uygulamak için Bir Numara Oluşturun özelliği, öncelikle indirmeniz gerekir Kutools for Excelve ardından özelliği hızlı ve kolay bir şekilde uygulayın.
  1. Tıkla Kutools > içerik > Bir Numara Oluşturun, ekran görüntüsüne bakın:
  2. Sonra, içinde Bir numara uydur iletişim kutusu, lütfen tıklayın kullanmak istediğiniz numara listesini seçmek için Veri kaynağıve ardından toplam sayıyı Toplam Metin kutusu. Son olarak, tıklayın OK düğmesi, ekran görüntüsüne bakın:
  3. Ardından, sonucu bulmak için bir hücre seçmenizi hatırlatan bir bilgi istemi kutusu açılır ve ardından OK, ekran görüntüsüne bakın:
  4. Ve şimdi, verilen sayıya eşit olan tüm kombinasyonlar aşağıdaki ekran görüntüsünde gösterildiği gibi görüntülendi:
not: Bu özelliği uygulamak için lütfen Kutools for Excel'i indirip yükleyin İlk.

VBA koduyla bir aralıkta toplamı olan tüm sayı kombinasyonlarını alın

Bazen kendinizi, toplu olarak belirli bir aralıktaki toplamı oluşturan tüm olası sayı kombinasyonlarını tanımlamanız gereken bir durumda bulabilirsiniz. Örneğin, toplamın 470 ile 480 arasında olduğu tüm olası sayı gruplarını bulmaya çalışıyor olabilirsiniz.

Belirli bir aralıktaki bir değeri toplayan tüm olası sayı kombinasyonlarını keşfetmek, Excel'de büyüleyici ve son derece pratik bir mücadeleyi temsil eder. Bu bölümde bu görevi çözmek için bir VBA kodu tanıtılacaktır.

Adım 1: VBA modül düzenleyicisini açın ve kodu kopyalayın

  1. basılı tutun ALT + F11 Excel'de anahtarlar ve açılır Uygulamalar için Microsoft Visual Basic pencere.
  2. Tıkla Ekle > modülve aşağıdaki kodu Modül Penceresine yapıştırın.
    VBA kodu: Belirli bir aralığa karşılık gelen tüm sayı kombinasyonlarını alın
    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
    
    
    

Adım 2: Kodu yürütün

  1. Kodu yapıştırdıktan sonra F5 Bu kodu çalıştırmak için tuşuna basın, açılan ilk iletişim kutusunda kullanmak istediğiniz sayı aralığını seçin ve OK. Ekran görüntüsüne bakın:
  2. İkinci bilgi istemi kutusunda alt limit numarasını seçin veya yazın ve tıklayın. OK. Ekran görüntüsüne bakın:
  3. Üçüncü bilgi istemi kutusunda üst limit numarasını seçin veya yazın ve tıklayın. OK. Ekran görüntüsüne bakın:
  4. Son bilgi kutusunda, sonuçların çıktısının alınacağı yer olan bir çıktı hücresi seçin. Sonra tıklayın OK. Ekran görüntüsüne bakın:

Sonuç

Artık her uygun kombinasyon, seçtiğiniz çıktı hücresinden başlayarak çalışma sayfasında ardışık satırlarda listelenecektir.

Excel, toplamı belirli bir toplamı oluşturan sayı gruplarını bulmanız için size birkaç yol sunar; her yöntem farklı çalışır; böylece Excel'e ne kadar aşina olduğunuza ve projeniz için neye ihtiyacınız olduğuna bağlı olarak birini seçebilirsiniz. Daha fazla Excel ipucu ve püf noktası keşfetmek istiyorsanız web sitemiz binlerce eğitim sunmaktadır, lütfen bunlara erişmek için burayı tıklayın. Okuduğunuz için teşekkür ederiz ve gelecekte size daha yararlı bilgiler sunmayı sabırsızlıkla bekliyoruz!


İlgili Makaleler:

  • Tüm olası kombinasyonları listeleyin veya oluşturun
  • Diyelim ki, aşağıdaki iki veri sütununa sahibim ve şimdi, gösterilen sol ekran görüntüsü gibi iki değer listesine dayalı olarak tüm olası kombinasyonların bir listesini oluşturmak istiyorum. Belki, az sayıda değer varsa tüm kombinasyonları tek tek listeleyebilirsiniz, ancak olası kombinasyonların listelenmesi gereken birden çok değer içeren birkaç sütun varsa, işte bazı hızlı püf noktaları Excel'de bu sorunu çözmenize yardımcı olabilir. .
  • Tüm olası 4 basamaklı kombinasyonların bir listesini oluşturun
  • Bazı durumlarda, 4 ile 0 arasındaki tüm olası 9 basamaklı kombinasyonların bir listesini oluşturmamız gerekebilir, bu da 0000, 0001, 0002… 9999'luk bir liste oluşturmak anlamına gelir. Excel'de liste görevini hızlı bir şekilde çözmek için size bazı hileler sunuyorum.
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