Ordenar Hojas Alfabéticamente

Tengo un archivo de Excel pero con más de 50 hojas dentro del mismo.
Cada Hoja tiene su nombre y fueron hechas conforme se iban necesitando por lo tanto están desordenadas alfabéticamente .
Cuando abro el documento y quiero trabajar en una hoja me toma tiempo buscarla ya que son muchas y en desorden.
¿Cómo puedo ordenar todas las hojas alfabéticamente automáticamente sin moverlas de una en una?

1 Respuesta

Respuesta
1
Desde luego, si no quieres hacerlo manualmente, deberás recurrir a un código de Visual Basic for Applications (VBA)
Si estás de acuerdo, activa el editor de Visual Basic (presiona Alt+F11), inserta un nuevo módulo ("Insertar", "Módulo") y pega el siguiente código:
Sub OrdenaHojas()
Dim Act As Integer, Sig As Integer
For Act = 1 To Sheets.Count - 1
For Sig = Act + 1 To Sheets.Count
If UCase(Sheets(Act).Name) > UCase(Sheets(Sig).Name) Then
Sheets(Sig).Move Before:=Sheets(Act)
End If
Next Sig
Next Act
End Sub
Cierra el Editor de Visual Basic y graba el archivo (a modo de backup, pues a las acciones ejecutadas por macros no se las puede deshacer)
Esta rutina simple trabaja bien para un número relativamente bajo de hojas y dependiendo de la potencia de tu equipo.
Puedes probarla y ver qué pasa.
Si notas que está demorando mucho, convendrá que utilices algún método más elaborado para hace tal ordenamiento.
Por ejemplo, deberías recurrir a un método ya desarrollado de ordenamientos generales, conocido como "método de la burbuja"
La macro que sigue aplica tal método, cargando en una matriz los nombres de todas las hojas de tu libro. Luego ordena tal matriz y hace los arreglos de las hojas:
Sub BordenHojas()
Dim I As Integer
Dim sMySheets() As String
Dim iNumSheets As Integer
iNumSheets = Sheets.Count
Redim sMySheets(1 To iNumSheets)
For I = 1 To iNumSheets
sMySheets(I) = Sheets(I).Name
Next I
BubbleSort sMySheets
For I = 1 To iNumSheets
Sheets(sMySheets(I)).Move Before:=Sheets(I)
Next I
End Sub
Sub BubbleSort(sToSort() As String)
Dim Lower As Integer, Upper As Integer
Dim I As Integer, J As Integer, K As Integer
Dim Temp As String
Lower = LBound(sToSort)
Upper = UBound(sToSort)
For I = Lower To Upper - 1
K = I
For J = I + 1 To Upper
If sToSort(K) > sToSort(J) Then
K = J
End If
Next J
If I < K Then
Temp = sToSort(I)
sToSort(I) = sToSort(K)
sToSort(K) = Temp
End If
Next I
End Sub
Recuerda grabar el archivo *antes* de ejecutar esta macro
Por el tamaño de archivo que mencionas, probablemente este método te sea más eficiente
No es necesario que entiendas qué hace la macro, pero es un interesante ejercicio de programación.
----
Muy bien, esto se parece a lo que pediste.
Me queda solo recordarte que puedes acceder a cualquier hoja de tu libro (si tuviera muchas hojas, + de 15) tipeando la primera letra de la hoja deseada.
¿Cómo?
En la parte inferior izquierda de la hoja, cerca de las etiquetas hay cuatro flechas de navegación de hojas. Si das click derecho sobre ella te mostrará las primeras quince y una opción de "Más hojas..." al pie del menú.
Cuando lo seleccionas aparece un cuadro que muestra todas las hojas de tu libro.
Si presionas la primera letra de la hoja que deseas, marcará la primera que encuentre con esa letra. Si no fuera la que necesitas, continúa presionando la misma letra y marcará la siguiente que empiece con ella (obvio, si la hubiere).
Luego de encontrarla, simplemente presiona Enter (o Aceptar).
Tal vez, este método interno de MS Excel te evite tener que reordenar todas las hojas de tu libro.
De todos modos, ya tienes ambas soluciones.
Espero que te sirvan.
Muy buen fin de semana.
Fernando

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas