Macro para consolidar múltiples hojas en excel

Espero que por favor me puedan ayudar, ya que todos los meses lo hago manual, pero creo que se puede hacer más eficiente con macros. Tengo 3 planillas, el archivo Avance.xls tiene como hojas los días del mes: "Avance 01.04.21", "Avance 02.04.21", etc hasta "Avance 30.04.21", cada hoja con idéntico formato. Y otra planilla destino.xls que tiene 30 hojas, una por día, llamadas "01", "02", etc. Necesito copiar la celda M18 de la hoja "Avance 01.04.21", y pegado especial valor en la planilla destino.xls en la celda k2 de la hoja "01". Luego copiar la celda m18 de la hoja "avance 02.04.21" y pegarla "como valor "en la celda k2 de la hoja "02", etc, y así con todos los días del mes. De la misma forma desde celda E31 de avance 01, pegar en celda AM1.
Por otro lado, "Agua.xls", de la hoja "Abril", los valores que necesito están ordenados por fila, me interesa copiar n6, n7, n8, etc. Concretamente quiero copiar la celda "N6", y pegar "como valor" hacia destino.xls, hoja 01, celda "L1". Luego copiar desde "Agua.xls" la celda N7 y pegar "como valor" en destino.xls hoja "02", celda "L1". Y así, celda "n8" de agua.xls y pegarla en destino.xls hoja 03 en celda L1, etc.
Espero que se pueda entender y me puedan ayudar, porque pierdo mucho tiempo.

1 Respuesta

Respuesta
1

Prueba la siguiente macro. Pon la macro en un libro nuevo.

Los 3 libros Avance, Destino y Agua deberán estar abiertos.

La macro calcula el número de días del mes actual, si quieres procesar otro mes, si estamos en abril, pero quieres procesar Marzo, entonces cambia esta línea

mes = Month(Date)

Por esta

mes = 3


Sub Consolidar_Hojas()
'Por Dante Amor
  Dim wb1 As Workbook, wb2 As Workbook, wb3 As Workbook
  Dim uDia As Long, i As Long, mes As Long
  Dim hojaDia As String, hojaMes As String
  '
  Set wb1 = Workbooks("Avance.xls")
  Set wb2 = Workbooks("Destino.xls")
  Set wb3 = Workbooks("Agua.xls")
  '
  mes = Month(Date)
  uDia = Day(DateSerial(Year(Date), mes + 1, 1) - 1)
  hojaMes = Format(DateSerial(Year(Date), mes, 1), "mmmm")
  '
  For i = 1 To uDia
    hojaDia = "Avance " & Format(i, "00") & "." & Format(mes, "00") & "." & Format(Date, "yy")
    'pasa los datos de Avance a Destino
    Wb2. Sheets(Format(i, "00")). Range("K2").Value = wb1. Sheets(hojaDia). Range("M18")
    Wb2. Sheets(Format(i, "00")). Range("AM1").Value = wb1. Sheets(hojaDia). Range("E31")
    '
    'paso los datos de la hoja mes a Destino
    wb2.Sheets(Format(i, "00")).Range("L1").Value = wb3.Sheets(hojaMes).Range("N" & i + 5)
  Next
  '
  MsgBox "Fin"
End Sub

Muchísimas gracias Dante, funcionó perfecto. No sé si sería mucho pedirte una última ayuda, lo intenté, pero no me resultó usarlo con fórmulas. Sucede que tengo una cuarta planilla llamada gas.xls, con hojas según día: "1-4"; "2-4"..."29-4"; "30-4". Esta vez quiero copiar la celda H35 desde gas.xls hacia destino.xls y pegarla como valor en W2. También copiar desde gas.xls la suma de "H33 + H34" y pegarla como valor en destino V2. Finalmente, copiar la celda B25 de gas.xls hacia destino en X2, pero con la condición SI (B25 <1) entonces pegar el valor cero 0.

Traté de adaptar tu código, pero no supe hacerlo con las fórmulas, no sé si me podrias ayudar con esto último, de todas maneras ya te agradezco el anterior código que funcionó perfecto. Muchas gracias

.

'Con todo gusto te ayudo.
'Valora esta respuesta y crea una nueva para agregar el código para gas.xls
'

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas