¿Tiene un big data en una hoja de Excel y necesita distribuir esa hoja en varias hojas, según algunos datos en una columna? Esta tarea muy básica pero requiere mucho tiempo.

006

Por ejemplo, tengo estos datos. Estos datos tienen una columna denominada Fecha, Escritor y Título. La columna del escritor tiene el nombre del escritor del título respectivo. Quiero obtener los datos de cada escritor en hojas separadas.

007

Para hacer esto manualmente, tengo que hacer lo siguiente:

  1. Filtrar un nombre. Copie los datos filtrados. Agrega una hoja. Pega los datos. Cambie el nombre de la hoja. Repita los 5 pasos anteriores para cada uno.

En este ejemplo, solo tengo tres nombres. Imagínese si tuviera cientos de nombres.

¿Cómo dividiría los datos en diferentes hojas? Tomará mucho tiempo y también te agotará.

Para automatizar el proceso anterior de dividir una hoja en varias hojas, siga estos pasos.

Presione Alt + F11. Esto abrirá VB Editor para Excel Agregar un nuevo módulo * Copiar debajo del código en el módulo.

Sub SplitIntoSheets()

With Application

.ScreenUpdating = False

.DisplayAlerts = False

End With

ThisWorkbook.Activate

Sheet1.Activate

'clearing filter if any

On Error Resume Next

Sheet1.ShowAllData

On Error GoTo 0

Dim lsrClm As Long

Dim lstRow As Long

'counting last used row

lstRow = Cells(Rows.Count, 1).End(xlUp).Row

Dim uniques As Range

Dim clm As String, clmNo As Long

On Error GoTo handler

clm = Application.InputBox("From which column you want create files" & vbCrLf & "E.g. A,B,C,AB,ZA etc.")

clmNo = Range(clm & "1").Column

Set uniques = Range(clm & "2:" & clm & lstRow)

'Calling Remove Duplicates to Get Unique Names

Set uniques = RemoveDuplicates(uniques)

Call CreateSheets(uniques, clmNo)

With Application

.ScreenUpdating = True

.DisplayAlerts = True

.AlertBeforeOverwriting = True

.Calculation = xlCalculationAutomatic

End With

Sheet1.Activate

MsgBox "Well Done!"

Exit Sub

Data.ShowAllData

handler:

With Application

.ScreenUpdating = True

.DisplayAlerts = True

.AlertBeforeOverwriting = True

.Calculation = xlCalculationAutomatic

End With

End Sub

Function RemoveDuplicates(uniques As Range) As Range

ThisWorkbook.Activate

Sheets.Add

On Error Resume Next

ActiveSheet.Name = "uniques"

Sheets("uniques").Activate

On Error GoTo 0

uniques.Copy

Cells(2, 1).Activate

ActiveCell.PasteSpecial xlPasteValues

Range("A1").Value = "uniques"

Dim lstRow As Long

lstRow = Cells(Rows.Count, 1).End(xlUp).Row

Range("A2:A" & lstRow).Select

ActiveSheet.Range(Selection.Address).RemoveDuplicates Columns:=1, Header:=xlNo

lstRow = Cells(Rows.Count, 1).End(xlUp).Row

Set RemoveDuplicates = Range("A2:A" & lstRow)

End Function

Sub CreateSheets(uniques As Range, clmNo As Long)

Dim lstClm As Long

Dim lstRow As Long



For Each unique In uniques

Sheet1.Activate

lstRow = Cells(Rows.Count, 1).End(xlUp).Row

lstClm = Cells(1, Columns.Count).End(xlToLeft).Column

Dim dataSet As Range

Set dataSet = Range(Cells(1, 1), Cells(lstRow, lstClm))

dataSet.AutoFilter field:=clmNo, Criteria1:=unique.Value

lstRow = Cells(Rows.Count, 1).End(xlUp).Row

lstClm = Cells(1, Columns.Count).End(xlToLeft).Column

Debug.Print lstRow; lstClm

Set dataSet = Range(Cells(1, 1), Cells(lstRow, lstClm))

dataSet.Copy

Sheets.Add

ActiveSheet.Name = unique.Value2

ActiveCell.PasteSpecial xlPasteAll

Next unique

End Sub

Cuando ejecute el procedimiento SplitIntoSheets (), la hoja se dividirá en varias hojas, según la columna dada. Puede agregar un botón en la hoja y asignarle esta macro.

Cómo funciona

El código anterior tiene dos procedimientos y una función. Dos procedimientos son SplitIntoSheets (), CreateSheets (únicos como rango, clmNo como largo) y una función es Eliminar duplicados (únicos como rango) como rango. El primer procedimiento es SplitIntoSheets (). Este es el procedimiento principal. Este procedimiento establece las variables y RemoveDuplicates para obtener nombres únicos de la columna dada y luego pasa esos nombres a CreateSheets para crear hojas.

RemoveDuplicates toma un argumento que es rango que contiene nombre.

Elimina los duplicados de ellos y devuelve un objeto de rango que contiene nombres únicos.

Ahora se llama CreateSheets. Se necesitan dos argumentos. Primero los nombres únicos y segundo la columna no. a partir de los cuales se ajustarán los datos. Ahora CreateSheets toma cada nombre de los únicos y filtra el número de columna dado por cada nombre. Copia los datos filtrados, agrega una hoja y pega los datos allí. Y sus datos se dividen en diferentes hojas en segundos.

Puedes descargar el archivo aquí.

Dividir en hojas

Cómo utilizar el archivo:

  • Copie sus datos en Sheet1. Asegúrese de que comience desde A1.

008

Haga clic en el botón Dividir en hojas * Ingrese la letra de la columna de la que desea dividir. Haga clic en Aceptar.

009

  • Verá un mensaje como este. Tu hoja está dividida.

0011

0013

Espero que el artículo sobre la división de datos en hojas separadas le haya resultado útil. Si tiene alguna duda sobre esta o sobre cualquier otra característica de Excel, no dude en preguntar en la sección de comentarios a continuación.

Descargar archivo: