Requiero una macro para que dependiendo de un rango de datos se sume otro rango solo si sumple

Tengo esa macro para esa tabla pero en el momento que hace la función "=SUMIF(" la sumatoria no corresponde a la correcta; la maco toma datos de un rango y luego elimina los duplicados y así entra en funcionamiento la función SUMIF, pero la sumatoria no es la correcta, da datos incorrectos. Ahora se requiere no solo sacar el SUMIF con un rango de datos o una columna de datos si no que ahora se requiere con 3 rangos de columnas (3 columnas de datos) ayuda!

Este es el código que actualmente tengo :

Sub sumar_nombres()

Set datos = Range("I5").CurrentRegion

With datos

    col = .Columns.Count

    filas = .Rows.Count

    Set tabla = .Columns(col + 3).Resize(filas, 1)

End With

With tabla

    .Columns(1).Value = datos.Columns(9).Value

    .RemoveDuplicates Columns:=1

    .CurrentRegion.Columns(2).Formula = "=SUMIF(" & datos.Columns(9).Address & _

    "," & .Cells(1).Address(0, 0) & "," & datos.Columns(39).Address(0, 0) & ")"

End With

Set tabla = Nothing: Set datos = Nothing

Call formato

End Sub

1 Respuesta

Respuesta
1

Reconozco esa macro como mía, supongo que que la intentaste modificar sin éxito y he aquí las razones por las que fallo, cuando se utiliza la instrucción set en este caso Set datos = Range("I5"). CurrentRegion, el numero de las columnas se modifica para ese objeto Set es decir la columna I es 1, la columna J es 2, la columna que es tres y así sucesivamente hasta llegar a la columna AM que no es 39 sino 32, 39 es el numero natural si usaras la referencia de la hoja pero como estas usando Set es 32, el segundo error es este

.CurrentRegion.Columns(2).Formula = "=SUMIF(" & datos.Columns(9).Address & _
"," & .Cells(1).Address(0, 0) & "," & datos.Columns(31).Address(0, 0) & ")" 

El address(0,0), le indica a Excel que la referencia de la columna es AM1:AM500 para la primer fila, AM2:AM501 para la segunda fila y asi sucesivamente por eso no obtienes resultados correctos, la instruccion correcta es esta

.CurrentRegion.Columns(2).Formula = "=SUMIF(" & datos.Columns(9).Address & _
"," & .Cells(1).Address(0, 0) & "," & datos.Columns(31).Address(1, 1) & ")" 

Asi la columna queda fija $AM$5:$AM$500, por cierto no haces referencia a cuales son las celdas que quieres sumar, y solo es de copiar esta instruccion dos veces mas y ponerlas asi

.CurrentRegion.Columns(3).Formula = "=SUMIF(" & datos.Columns(9).Address & _
"," & .Cells(1).Address(0, 0) & "," & datos.Columns(29).Address(1, 1) & ")" 

.CurrentRegion.Columns(4).Formula = "=SUMIF(" & datos.Columns(9).Address & _
"," & .Cells(1).Address(0, 0) & "," & datos.Columns(30).Address(1, 1) & ")" 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas