Cómo duplicar una hoja en Excel con VBA

  • Compartir Este
Michael Brown

El tutorial proporciona una colección de macros para duplicar hojas en Excel: copiar y renombrar en función del valor de la celda, copiar varias hojas, copiar una hoja de cálculo activa en otro archivo sin abrirla, y mucho más.

Copiar hojas manualmente en Excel es bastante rápido y sencillo... si se realiza sólo una o dos veces. Duplicar varias hojas varias veces es aburrido y lleva mucho tiempo. En esta página, encontrará un puñado de macros útiles para automatizar esta tarea.

    Excel VBA para copiar la hoja a un nuevo libro

    Esta sencilla macro de una línea hace exactamente lo que su nombre indica: copia la hoja activa en un nuevo libro de trabajo.

    Public Sub CopySheetToNewWorkbook() activeSheet.Copy End Sub

    Copiar varias hojas en Excel con VBA

    Si desea copiar varias hojas del libro activo a uno nuevo, seleccione todas las hojas que le interesen y ejecute esta macro:

    Public Sub CopySelectedSheets() ActiveWindow.SelectedSheets.Copy End Sub

    Excel VBA para copiar la hoja a otro libro

    Dependiendo de dónde desee insertar la hoja copiada, utilice una de las siguientes macros.

    Copiar hoja al principio de otro libro

    Esta macro copia la hoja activa antes que todas las demás hojas de trabajo en el archivo de destino, Libro1 Para copiar en otro archivo, sustituya "Libro1.xlsx" por el nombre completo del libro de trabajo de destino.

    Public Sub CopySheetToBeginningAnotherWorkbook() activeSheet.Copy Before:=LibrosDeTrabajo("Libro1.xlsx" ).Hojas(1) End Sub

    Copiar hoja al final de otro libro

    Este fragmento de código duplica la hoja de cálculo activa y coloca la copia al final de Libro1 De nuevo, recuerde sustituir "Libro1.xlsx" por el nombre del libro de destino.

    Public Sub CopySheetToEndAnotherWorkbook() activeSheet.Copy After:=LibrosDeTrabajo( "Libro1.xlsx" ).Hojas(LibrosDeTrabajo( "Libro1.xlsx" ).HojasDeTrabajo.Count) End Sub

    Nota: para que las macros funcionen, el libro de trabajo de destino debe estar guardado en el disco duro o en la red.

    Copiar hoja a un libro seleccionado

    Para poder copiar la hoja actual en cualquier libro abierto, puede crear un UserForm (llamado FormularioUsuario1 ) con un ListBox control ( llamado ListBox1 ) y dos botones:

    A continuación, haga doble clic en el formulario y pegue el código siguiente en la ventana Código:

    Public SelectedWorkbook As String Private Sub UserForm_Initialize() SelectedWorkbook = "" ListBox1.Clear For Each wbk In Application.Workbooks ListBox1.AddItem (wbk.Name) Next End Sub Private Sub CommandButton1_Click() If ListBox1.ListIndex> -1 Then SelectedWorkbook = ListBox1.List(ListBox1.ListIndex) End If Me.Hide End Sub Private Sub CommandButton2_Click() SelectedWorkbook = "" Me.Hide EndSub

    Con el UserForm en su lugar, puede utilizar una de las siguientes macros para copiar la hoja activa en el libro de trabajo de su elección.

    Copie la hoja en el inicio del libro seleccionado :

    Public Sub CopySheetToBeginningAnotherWorkbook() Load UserForm1 UserForm1.Show If (UserForm1.SelectedWorkbook "" ) Then activeSheet.Copy Before:=Workbooks(UserForm1.SelectedWorkbook).Sheets(1) End If Unload UserForm1 End Sub

    Copie la hoja en el fin del libro seleccionado :

    Public Sub CopySheetToEndAnotherWorkbook() Load UserForm1 UserForm1.Show If (UserForm1.SelectedWorkbook "" ) Then activeSheet.Copy After:=Workbooks( _ UserForm1.SelectedWorkbook).Sheets( _ Workbooks(UserForm1.SelectedWorkbook). _ Worksheets.Count) End If Unload UserForm1 End Sub

    Cuando se ejecuta en Excel, la macro le mostrará una lista de todos los libros abiertos en ese momento. Seleccione el que necesite y haga clic en Aceptar:

    Macro Excel para copiar hoja y renombrarla

    Cuando se copia una hoja en Excel, la réplica recibe un nombre con el formato por defecto como Hoja1 (2) Las siguientes macros pueden ahorrarle la molestia de cambiar manualmente el nombre por defecto.

    Este código duplica la hoja de cálculo activa, nombra la copia como "Hoja de prueba" (puede sustituirlo por cualquier otro nombre que desee) y coloca la hoja copiada al final del libro de trabajo actual.

    Public Sub CopySheetAndRenamePredefined() activeSheet.Copy After:=Worksheets(Sheets.Count) On Error Resume Next activeSheet.Name = "Hoja de Prueba" End Sub

    Permitir al usuario especificar el nombre de la hoja copiada utiliza este código:

    Public Sub CopySheetAndRename() Dim newName As String On Error Resume Next newName = InputBox( "Enter the name for the copied worksheet" ) If newName "" Then activeSheet.Copy After:=Worksheets(Sheets.Count) On Error Resume Next activeSheet.Name = newName End If End Sub

    Al ejecutarse, la macro muestra el siguiente cuadro de entrada, en el que se escribe el nombre deseado y se pulsa OK:

    Macro Excel para copiar hoja y renombrarla en función del valor de la celda

    En algunas situaciones, puede ser más conveniente nombrar una copia con un valor de celda específico, por ejemplo, un encabezado de columna. Para ello, basta con tomar el código anterior y suministrar el valor de la celda celda seleccionada actualmente Al igual que en el ejemplo anterior, la copia se colocará al final del libro activo.

    Lo más complicado sería que los usuarios seleccionaran siempre la celda correcta antes de ejecutar la macro :)

    Public Sub CopySheetAndRenameByCell() Dim newName As String On Error Resume Next newName = InputBox( "Enter the name for the copied worksheet" , "Copy worksheet" , ActiveCell.Value) If newName "" Then activeSheet.Copy After:=Worksheets(Sheets.Count) On Error Resume Next activeSheet.Name = newName End If End Sub

    También puede codificar la dirección de la celda por la que debe nombrarse la copia, la celda A1 en el código siguiente. Para nombrar la hoja de cálculo copiada basándose en otra celda, sustituya A1 por una referencia de celda apropiada.

    Public Sub CopySheetAndRenameByCell2() Dim wks As Worksheet Set wks = activeSheet activeSheet.Copy After:=Worksheets(Sheets.Count) If wks.Range( "A1" ).Value "" Then On Error Resume Next activeSheet.Name = wks.Range( "A1" ).Value End If wks.Activate End Sub

    Macro para copiar una hoja de cálculo en un libro cerrado

    Esta macro copia la hoja activa al final de un libro de trabajo cerrado. El nombre de otro libro de trabajo no se especifica en el código - la macro abrirá la ventana estándar del Explorador de Windows y le permitirá elegir cualquier archivo de destino:

    Después de seleccionar el archivo y hacer clic en Abrir la macro copiará la hoja activa y cerrará automáticamente el libro de trabajo de destino.

    Public Sub CopySheetToClosedWorkbook() Dim fileName Dim closedBook As Workbook Dim currentSheet As Worksheet fileName = Application.GetOpenFilename( "Excel Files (*.xlsx), *.xlsx" ) If fileName False Then Application.ScreenUpdating = False Set currentSheet = Application.activeSheet Set closedBook = Workbooks. Open (fileName) currentSheet.Copy After:=closedBook.Sheets(closedBook.Worksheets.Count)closedBook. Close ( True ) Application.ScreenUpdating = True End If End Sub

    Excel VBA para copiar hoja de otro libro sin abrir

    Esta macro permite copiar una hoja de cálculo de otro archivo Excel sin abrirlo. La hoja copiada se insertará al final del libro actual.

    Sólo recuerda hacer un par de sustituciones en el código:

    • C:\Users\XXX\Documents\Target_Book.xlsx debe cambiarse por la ruta real y el nombre del libro de trabajo del que desea copiar una hoja.
    • Hoja1 debe sustituirse por el nombre de la hoja que desea copiar.
    Public Sub CopySheetFromClosedWorkbook() Dim sourceBook As Workbook Application.ScreenUpdating = False Set sourceBook = Workbooks. Open ( "C:\Users\XXX\Documents\Target_Book.xlsx" ) sourceBook.Sheets( "Sheet1" ).Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) sourceBook. Close Application.ScreenUpdating = True End Sub

    Excel VBA para duplicar la hoja varias veces

    A veces, puede que necesites duplicar la misma hoja más de una vez, por ejemplo para probar diferentes fórmulas en el mismo conjunto de datos. Esto se puede hacer fácilmente con la siguiente macro.

    Public Sub DuplicateSheetMultipleTimes() Dim n As Integer On Error Resume Next n = InputBox( "¿Cuántas copias de la hoja activa quiere hacer?" ) If n>= 1 Then For numtimes = 1 To n activeSheet.Copy After:=ActiveWorkbook.Sheets(Worksheets.Count) Next End If End Sub

    Abra la hoja original, ejecute la macro, especifique cuántas copias de la hoja activa desea hacer y haga clic en OK :

    Cómo duplicar hojas en Excel con VBA

    Para copiar una hoja en Excel con una de las macros anteriores, puede insertar el código VBA en su propio libro o ejecutar una macro de nuestro libro de ejemplo.

    Cómo añadir una macro al libro de trabajo

    Para insertar el código en su libro de trabajo, siga estos pasos:

    1. Abra la hoja de cálculo que desea copiar.
    2. Pulse Alt + F11 para abrir el Editor de Visual Basic.
    3. En el panel izquierdo, haga clic con el botón derecho del ratón en EsteLibroDeTrabajo y, a continuación, haga clic en Inserte > Módulo .
    4. Pegue el código en la ventana Código.
    5. Pulse F5 para ejecutar la macro.

    Para obtener instrucciones detalladas paso a paso, consulte Cómo insertar código VBA en Excel.

    Cómo ejecutar una macro desde nuestro libro de trabajo de ejemplo

    Alternativamente, puede descargar nuestro libro de ejemplo para Duplicar Hojas Excel y ejecutar el código desde allí.

    El libro de trabajo de ejemplo contiene las siguientes macros:

    CopiarHojaEnNuevoLibro - copia la hoja de cálculo actual en un nuevo libro de trabajo.

    CopiarHojasSeleccionadas - copia varias hojas seleccionadas en un nuevo libro de trabajo.

    CopySheetToBeginningAnotherWorkbook - copia la hoja activa al principio de otro libro de trabajo.

    CopiarHojaParaFinalizarOtroLibro - copia la hoja activa al final de otro archivo Excel.

    CopySheetAndRename - duplica la hoja actual, le cambia el nombre especificado por el usuario y coloca la copia después de todas las demás hojas del libro de trabajo actual.

    CopySheetAndRenamePredefined - duplica la hoja activa, da un nombre codificado a la copia y la coloca al final del libro de trabajo actual.

    CopySheetAndRenameByCell - hace una copia de la hoja activa y le cambia el nombre en función del valor de la celda seleccionada.

    CopiarHojaYRenombrarPorCelda2 - copia la hoja activa y le cambia el nombre basándose en la dirección de la celda codificada.

    CopySheetToClosedWorkbook - permite copiar una hoja en un libro cerrado.

    CopySheetFromClosedWorkbook - permite copiar una hoja de otro archivo Excel sin abrirlo.

    DuplicarHojaVariasVeces - le permite duplicar una hoja en Excel varias veces.

    Para ejecutar la macro en tu Excel, sólo tienes que hacer lo siguiente:

    1. Abra el libro de trabajo descargado y active el contenido si se le solicita.
    2. Abra su propio libro de trabajo y navegue hasta la hoja que desea copiar.
    3. En la hoja de cálculo, pulse Alt + F8 , seleccione la macro que le interese y haga clic en Ejecutar .

    Así es como se puede duplicar una hoja en Excel con VBA. Gracias por leer y ¡espero verte en nuestro blog la semana que viene!

    Michael Brown es un entusiasta de la tecnología dedicado y apasionado por simplificar procesos complejos utilizando herramientas de software. Con más de una década de experiencia en la industria de la tecnología, ha perfeccionado sus habilidades en Microsoft Excel y Outlook, así como en Google Sheets y Docs. El blog de Michael está dedicado a compartir su conocimiento y experiencia con otros, brindando consejos y tutoriales fáciles de seguir para mejorar la productividad y la eficiencia. Ya sea un profesional experimentado o un principiante, el blog de Michael ofrece información valiosa y consejos prácticos para aprovechar al máximo estas herramientas de software esenciales.