Si está manejando varias hojas a la vez y desea copiar los datos de cada hoja en una hoja de trabajo maestra, debe leer este artículo. Usaremos la propiedad currentregion del código VBA para consolidar los datos de todas las hojas de trabajo en una sola hoja. Esta propiedad es útil para muchas operaciones que expanden automáticamente la selección para incluir toda la región actual, como el método Autoformato. Esta propiedad no se puede utilizar en una hoja de trabajo protegida.

La condición es: cada hoja debe contener un formato similar, es decir, el mismo número de columnas; utilizando el mismo formato podemos tener datos fusionados con precisión.

Tenga en cuenta: este artículo demostrará el uso del código VBA; Si por alguna razón el número de columnas difiere en una de las hojas, los datos combinados completos no darán una imagen precisa. Se recomienda utilizar el mismo número de columnas. El código VBA agregará una nueva hoja al libro de trabajo y luego copiará y pegará los datos después de cada hoja sin sobrescribir.

Tomemos un ejemplo de 3 hojas, a saber, enero, febrero y marzo. A continuación se muestra la instantánea de estas hojas:

img1

img2

img3

Para combinar datos de todas las hojas en una hoja, debemos seguir los pasos a continuación para iniciar el editor de VB:

Haga clic en la pestaña Desarrollador. Desde el grupo Código, seleccione Visual Basic

img4

  • Copie el siguiente código en el módulo estándar

Sub CopyCurrentRegion()

Dim sh As Worksheet

Dim DestSh As Worksheet

Dim Last As Long

If SheetExists("Master") = True Then

MsgBox "The sheet Master already exist"

Exit Sub

End If

Application.ScreenUpdating = False

Set DestSh = Worksheets.Add

DestSh.Name = "Master"

For Each sh In ThisWorkbook.Worksheets

If sh.Name <> DestSh.Name Then

If sh.UsedRange.Count > 1 Then

Last = LastRow(DestSh)

sh.Range("A1").CurrentRegion.Copy DestSh.Cells(Last + 1, 1)

End If

End If

Next

Application.ScreenUpdating = True

End Sub

Sub CopyCurrentRegionValues()

Dim sh As Worksheet

Dim DestSh As Worksheet

Dim Last As Long

If SheetExists("Master") = True Then

MsgBox "The sheet Master already exist"

Exit Sub

End If

Application.ScreenUpdating = False

Set DestSh = Worksheets.Add

DestSh.Name = "Master"

For Each sh In ThisWorkbook.Worksheets

If sh.Name <> DestSh.Name Then

If sh.UsedRange.Count > 1 Then

Last = LastRow(DestSh)

With sh.Range("A1").CurrentRegion

DestSh.Cells(Last + 1, 1).Resize(.Rows.Count, _

.Columns.Count).Value = .Value

End With

End If

End If

Next

Application.ScreenUpdating = True

End Sub

Function LastRow(sh As Worksheet)

On Error Resume Next

LastRow = sh.Cells.Find(What:="*", _

After:=sh.Range("A1"), _

Lookat:=xlPart, _

LookIn:=xlFormulas, _

SearchOrder:=xlByRows, _

SearchDirection:=xlPrevious, _

MatchCase:=False).Row

On Error GoTo 0

End Function

Function Lastcol(sh As Worksheet)

On Error Resume Next

Lastcol = sh.Cells.Find(What:="*", _

After:=sh.Range("A1"), _

Lookat:=xlPart, _

LookIn:=xlFormulas, _

SearchOrder:=xlByColumns, _

SearchDirection:=xlPrevious, _

MatchCase:=False).Column

On Error GoTo 0

End Function

Function SheetExists(SName As String, _

Optional ByVal WB As Workbook) As Boolean

On Error Resume Next

If WB Is Nothing Then Set WB = ThisWorkbook

SheetExists = CBool(Len(Sheets(SName).Name))

End Function

Si te gustaron nuestros blogs, compártelo con tus amigos en Facebook. Y también puedes seguirnos en Twitter y Facebook.

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