Saltar al contenido principal

¿Cómo encontrar todas las combinaciones que equivalen a una suma determinada en Excel?

Autor: Xiaoyang Última modificación: 2024-02-29

Descubrir todas las combinaciones posibles de números dentro de una lista que suman una suma específica es un desafío que muchos usuarios de Excel pueden encontrar, ya sea con fines de elaboración de presupuestos, planificación o análisis de datos.

En este ejemplo, tenemos una lista de números y el objetivo es identificar qué combinaciones de esta lista suman 480. La captura de pantalla proporcionada demuestra que hay cinco grupos posibles de combinaciones que logran esta suma, incluidas combinaciones como 300+120. +60, 250+120+60+50, entre otros. En este artículo, exploraremos varios métodos para identificar las combinaciones específicas de números dentro de una lista que suman un valor designado en Excel.

Encuentre una combinación de números igual a una suma dada con la función Solver

Obtener todas las combinaciones de números iguales a una suma determinada

Obtenga todas las combinaciones de números que tengan una suma en un rango con código VBA


Encuentre una combinación de celdas que sea igual a una suma dada con la función Solver

Bucear en Excel para encontrar combinaciones de celdas que sumen un número específico puede parecer desalentador, pero el complemento Solver lo hace muy sencillo. Lo guiaremos a través de los sencillos pasos para configurar Solver y encontrar la combinación correcta de celdas, haciendo que lo que parecía una tarea compleja sea sencilla y factible.

Paso 1: habilite el complemento Solver

  1. Por favor, vaya a Archive > Opciones, En la Opciones de Excel cuadro de diálogo, haga clic en Complementos desde el panel izquierdo, luego, haga clic en Go botón. Ver captura de pantalla:
  2. Entonces, el Complementos Aparece el cuadro de diálogo, verifique el Complemento Solver opción, y haga clic OK para instalar este complemento correctamente.

Paso 2: ingrese la fórmula

Después de activar el complemento Solver, debe ingresar esta fórmula en la celda B11:

=SUMPRODUCT(B2:B10,A2:A10)
Note: En esta fórmula: B2: B10 es una columna de celdas en blanco al lado de su lista de números, y A2: A10 es la lista de números que utilizas.

Paso 3: Configure y ejecute Solver para obtener el resultado

  1. Haga Clic en Datos > Solver para ir a la Parámetro del solucionador cuadro de diálogo, en el cuadro de diálogo, realice las siguientes operaciones:
    • (1.) Haga clic en botón para seleccionar la celda B11 dónde se encuentra su fórmula desde el Establecer objetivo sección;
    • (2.) Luego en el A sección, seleccionar Valor dee ingrese su valor objetivo 480 como necesites;
    • (3.) Bajo el Cambiando celdas variables sección, haga clic en botón para seleccionar el rango de celdas B2: B10 donde marcará sus números correspondientes.
    • (4.) Luego, haga clic en Añada del botón.
  2. Entonces, un Agregar restricción Se muestra el cuadro de diálogo, haga clic en botón para seleccionar el rango de celdas B2: B10y seleccione papelera de la lista desplegable. Por último, haz clic OK botón. Ver captura de pantalla:
  3. En Parámetro del solucionador diálogo, haga clic en Resolver , unos minutos después, un Resultados del solucionador Aparece el cuadro de diálogo y puede ver que la combinación de celdas que equivalen a una suma determinada 480 están marcadas como 1 en la columna B. En el Resultados del solucionador cuadro de diálogo, seleccione Mantener la solución Solver opción, y haga clic OK para salir del diálogo. Ver captura de pantalla:
Note: Este método, sin embargo, tiene una limitación: solo puede identificar una combinación de celdas que suman la suma especificada, incluso si existen varias combinaciones válidas.

Obtener todas las combinaciones de números iguales a una suma determinada

Explorar las capacidades más profundas de Excel le permite encontrar cada combinación de números que coincida con una suma específica, y es más fácil de lo que piensa. Esta sección le mostrará dos métodos para encontrar todas las combinaciones de números iguales a una suma determinada.

Obtenga todas las combinaciones de números iguales a una suma determinada con la función definida por el usuario

Para descubrir todas las combinaciones posibles de números de un conjunto específico que en conjunto alcanza un valor determinado, la función personalizada que se describe a continuación sirve como una herramienta eficaz.

Paso 1: abre el editor de módulos de VBA y copia el código

  1. Mantenga pulsado el botón ALT + F11 claves en Excel, y abre el Microsoft Visual Basic para aplicaciones ventana.
  2. Haga Clic en recuadro > Móduloy pegue el siguiente código en la ventana del módulo.
    Código VBA: obtenga todas las combinaciones de números iguales a una suma determinada
    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
    

Paso 2: ingrese la fórmula personalizada para obtener el resultado

Después de pegar el código, cierre la ventana del código para volver a la hoja de trabajo. Ingrese la siguiente fórmula en una celda en blanco para generar el resultado y luego presione Participar clave para obtener todas las combinaciones. Ver captura de pantalla:

=MakeupANumber(A2:A10,B2)
Note: En esta fórmula: A2: A10 es la lista de números, y B2 es la suma total que desea obtener.

Consejo: Si desea enumerar los resultados de la combinación verticalmente en una columna, aplique la siguiente fórmula:
=TRANSPOSE(MakeupANumber(A2:A10,B2))
Las limitaciones de este método.:
  • Esta función personalizada solo funciona en Excel 365 y 2021.
  • Este método es eficaz exclusivamente para números positivos; los valores decimales se redondean automáticamente al número entero más cercano y los números negativos generarán errores.

Obtenga todas las combinaciones de números iguales a una suma determinada con una característica poderosa

Dadas las limitaciones de la función antes mencionada, recomendamos una solución rápida y completa: la función Crear un número de Kutools for Excel, que es compatible con cualquier versión de Excel. Esta alternativa puede manejar eficazmente números positivos, decimales y números negativos. Con esta función, puede obtener rápidamente todas las combinaciones que equivalen a una suma determinada.

Propina: Para aplicar esto Hacer un número característica, en primer lugar, debe descargar Kutools for Excely, a continuación, aplique la función de forma rápida y sencilla.
  1. Haga Clic en Kutools > Contenido > Hacer un número, ver captura de pantalla:
  2. Entonces, en el Inventa un número cuadro de diálogo, haga clic en para seleccionar la lista de números que desea utilizar del Fuente de datosy luego ingrese el número total en el Suma caja de texto. Finalmente, haga clic en OK botón, ver captura de pantalla:
  3. Y luego, aparecerá un cuadro emergente para recordarle que seleccione una celda para ubicar el resultado, luego haga clic en OK, ver captura de pantalla:
  4. Y ahora, todas las combinaciones que equivalen a ese número dado se muestran como se muestra a continuación:
Note: Para aplicar esta función, por favor descargue e instale Kutools para Excel de antemano.

Obtenga todas las combinaciones de números que tengan una suma en un rango con código VBA

A veces, es posible que se encuentre en una situación en la que necesite identificar todas las combinaciones posibles de números que en conjunto suman una suma dentro de un rango específico. Por ejemplo, es posible que desee encontrar todos los grupos posibles de números donde el total se encuentre entre 470 y 480.

Descubrir todas las combinaciones posibles de números que suman un valor dentro de un rango específico representa un desafío fascinante y muy práctico en Excel. Esta sección presentará un código VBA para resolver esta tarea.

Paso 1: abre el editor de módulos de VBA y copia el código

  1. Mantenga pulsado el botón ALT + F11 claves en Excel, y abre el Microsoft Visual Basic para aplicaciones ventana.
  2. Haga Clic en recuadro > Móduloy pegue el siguiente código en la ventana del módulo.
    Código VBA: obtenga todas las combinaciones de números que suman un rango específico
    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
    
    
    

Paso 2: ejecuta el código

  1. Después de pegar el código, presione F5 para ejecutar este código, en el primer cuadro de diálogo emergente, seleccione el rango de números que desea usar y haga clic en OK. Ver captura de pantalla:
  2. En el segundo cuadro, seleccione o escriba el número de límite bajo y haga clic en OK. Ver captura de pantalla:
  3. En el tercer cuadro, seleccione o escriba el número de límite superior y haga clic en OK. Ver captura de pantalla:
  4. En el último cuadro de mensaje, seleccione una celda de salida, que es donde comenzarán a generarse los resultados. Luego haga clic OK. Ver captura de pantalla:

Resultado

Ahora, cada combinación calificada aparecerá en filas consecutivas en la hoja de trabajo, comenzando desde la celda de salida que eligió.

Excel te ofrece varias formas de encontrar grupos de números que suman un total determinado, cada método funciona de manera diferente, por lo que puedes elegir uno según tu nivel de familiaridad con Excel y lo que necesitas para tu proyecto. Si está interesado en explorar más consejos y trucos de Excel, nuestro sitio web ofrece miles de tutoriales, por favor haga clic aquí para acceder a ellos. ¡Gracias por leer y esperamos brindarle más información útil en el futuro!


Artículos relacionados:

  • Enumerar o generar todas las combinaciones posibles.
  • Digamos, tengo las siguientes dos columnas de datos, y ahora, quiero generar una lista de todas las combinaciones posibles basadas en las dos listas de valores como se muestra en la captura de pantalla de la izquierda. Tal vez, puede enumerar todas las combinaciones una por una si hay pocos valores, pero, si hay varias columnas con valores múltiples necesarios para enumerar las combinaciones posibles, aquí hay algunos trucos rápidos que pueden ayudarlo a lidiar con este problema en Excel .
  • Genere todas las combinaciones de 3 o varias columnas.
  • Supongamos que tengo 3 columnas de datos, ahora quiero generar o enumerar todas las combinaciones de los datos en estas 3 columnas como se muestra a continuación. ¿Tiene algún buen método para resolver esta tarea en Excel?
  • Genere una lista de todas las combinaciones posibles de 4 dígitos
  • En algunos casos, es posible que necesitemos generar una lista de todas las combinaciones posibles de 4 dígitos del número 0 al 9, lo que significa generar una lista de 0000, 0001, 0002… 9999. Para resolver rápidamente la tarea de la lista en Excel, le presento algunos trucos.
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