Combinar hojas de trabajo de muchos libros de trabajo (Microsoft Excel)
David tiene varios libros de trabajo que tienen varias hojas de trabajo en cada uno de ellos. Le gustaría combinar una determinada hoja de trabajo (solo una) de cada uno de estos libros de trabajo en un nuevo libro de trabajo. Sabe cómo hacer esto manualmente usando Mover o Copiar hoja, pero le gustaría una forma de hacerlo de manera más automática, particularmente porque puede haber muchos libros de trabajo que necesita «combinar» de esta manera.
Hay varias formas de abordar este problema, y todas implican el uso de macros. (Esto no debería sorprender, las macros están diseñadas para agilizar el trabajo de las tediosas tareas manuales).
La siguiente macro tiene un diseño simple; recorre todos los libros de trabajo abiertos actualmente y para cada libro de trabajo (excepto el libro de trabajo que contiene la macro) copie la hoja denominada «Hoja1» de ese libro de trabajo al libro de trabajo que contiene el código.
Sub CopySheets1() Dim wkb As Workbook Dim sWksName As String sWksName = "Sheet1" For Each wkb In Workbooks If wkb.Name <> ThisWorkbook.Name Then wkb.Worksheets(sWksName).Copy _ Before:=ThisWorkbook.Sheets(1) End If Next Set wkb = Nothing End Sub
Si desea que la macro tome una hoja de trabajo diferente a Sheet1, simplemente cambie el valor de la variable sWksName para reflejar el nombre de la hoja de trabajo deseada. Si no sabe cuál será el nombre de la hoja de trabajo, pero sabe que la hoja de trabajo para copiar siempre será la segunda hoja de trabajo en cada libro de trabajo, entonces puede usar esta variación en la macro:
Sub CopySheets2() Dim wkb As Workbook Dim sWksName As String For Each wkb In Workbooks If wkb.Name <> ThisWorkbook.Name Then wkb.Worksheets(2).Copy _ Before:=ThisWorkbook.Sheets(1) End If Next Set wkb = Nothing End Sub
Quizás el mayor inconveniente de los enfoques hasta ahora es que todos los libros de trabajo deben estar abiertos. Puede que esto no siempre sea factible. Por ejemplo, podría tener cien libros de trabajo diferentes en una carpeta y necesitaría combinar una hoja de trabajo de cada uno de ellos. Abrir cien libros de trabajo, aunque es técnicamente posible, probablemente no sea práctico para la mayoría de las personas. En ese caso, debe adoptar un enfoque diferente.
La siguiente macro, CombineSheets, es de naturaleza interactiva. Le pide varias piezas de información y luego agrega hojas de trabajo al libro de trabajo según sus respuestas. Primero solicita una ruta a las hojas de trabajo (no incluya la barra inclinada) y luego un patrón para usar en los libros de trabajo. Puede especificar un patrón de libro de trabajo utilizando los comodines regulares de asterisco () y signo de interrogación (?). Por ejemplo, un patrón de coincidiría con todos los libros de trabajo, mientras que un patrón de Budget20 ??
solo devolvería libros de trabajo que tengan «Budget20» al principio y dos caracteres cualesquiera después de eso.
Sub CombineSheets() Dim sPath As String Dim sFname As String Dim wBk As Workbook Dim wSht As Variant Application.EnableEvents = False Application.ScreenUpdating = False sPath = InputBox("Enter a full path to workbooks") ChDir sPath sFname = InputBox("Enter a filename pattern") sFname = Dir(sPath & "\" & sFname & ".xl*", vbNormal) wSht = InputBox("Enter a worksheet name to copy") Do Until sFname = "" Set wBk = Workbooks.Open(sFname) Windows(sFname).Activate Sheets(wSht).Copy Before:=ThisWorkbook.Sheets(1) wBk.Close False sFname = Dir() Loop ActiveWorkbook.Save Application.EnableEvents = True Application.ScreenUpdating = True End Sub
Cuando ejecuta la macro, también se le solicita el nombre de una hoja de trabajo para copiar de cada libro de trabajo correspondiente. Proporcione un nombre y, si existe dicha hoja de trabajo en el libro de trabajo, se copiará al principio del libro de trabajo actual.
Si prefiere no crear su propia macro para combinar hojas de trabajo, puede considerar el complemento RDBMerge creado por Excel MVP Ron de Bruin.
Puedes encontrarlo gratis aquí:
http://www.rondebruin.nl/win/addins/rdbmerge.htm
_Nota: _
Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.
link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador]
.
ExcelTips es su fuente de formación rentable en Microsoft Excel.
Este consejo (7425) se aplica a Microsoft Excel 97, 2000, 2002 y 2003.