Ayuda con formula SUMAR. SI

Hola! Algún experto me podría ayudar con la formula SUMAR.SI

Les platico mi caso. Tengo un libro con 3 hojas, En una hoja, "ingresos" registro los productos que ingresan a mi almacen, y cada uno de estos registros los envía a la hoja "registros" esto a través de una macro. En otra hoja "inventario" tengo la lista de mis productos", aquí en esta hoja en la columna E, a partir de la fila 10 tengo mis registros de entrada (la suma de todos los registros con la misma clave), por ejemplo en C10 que es donde esta mi primer clave tengo CCC-060, y en la celda E10 suma los productos de la hoja "registros" que tienen la misma clave sin importar la fecha en que ingresaron a mi almacen.

El problema es que cada que ingreso un nuevo producto y ejecuto la macro cambia mi formula. Ejemplo, se encuentra asi =SUMAR.SI(registros!$D$8:$D$1000,C10,registro!$F$8:$F$1000)

y al ejecutar la macro cambia a =SUMAR.SI(registros!$D$8:$D$1001,C10,registro!$F$8:$F$1001)

y cuando guardo el libro, cierro y lo vuelvo abrir.... Ingreso nuevos productos con la macro mi formula es la siguiente =SUMAR.SI(registros!$D$8:$D$8,C10,registro!$F$8:$F$8)

Espero haberme explicado y me puedan ayudar.

De antemano gracias por el tiempo que puedan dedicarle a mi caso.

1 respuesta

Respuesta
1

Para solucionarlo es mejor que no pongas las fórmulas tu, me explico, es mejor que los cálculos los haga la macro, es decir, que el sumar. Si lo haga la macro, de esta manera:

-Borra la fórmula escrita en la celda E10

-Escribe esta sentencia en la macro que ya tienes y ponla al final del proceso antes de end sub claro está.

Range("e10").Value = Application. WorksheetFunction. SumIf(Range("registros!d8:d" & Sheets("registros"). Range("d65000").End(xlUp). Row), Sheets("registros"). Range("c10"). Value, Sheets("registros"). Range("registros!f8:f" & Sheets("registros"). Range("f65000").End(xlUp). Row))

recuerda finalizar la consulta

he aplicado la sentencia y me ha dejado un "cero" no esta aplicando la formula, pues ahora debería tener como resultado 13

en la sentencia no debería hacer referencia a la hoja inventario? que es en donde va aplicar la formula a partir de e10 a e100.

Luis he cambiado en esta parte Sheets("registros").Range("c10").Value por la hoja "inventario" y me esta funcionando. pero si elimino algún registro o cambio la cantidad de entrada en la hoja "registros" digamos que por algún motivo me equivoque y la cambio por la correcta, no actualiza estos datos ya que solo lo hace cuando empleo la macro, como podría hacer para que actualice la cantidad de e10 a e100?, si hay un cambio en la columna "f" d la hoja regístros

Entonces individualiza esa sentencia en una macro independiente, así:

sub hacer_suma()
Range("e10").Value = Application. WorksheetFunction. SumIf(Range("registros!d8:d" & Sheets("registros"). Range("d65000").End(xlUp). Row), Sheets("inventario"). Range("c10"). Value, Sheets("registros"). Range("registros!f8:f" & Sheets("registros"). Range("f65000").End(xlUp). Row))
end sub

Luis como le indico que actualice todos los ingresos de la hoja inventario? porque hasta el momento solo lo hace para el primer articulo que esta en la fila 10.

Necesito saber la amplitud de ese rango, es decir, ¿desde E10 hasta donde?

hasta E100

Esta sería la macro que tienes que ejecutar para calcular todas las sumas:

Sub hacer_suma()
'por luismondelo
sheets("inventario").select
Range("e10").Select
Do While ActiveCell.Row < 100
ActiveCell.Value.Value = Application.WorksheetFunction.SumIf(Range("registros!d8:d" & Sheets("registros").Range("d65000").End(xlUp).Row), ActiveCell.Offset(0, -2).Value, Sheets("registros").Range("registros!f8:f" & Sheets("registros").Range("f65000").End(xlUp).Row))
ActiveCell.Offset(1, 0).Select
Loop
End Sub

recuerda finalizar la consulta

Un detalle:

En la línea donde hay un 100 escribe 101

me aparece lo siguiente:

"Se ha producido el error '424' en tiempo de ejecución:

Se requiere un objeto.

el error aparece en la linea:

ActiveCell.Value.Value = Application.WorksheetFunction.SumIf(Range("registros!d8:d" & Sheets("registros").Range("d65000").End(xlUp).Row), ActiveCell.Offset(0, -2).Value, Sheets("registros").Range("registros!f8:f" & Sheets("registros").Range("f65000").End(xlUp).Row))

Revisa que los nombres de las hojas los haya puesto bien:

Inventario (tal cual en singular)

Registros (tal cual en plural)

el error estaba en ActiveCell.Value.Value
elimine el ultimo .Value
y ha funcionado justo como lo necesitaba. gracias Luis
un saludo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas