Como puedo hacer para que excel identifique el código de varias celdas y me lo sume en una automáticamente.

Tengo tres columnas la primera A con códigos la segunda B con una descripción y la tercera C con valor.

A                         B                                                            C

11                       Disponible                                            1,538,200.00

1105                  CAJA                                                      1,538,200.00  

110505 CAJA GENERAL 1,188,200.00

110510            CAJA MENOR. 350,000.00

Así como en el ejemplo necesito que el código 1105 sume los valores automáticamente de todo lo que empiece por 1105 y contenga 6 dígitos y 11 sume los valores de todo lo que empiece por 11 y contenga hasta 4 dígitos de lo contrario el código 11 sumaria los tres datos y generaría error en el valor; la tabla contendrá muchos más códigos para sumas por ejemplo 110520 u otro que empiece por 1110 el cual debería sumar solo en 11 porque tiene cuatro dígitos también habrá códigos de ocho dígitos que sumaran en los de seis pero resolviendo el ejemplo sera más fácil hacerlo para los demás, actualmente lo estoy haciendo con una fórmula Si pero me gustaría automatizarlo con una macro si es posible o encontrar una mejor fórmula.

Respuesta

Este es el resultado de hacerlo con macro, en este caso una macro dinámica que sin importar cuantos registros añadas o quites la macro trabajara sobre los que queden

esta es la macro

Sub sumar_codigos()
Dim funcion As WorksheetFunction
Set funcion = WorksheetFunction
Set datos = Range("a1").CurrentRegion
With datos
    f = .Rows.Count: c = .Columns.Count
        For i = 1 To f
            codigo = .Cells(i, 1)
            largo = Len(codigo)
            .Cells(i, c + 1) = largo
            If largo = 4 Then .Cells(i, c + 2) = Left(codigo, 2)
            If largo = 6 Then .Cells(i, c + 2) = Left(codigo, 4)
        Next i
Set datos = .CurrentRegion
.EntireColumn.AutoFit
f = .Rows.Count: c = .Columns.Count
Set resumen = .Columns(c + 3).Resize(f, 3)
    With resumen
        Datos. Columns(1).Copy: .Columns(1).PasteSpecial
 datos. Columns(3).Copy: .Columns(2).PasteSpecial
 datos. Columns(5).Copy: .Columns(3).PasteSpecial
        .RemoveDuplicates Columns:=3
        Set resumen = .CurrentRegion
        For i = 1 To .Rows.Count
            codigo = .Cells(i, 3)
            If codigo > 0 Then
                suma = funcion.SumIf(datos.Columns(5), codigo, datos.Columns(3))
                resumen(i, 2) = suma
            Else
                .Rows(i).ClearContents
            End If
        Next i
        .Columns(3).ClearContents
        .Columns(2).NumberFormat = "$0,0.00"
    End With
    .Columns(4).Resize(.Rows.Count, 2).ClearContents
End With
Set resumen = Nothing:  Set datos = Nothing
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas