Sub CopiarFilasNoConsecutivas() Dim wbOrigen As Workbook Dim wbDestino As Workbook Dim wsOrigen As Worksheet Dim wsDestino As Worksheet Dim rangoACopiar As Range Dim lastRowDestino As Long ' Cambia las rutas y nombres de los libros y hojas según tus necesidades Set wbOrigen = Workbooks.Open("C:\Users\lfeli\TRABAJO DE GRADO LOCAL\APU_6801_SANTANDER__COMUNERA_2024_1.xlsx") Set wbDestino = Workbooks.Open("C:\Users\lfeli\TRABAJO DE GRADO LOCAL\HOJA FINAL.xlsx") Set wsOrigen = wbOrigen.Sheets("Hoja1") Set wsDestino = wbDestino.Sheets("Hoja1") ' Filas no consecutivas a copiar (ajusta los números) Set rangoACopiar = Union(wsOrigen.Rows(28), wsOrigen.Rows(55), wsOrigen.Rows(81), wsOrigen.Rows(84), wsOrigen.Rows(85), wsOrigen.Rows(108), wsOrigen.Rows(109), wsOrigen.Rows(121), wsOrigen.Rows(122), wsOrigen.Rows(129), wsOrigen.Rows(164), wsOrigen.Rows(165), wsOrigen.Rows(192), wsOrigen.Rows(233), wsOrigen.Rows(234), wsOrigen.Rows(247), wsOrigen.Rows(285), wsOrigen.Rows(289), wsOrigen.Rows(295), wsOrigen.Rows(324), wsOrigen.Rows(328)) ' Encuentra la última fila con datos en la hoja de destino (para pegar debajo) lastRowDestino = wsDestino.Cells(Rows.Count, 1).End(xlUp).Row + 1 ' Copia el rango de filas y pégalo en la siguiente fila disponible en el libro de destino rangoACopiar.Copy Destination:=wsDestino.Rows(lastRowDestino) wbOrigen.Close SaveChanges:=False ' Cierra el libro de origen sin guardar cambios wbDestino.Activate ' Activa el libro de destino End Sub ________________________________ Sub CopiarHojasSoloValores() On Error Resume Next Dim wbOrigen As Workbook Dim wbDestino As Workbook Dim wsOrigen As Worksheet Dim hoja As Variant ' Abre los libros (modo de solo lectura para evitar conflictos) Set wbOrigen = Workbooks.Open("C:\Users\lfeli\TRABAJO DE GRADO LOCAL\1\APU_1501_BOYACA__CENTRO_2024_1.xlsx", ReadOnly:=True) Set wbDestino = Workbooks.Open("C:\Users\lfeli\TRABAJO DE GRADO LOCAL\1\p.xlsx", ReadOnly:=True) ' Desactivar cálculos y actualizaciones para mejorar el rendimiento Application.ScreenUpdating = False Application.Calculation = xlCalculationManual ' Hojas a copiar (ajusta los nombres) hojasACopiar = Array("210.1.1", "236.1", "320.1.2", "320.3.1", "320.3.2", "330.3.1", "330.3.2", "350.1", "350.2", "430.3.1", "430.3.2", "450.2", "500.1.1", "500.1.2", "610.2", "630.1.4.1", "630.1.7", "640.2", "671.3", "672.3") For Each hoja In hojasACopiar On Error Resume Next Set wsOrigen = wbOrigen.Sheets(hoja) If Not wsOrigen Is Nothing Then wsOrigen.Copy After:=wbDestino.Sheets(wbDestino.Sheets.Count) ' **Aquí agregamos la línea para pegar solo valores** With wbDestino.Sheets(wbDestino.Sheets.Count) .UsedRange.Value = .UsedRange.Value End With Else MsgBox "La hoja '" & hoja & "' no exists en el libro de origen." End If On Error GoTo 0 Next hoja ' Reactivar cálculos y actualizaciones Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic wbOrigen.Close SaveChanges:=False wbDestino.Activate End Sub __________________________________________________________ Sub ExtraerFilasCoincidentes() Dim wbOrigen As Workbook Dim wbDestino As Workbook Dim wsOrigen As Worksheet Dim wsDestino As Worksheet Dim tablaOrigen As ListObject Dim tablaDestino As ListObject Dim rngCelda As Range Dim i As Long, j As Long ' Abre los libros de origen y destino (ajusta las rutas) Set wbOrigen = Workbooks.Open("C:\Users\lfeli\TRABAJO DE GRADO LOCAL\TRABAJO\APU_4101_HUILA__CENTRO_2024_1.xlsx") Set wbDestino = Workbooks.Open("C:\Users\lfeli\TRABAJO DE GRADO LOCAL\TRABAJO\0_BASE DE DATOS.xlsx") ' Selecciona las hojas y tablas (ajusta los nombres) 'MANO DE OBRA // MATERIALES // EQUIPO // TRANSPORTE Set wsOrigen = wbOrigen.Sheets("MANO DE OBRA") Set wsDestino = wbDestino.Sheets("Extraer Datos") Set tablaOrigen = wsOrigen.ListObjects("Tabla1") Set tablaDestino = wsDestino.ListObjects("MANODEOBRA") ' Recorre cada fila de la tabla de origen For i = 1 To tablaOrigen.ListRows.Count ' Recorre cada celda de la fila actual en la tabla de origen For Each rngCelda In tablaOrigen.ListRows(i).Range ' Compara el valor de la celda con todos los valores de la columna de búsqueda en la tabla de destino For j = 1 To tablaDestino.ListColumns(1).DataBodyRange.Rows.Count ' Ajusta el número de columna si es necesario If rngCelda.Value = tablaDestino.DataBodyRange(j, 1).Value Then ' Si encuentra una coincidencia, copia la fila completa a la tabla de destino tablaOrigen.ListRows(i).Range.Copy With wbDestino.Sheets(wsDestino.Name).Range("A" & Rows.Count).End(xlUp).Offset(1, 0) ' Ajusta la columna de destino si es necesario .PasteSpecial xlPasteValues End With Exit For ' Sale del bucle interno si encuentra una coincidencia End If Next j Next rngCelda Next i Set wbOrigen = Workbooks.Open("C:\Users\lfeli\TRABAJO DE GRADO LOCAL\TRABAJO\APU_4101_HUILA__CENTRO_2024_1.xlsx") Set wbDestino = Workbooks.Open("C:\Users\lfeli\TRABAJO DE GRADO LOCAL\TRABAJO\0_BASE DE DATOS.xlsx") ' Selecciona las hojas y tablas (ajusta los nombres) 'MANO DE OBRA // MATERIALES // EQUIPO // TRANSPORTE Set wsOrigen = wbOrigen.Sheets("MATERIALES") Set wsDestino = wbDestino.Sheets("Extraer Datos") Set tablaOrigen = wsOrigen.ListObjects("Tabla2") Set tablaDestino = wsDestino.ListObjects("MATERIALES") ' Recorre cada fila de la tabla de origen For i = 1 To tablaOrigen.ListRows.Count ' Recorre cada celda de la fila actual en la tabla de origen For Each rngCelda In tablaOrigen.ListRows(i).Range ' Compara el valor de la celda con todos los valores de la columna de búsqueda en la tabla de destino For j = 1 To tablaDestino.ListColumns(1).DataBodyRange.Rows.Count ' Ajusta el número de columna si es necesario If rngCelda.Value = tablaDestino.DataBodyRange(j, 1).Value Then ' Si encuentra una coincidencia, copia la fila completa a la tabla de destino tablaOrigen.ListRows(i).Range.Copy With wbDestino.Sheets(wsDestino.Name).Range("A" & Rows.Count).End(xlUp).Offset(1, 0) ' Ajusta la columna de destino si es necesario .PasteSpecial xlPasteValues End With Exit For ' Sale del bucle interno si encuentra una coincidencia End If Next j Next rngCelda Next i Set wbOrigen = Workbooks.Open("C:\Users\lfeli\TRABAJO DE GRADO LOCAL\TRABAJO\APU_4101_HUILA__CENTRO_2024_1.xlsx") Set wbDestino = Workbooks.Open("C:\Users\lfeli\TRABAJO DE GRADO LOCAL\TRABAJO\0_BASE DE DATOS.xlsx") ' Selecciona las hojas y tablas (ajusta los nombres) 'MANO DE OBRA // MATERIALES // EQUIPO // TRANSPORTE Set wsOrigen = wbOrigen.Sheets("EQUIPO") Set wsDestino = wbDestino.Sheets("Extraer Datos") Set tablaOrigen = wsOrigen.ListObjects("Tabla3") Set tablaDestino = wsDestino.ListObjects("EQUIPO") ' Recorre cada fila de la tabla de origen For i = 1 To tablaOrigen.ListRows.Count ' Recorre cada celda de la fila actual en la tabla de origen For Each rngCelda In tablaOrigen.ListRows(i).Range ' Compara el valor de la celda con todos los valores de la columna de búsqueda en la tabla de destino For j = 1 To tablaDestino.ListColumns(1).DataBodyRange.Rows.Count ' Ajusta el número de columna si es necesario If rngCelda.Value = tablaDestino.DataBodyRange(j, 1).Value Then ' Si encuentra una coincidencia, copia la fila completa a la tabla de destino tablaOrigen.ListRows(i).Range.Copy With wbDestino.Sheets(wsDestino.Name).Range("A" & Rows.Count).End(xlUp).Offset(1, 0) ' Ajusta la columna de destino si es necesario .PasteSpecial xlPasteValues End With Exit For ' Sale del bucle interno si encuentra una coincidencia End If Next j Next rngCelda Next i Set wbOrigen = Workbooks.Open("C:\Users\lfeli\TRABAJO DE GRADO LOCAL\TRABAJO\APU_4101_HUILA__CENTRO_2024_1.xlsx") Set wbDestino = Workbooks.Open("C:\Users\lfeli\TRABAJO DE GRADO LOCAL\TRABAJO\0_BASE DE DATOS.xlsx") ' Selecciona las hojas y tablas (ajusta los nombres) 'MANO DE OBRA // MATERIALES // EQUIPO // TRANSPORTE Set wsOrigen = wbOrigen.Sheets("TRANSPORTE") Set wsDestino = wbDestino.Sheets("Extraer Datos") Set tablaOrigen = wsOrigen.ListObjects("Tabla4") Set tablaDestino = wsDestino.ListObjects("TRANSPORTE") ' Recorre cada fila de la tabla de origen For i = 1 To tablaOrigen.ListRows.Count ' Recorre cada celda de la fila actual en la tabla de origen For Each rngCelda In tablaOrigen.ListRows(i).Range ' Compara el valor de la celda con todos los valores de la columna de búsqueda en la tabla de destino For j = 1 To tablaDestino.ListColumns(1).DataBodyRange.Rows.Count ' Ajusta el número de columna si es necesario If rngCelda.Value = tablaDestino.DataBodyRange(j, 1).Value Then ' Si encuentra una coincidencia, copia la fila completa a la tabla de destino tablaOrigen.ListRows(i).Range.Copy With wbDestino.Sheets(wsDestino.Name).Range("A" & Rows.Count).End(xlUp).Offset(1, 0) ' Ajusta la columna de destino si es necesario .PasteSpecial xlPasteValues End With Exit For ' Sale del bucle interno si encuentra una coincidencia End If Next j Next rngCelda Next i End Sub