Se puede crear una macro que sume valores repetidos en excel?

Es un placer saludarlos nuevamente la presente es para solicitar su ayuda, pues como podrán observar en la tabla que presento a continuación; tengo 3 columnas que van desde la A hasta la C. Y un número que filas que pueden ir de 2 hasta 5000. ( Para este caso utilizaremos 16 filas como podrán observar).

Necesito sumar en la columna C, siendo que en la columna A y B tengo repetidos los números de cédula y nombres.

3 Respuestas

Respuesta
2

Este es el resultado de la macro

Y esta es la macro, primero hará un filtro para eliminar los repetidos y luego hará la sumatoria usando el numero de la cedula como condición para sumar

Option Base 1
Sub totaliza()
Dim unicos As New Collection
Set tabla = Range("a1").CurrentRegion
With tabla
    filas = .Rows.Count
    col = .Columns.Count
    ReDim matriz(filas, 3)
    For i = 1 To filas
        cedula = .Cells(i, 1)
        nombre = .Cells(i, 2)
        On Error Resume Next
        unicos.Add cedula, CStr(cedula)
        If Err.Number = 0 Then
            suma = WorksheetFunction.SumIfs(.Columns(3), .Columns(1), cedula)
            matriz(i, 1) = cedula
            matriz(i, 2) = nombre
            matriz(i, 3) = suma
        End If
        On Error GoTo 0
    Next i
    .Columns(col + 3).Resize(unicos.Count, 3) = matriz
End With
Set tabla = Nothing: Set unicos = Nothing
End Sub

James solo suma las 16 filas que aparecen, pero si quiero sumar más filas?, es decir que no sean 16 sino 600 por ejemplo.

La macro es dinámica, lee el numero de filas y columnas que tiene una tabla a partir de una celda, la instrucción range("a1"). Currentregion es lo que hace, y ya sea que agregues o quites columnas la macro procesara las filas que tenga esa tabla puede ser uno o un millón o más de filas

Respuesta
3

Necesito sumar en la columna C, siendo que en la columna A y B tengo repetidos los números de cédula y nombres.

En tu imagen el número de cédula no está repetido, fue un error al momento de generar el ejemplo, o realmente son diferentes.

Pero si creas una tabla dinámica, como sugiere Abraham, podrás hacer los grupos por nombre o por cédula.


Si las cédulas son iguales y quieres una macro, aquí otro código a considerar:

Sub sumar()
  Dim a As Variant, dic As Object, i As Long
  Set dic = CreateObject("Scripting.Dictionary")
  a = Range("A1:C" & Range("A" & Rows.Count).End(3).Row).Value2
  For i = 1 To UBound(a)
    dic(a(i, 1) & "|" & a(i, 2)) = dic(a(i, 1) & "|" & a(i, 2)) + a(i, 3)
  Next
  Range("E1").Resize(dic.Count).Value = Application.Transpose(dic.keys)
  Range("E1:E" & dic.Count).TextToColumns DataType:=xlDelimited, Other:=True, OtherChar:="|"
  Range("G1").Resize(dic.Count).Value = Application.Transpose(dic.items)
End Sub

¡Gracias! la macro funciona excelente.

Me alegra ayudarte [Gracias! Por comentar.

Respuesta
1

[Hola

¿No te sirve una Tabla Dinámica? ¿O no las conoces?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas