Divida cada hoja de Excel en archivos separados

 

Si tiene un libro de trabajo de Excel con muchas hojas de trabajo, no hay ninguna manera fácil de dividir cada uno de estas hojas en ficheros Excel separados y guardarlos por separado.

Esto podría ser necesario cuando haga hojas para diferentes meses, regiones o productos / clientes y desea obtener rápidamente un libro de trabajo separado para cada hoja (como archivo Excel o PDF).

Aunque hay un modo manual de dividir hojas en libros de trabajo separados y luego guardarlos, es ineficiente y propenso a errores.

En este tutorial, os daré un código VBA sencillo que puede utilizar para dividir rápidamente (en pocos segundos) todas las hojas de trabajo en sus propios archivos separados y guardarlos en la carpeta especificada.

Divida cada hoja de trabajo en un fichero Excel separado

Supongamos que tiene un libro como se muestra a continuación, donde tiene una hoja de trabajo para cada mes.

Archivo Excel con varias hojas de cálculo para meses diferentes

Para dividir estas hojas en un fichero Excel diferente, puede utilizar el código VBA siguiente:

'Code Created by Sumit Bansal from 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 Filename:=FPath & "" & ws.Name & ".xlsx"
    Application.ActiveWorkbook.Close False
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

Hay algunas cosas que hay que asegurarse antes de utilizar el código VBA anterior:

  1. Cree una carpeta donde desee obtener todos los archivos resultantes.
  2. Guarde el archivo principal de Excel (que contiene todas las hojas de trabajo que desea como archivos separados) en esta carpeta.

Una vez lo haya hecho, puede poner el código VBA anterior al fichero y ejecutarlo.

El código anterior se escribe de manera que recoge la ubicación de la carpeta mediante la ruta del archivo (en el que se ejecuta el código). Por ello, es importante guardar primero el archivo en la carpeta y luego utilizar este código.

Cómo funciona el código VBA – El código anterior utiliza un sencillo bucle For Next que pasa por cada hoja de trabajo, crea una copia de la hoja de trabajo en un libro de trabajo de Excel y, a continuación, guarda este libro de trabajo de Excel en la carpeta especificada (que es la misma que tiene el archivo principal con todas las 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 el resto de 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 Visual Basic Editor donde se puede ejecutar:

Los pasos anteriores dividirían instantáneamente las hojas de trabajo en archivos Excel separados y los guarda. Sólo tardará un segundo si tiene menos número de hojas de cálculo. En caso de que hubiera mucho, puede tardar un poco.

El nombre de cada archivo guardado es el mismo que el nombre de la hoja que tenía en el archivo principal.

Habiendo colocado un código VBA en el libro de trabajo de Excel, debe guardarlo con un formato .XLSM (que es el formato habilitado para macros). Esto garantizará que la macro se guarde y funcione al abrir este archivo a continuación.

Tenga en cuenta que he utilizado las líneas Application.ScreenUpdating = False y Application.DisplayAlerts = False al código para que todo pase al dorsal y no vea las cosas que pasan en la pantalla. Una vez el código se ejecuta y divide las hojas y los guarda, los volvemos a TRUE.

Como práctica recomendada, se recomienda crear una copia de seguridad del archivo principal (que contiene las hojas que desea dividir). Esto garantizará que no pierda sus datos en caso de que nada vaya o si Excel decide hacerse más lento o fallar.

Divida cada hoja de trabajo y guárdelo como PDF separados

En caso de que desee dividir las hojas de cálculo y guardarlos como archivos PDF en lugar de los archivos Excel, puede utilizar el siguiente código:

'Code Created by Sumit Bansal from 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 Type:=xlTypePDF, Filename:=FPath & "" & ws.Name & ".xlsx"
    Application.ActiveWorkbook.Close False
Next

Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

Cosas que debe asegurarse antes de utilizar este código:

  1. Cree una carpeta donde desee obtener todos los archivos resultantes.
  2. Guarde el archivo principal de Excel (que contiene todas las hojas de trabajo que desea como archivos separados) en esta carpeta.

El código anterior divide cada hoja en el archivo Excel y guárdelo como PDF en la misma carpeta donde ha guardado el archivo principal de Excel.

Divida sólo aquellas hojas de trabajo que contienen una palabra / frase en ficheros Excel separados

En caso de que tenga muchas hojas en un libro y sólo desea dividir sólo aquellas hojas que tengan un texto específico, también puede hacerlo.

Por ejemplo, supongamos que tiene un archivo Excel donde puede obtener datos durante varios años y que 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 2020 y guardarlos como archivos Excel separados. Para ello, debe comprobar de alguna manera el nombre de cada hoja de cálculo y sólo se deben dividir y guardar aquellas hojas que tengan el número 2020 y el resto se debe dejar intacta.

Esto se puede hacer mediante el siguiente código de macro VBA:

'Code Created by Sumit Bansal from trumpexcel.com
Sub SplitEachWorksheet()
Dim FPath As String
Dim TexttoFind As String
TexttoFind = "2020"
FPath = Application.ActiveWorkbook.Path
Application.ScreenUpdating = False
Application.DisplayAlerts = False

For Each ws In ThisWorkbook.Sheets
    If InStr(1, ws.Name, TexttoFind, vbBinaryCompare) <> 0 Then
        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

Al código anterior, he utilizado una variable TexttoFind, que se ha asignado a “2020” al principio.

El código VBA utiliza el bucle For Next en VBA para pasar por cada hoja de trabajo y, a continuación, compruebe el nombre de cada función INSTR de la hoja de trabajo. Esta función comprueba si el nombre de la hoja de cálculo contiene o no la palabra 2020. Si lo hace, devolverá un número de posición donde encuentre este texto (que es en 2020 en este caso).

Y si no encuentra el texto que buscamos, devuelve 0.

Se utiliza con la condición IF Then. Por lo tanto, si un nombre de hoja tiene la cadena de texto 2020, se dividirá y se guardará como archivo independiente. Y si no tiene esta cadena de texto, la condición IF no se cumpliría y no pasaría nada.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *