Macro para calcular en una hoja con datos de otra


El archivo Pedidos.xlsx contiene dos hojas. En la primera, Pedidos, se encuentra los datos relativos al cliente, como nombre, empleado que le atendió, fecha de pedido y entrega, etc.
En la Hoja Detalle, se encuentran los datos relativos al pedido efectuado por el cliente, los productos, cantidad, precio, descuento. En ambas hojas, la primera columna contiene el código del cliente, fundamental para enlazar dos bases de datos o tablas.

Abra el libro haciendo clic aquí

Deseamos crear una columna adicional en la hoja Pedidos, que contenga el monto total del pedido para cada cliente. Como un cliente puede haber hecho más de un pedido, debemos sumar los montos de cada uno de los pedidos de ese cliente y colocarlos en la columna Monto total de la hoja Pedidos. Esto lo debe hace para todos los registros de cliente de la primera hoja.

Ante todo, vamos a darle nombre a los datos de las dos hojas como TPedido y TDetalle. La primera columna de la hoja Pedidos, se llamará CodClienteP, en el caso de la hoja Detalle se llamará CodClienteD.

En M1 de la hoja Pedidos ingresamos MontoTotal

En F1 de la hoja Detalle ingresamos Monto

En la hoja Pedidos: Seleccione todos los datos, sin cabecera: A2:M831 – [Fórmulas] – [Asignar nombre] - Digitar TPedido – [Aceptar]. Seleccione toda la primera columna: A2:A831 – [Fórmula] – [Asignar nombre] - Digitar: CodCliP – [Aceptar].

En la hoja Detalle: Seleccione todos los datos, sin cabecera: A2:F2156 – [Fórmulas] – [Asignar nombre] - Digitar TDetalle – [Aceptar]. Seleccione toda la primera columna: A2:A2156 – [Fórmula] – [Asignar nombre] - Digitar: CodCliD – [Aceptar]. Del mismo modo, el rango F2:F2156 de Detalle debe llamarse Monto.

Pasos que debe codificarse para tener la macro:

Ante todo, puesto que la macro debe trabajar exclusivamente con los datos de este libro, entonces debe quedar grabada en el mismo. Por ello, estando abierto Pedidios.xls, vaya al Editor usando la secuencia [Vista] – [Macros] – [Grabar macro … ]. Inserte un módulo.

Grabe el archivo con el mismo nombre pero habilitado para macros.

Según esto el libro tiene extensión xlsm; es decir, en la barra de título debe aparecer: Pedidos.xlsm.

Inserte un módulo. En este lugar codificaremos nuestra macro que se llamará CalcMonto y es la siguiente:

Sub CalcMonto()

' Activamos el libro por si otro fuera activo
'
Workbooks("Pedidos.xlsm").Activate
' Seleccionamos la hoja Detalle
Sheets("Detalle").Select
Range("A2").Select
' Obtenemos el número de filas de datos
nf = Selection.End(xlDown).Row
Range("F2").Select
ActiveCell = "=RC[-3]*RC[-2]+RC[-3]*RC[-2]*RC[-1]"
' En F1 calculamos el Monto
ActiveCell.Copy
' Y lo pegamos para los otros registros
Range(Cells(2, 6), Cells(nf, 6)).PasteSpecial
Application.CutCopyMode = False
Range("G2").Select
'
' Ahora vamos a la hoja Pedidos
' En M2 ingresamos la fórmula
' En Detalle debe sumar condicionalmente los montos
' cuyo código coincide con el que aparece en A2.
' Para ello usaremos Sumar.Si(RangoCodigoDetalle,Codigo en Pedido,Monto)
Sheets("Pedidos").Select
Range("M2").Select
ActiveCell = "=Sumif(CodCliD,RC[-12],Monto)"
ActiveCell.Copy
Range(Cells(2, 13), Cells(831, 13)).PasteSpecial
Application.CutCopyMode = False
Range("M1").Select
End Sub


La siguiente imagen muestra este procedimiento.

Vaya a la siguiente sesión haciendo aquí