Ver video: Cómo dividir cada hoja de Excel en archivos separados
Si tiene un libro de trabajo de Excel con muchas hojas de trabajo, no hay una manera fácil de dividir cada una de estas hojas en archivos de Excel separados y guardarlos por separado.
Esto podría ser necesario cuando tiene hojas para diferentes meses o regiones o productos / clientes y desea obtener rápidamente un libro de trabajo separado para cada hoja (como un archivo de Excel o como PDF).
Si bien existe una forma manual de dividir hojas en libros de trabajo separados y luego guardarla, es ineficiente y propensa a errores.
En este tutorial, le daré un código VBA simple que puede usar para dividir rápidamente (en unos segundos) todas las hojas de trabajo en sus propios archivos separados y luego guardarlos en cualquier carpeta especificada.
Divida cada hoja de trabajo en un archivo de Excel separado
Suponga que tiene un libro de trabajo como se muestra a continuación donde tiene una hoja de trabajo para cada mes.
Para dividir estas hojas en un archivo de Excel separado, puede usar el siguiente código VBA:
'Código creado por Sumit Bansal de trumpexcel.com Sub SplitEachWorksheet () Dim FPath As String FPath = Application.ActiveWorkbook.Path Application.ScreenUpdating = False Application.DisplayAlerts = False For Each ws In ThisWorkbook.Sheets ws.Copy Application.ActiveWorkbook.SaveAs Nombre de archivo: = FPath & "\" & ws.Name & ".xlsx" Application.ActiveWorkbook.Close False Next Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub
Hay algunas cosas que debe asegurarse antes de usar el código VBA anterior:
- Cree una carpeta donde desee obtener todos los archivos resultantes.
- Guarde el archivo principal de Excel (que tiene todas las hojas de trabajo que desee como archivos separados) en esta carpeta.
Una vez que haya hecho esto, puede poner el código VBA anterior en el archivo y ejecutar el código.
El código anterior está escrito de manera que toma la ubicación de la carpeta utilizando la ruta del archivo (en el que se ejecuta el código). Por eso es importante guardar el archivo en la carpeta primero y luego usar este código.
¿Cómo funciona el código VBA? - El código anterior usa un bucle For Next simple que pasa por cada hoja de trabajo, crea una copia de la hoja de trabajo en un libro de Excel y luego guarda este libro de Excel en la carpeta especificada (que es la misma que tiene el archivo principal con todos los hojas).
A continuación se muestran los pasos para colocar este código VBA en el libro de trabajo de Excel (estos serán los mismos para todos los demás métodos que se muestran en este tutorial):
¿Dónde poner este código?
A continuación se muestran los pasos para colocar el código en el Editor de Visual Basic donde se puede ejecutar:
- Haga clic en la pestaña Desarrollador.
- En el grupo Código, haga clic en la opción Visual Basic. Esto abrirá el VB Editor. [También puede utilizar el método abreviado de teclado - ALT + F11]
- En el Editor de VB, haga clic con el botón derecho en cualquiera de los objetos del libro de trabajo en el que está trabajando.
- Pase el cursor sobre la opción Insertar
- Haga clic en Módulo. Esto insertará un nuevo módulo
- Haga doble clic en el objeto Módulo. esto abrirá la ventana de código para el módulo
- Copie el código VBA proporcionado anteriormente y péguelo en la ventana del código del módulo.
- Seleccione cualquier línea en el código y haga clic en el botón de reproducción verde en la barra de herramientas para ejecutar el código de macro VBA.
Los pasos anteriores dividirían instantáneamente las hojas de trabajo en archivos de Excel separados y los guardarían. Solo toma un segundo si tiene menos hojas de trabajo. En caso de que tenga muchos, puede llevar algún tiempo.
El nombre de cada archivo guardado es el mismo que el del nombre de la hoja que tenía en el archivo principal.
Dado que ha colocado un código VBA en el libro de Excel, debe guardarlo con un formato .XLSM (que es el formato habilitado para macros). Esto asegurará que la macro se guarde y funcione cuando abra este archivo a continuación.
Tenga en cuenta que he usado las líneas Application.ScreenUpdating = Falso y Application.DisplayAlerts = Falso en el código para que todo suceda en el backend y no vea cosas que suceden en su pantalla. Una vez que el código se ejecuta, divide las hojas y las guarda, las volvemos a convertir en VERDADERO.
Como práctica recomendada, se recomienda crear una copia de seguridad del archivo principal (que tiene las hojas que desea dividir). Esto asegurará que no pierda sus datos en caso de que algo salga mal o si Excel decide volverse lento o fallar.
Divida cada hoja de trabajo y guárdela como archivos PDF separados
En caso de que desee dividir las hojas de trabajo y guardarlas como archivos PDF en lugar de archivos de Excel, puede usar el siguiente código:
'Código creado por Sumit Bansal de trumpexcel.com Sub SplitEachWorksheet () Dim FPath As String FPath = Application.ActiveWorkbook.Path Application.ScreenUpdating = False Application.DisplayAlerts = False For Each ws In ThisWorkbook.Sheets ws.Copy Application.ActiveSheet.ExportAsFixedFormat Escriba: = xlTypePDF, Nombre de archivo: = FPath & "\" & ws.Name & ".xlsx" Application.ActiveWorkbook.Close False Next Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub
Cosas de las que debe asegurarse antes de usar este código:
- Cree una carpeta donde desee obtener todos los archivos resultantes.
- Guarde el archivo principal de Excel (que tiene todas las hojas de trabajo que desee como archivos separados) en esta carpeta.
El código anterior divide cada hoja en el archivo de Excel y lo guarda como PDF en la misma carpeta donde ha guardado el archivo principal de Excel.
Divida solo aquellas hojas de trabajo que contengan una palabra / frase en archivos de Excel separados
En caso de que tenga muchas hojas en un libro de trabajo y solo desee dividir solo aquellas hojas que tengan un texto específico, también puede hacerlo.
Por ejemplo, suponga que tiene un archivo de Excel en el que tiene datos de varios años y cada hoja del archivo tiene el número de año como prefijo. Algo como se muestra a continuación:
Ahora, supongamos que desea dividir todas las hojas para el período 2021-2022 y guardarlas como archivos de Excel separados. Para hacer esto, debe verificar de alguna manera el nombre de cada hoja de trabajo y solo las hojas que tienen el número 2021-2022 deben dividirse y guardarse, y el resto debe dejarse intacto.
Esto se puede hacer usando el siguiente código de macro VBA:
'Código creado por Sumit Bansal de trumpexcel.com Sub SplitEachWorksheet () Dim FPath As String Dim TexttoFind As String TexttoFind = "2020" FPath = Application.ActiveWorkbook.Path Application.ScreenUpdating = False Application.DisplayAlerts = False para cada ws en este libro de trabajo. Sheets If InStr (1, ws.Name, TexttoFind, vbBinaryCompare) 0 Entonces ws.Copy Application.ActiveWorkbook.SaveAs Filename: = FPath & "\" & ws.Name & ".xlsx" Application.ActiveWorkbook.Close False End If Next Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub
En el código anterior, he utilizado una variable TexttoFind, que se ha asignado a "2020" al principio.
El código de VBA luego usa el ciclo For Next en VBA para revisar cada hoja de trabajo y luego verificar el nombre de cada función INSTR de la hoja de trabajo. Esta función comprueba si el nombre de la hoja de trabajo tiene la palabra 2021-2022 o no. Si lo hace, devolverá un número de posición donde encuentra este texto (que es 2021-2022 en este caso).
Y si no encuentra el texto que buscamos, devuelve 0.
Esto se usa con la condición SI Entonces. Entonces, si el nombre de una hoja tiene la cadena de texto 2021-2022, se dividirá y se guardará como un archivo separado. Y si no tiene esta cadena de texto, la condición SI no se cumpliría y no pasaría nada.