En este artículo, crearemos una macro para copiar datos de todas las hojas del libro de trabajo a una nueva hoja.

Los datos brutos para este ejemplo consisten en detalles de empleados de diferentes departamentos en diferentes hojas. Queremos consolidar los detalles de los empleados en una sola hoja.

ArrowRawData

Hemos creado la macro “CopyRangeFromMultipleSheets” para la consolidación de los datos. Esta macro se puede ejecutar haciendo clic en el botón «Consolidar datos».

ArrowMain

Macro creará una nueva hoja de trabajo e insertará los datos consolidados de todas las hojas de trabajo.

ArrowOutput

Explicación del código

‘Recorriendo todas las hojas para comprobar si existe la hoja «Maestra».

Para cada fuente en ThisWorkbook.Worksheets If Source.Name = «Master» Then MsgBox «La hoja maestra ya existe»

Exit Sub End Si se usa el código Next Above para verificar si existe la hoja “Master” en el libro de trabajo. Si existe una hoja «Maestra» en el libro de trabajo, el código sale y se muestra un mensaje de error.

Source.Range («A1»). SpecialCells (xlLastCell). El código de la fila anterior se usa para obtener el número de fila de la última celda de la hoja.

Source.Range («A1», Range («A1»). SpecialCells (xlLastCell)). Copiar Destination.Range («A» & DestLastRow)

El código anterior se usa para copiar el rango especificado a la celda definida.

Siga el código a continuación

Sub CopyRangeFromMultipleSheets()

'Declaring variables

Dim Source As Worksheet

Dim Destination As Worksheet

Dim SourceLastRow, DestLastRow As Long

Application.ScreenUpdating = False

'Looping through all sheets to check whether "Master" sheet exist

For Each Source In ThisWorkbook.Worksheets

If Source.Name = "Master" Then

MsgBox "Master sheet already exist"

Exit Sub

End If

Next

'Inserting a new sheet after the "Main" sheet

Set Destination = Worksheets.Add(after:=Sheets("Main"))

Destination.Name = "Master"

'Looping through all the sheets in the workbook

For Each Source In ThisWorkbook.Worksheets



'Preventing consolidation of data from "Main" and "Master" sheet

If Source.Name <> "Main" And Source.Name <> "Master" Then



SourceLastRow = Source.Range("A1").SpecialCells(xlLastCell).Row



Source.Activate



If Source.UsedRange.Count > 1 Then



DestLastRow = Sheets("Master").Range("A1").SpecialCells(xlLastCell).Row



If DestLastRow = 1 Then

'copying data from the source sheet to destination sheet

Source.Range("A1", Range("A1").SpecialCells(xlLastCell)).Copy Destination.Range("A" & DestLastRow)

Else

Source.Range("A2", Range("A1").SpecialCells(xlCellTypeLastCell)).Copy Destination.Range("A" & (DestLastRow + 1))

End If



End If

End If

Next

Destination.Activate

Application.ScreenUpdating = True

End Sub

Si te gustó este blog, compártelo con tus amigos en Facebook y Facebook.

Nos encantaría saber de usted, háganos saber cómo podemos mejorar nuestro trabajo y hacerlo mejor para usted. Escríbanos a [email protected]