Ordenar hojas alfabéticamente
Existen numerosos motivos para tomar todas nuestras hojas en un libro de Excel y ordenarlas de alguna manera lógica para nosotros; ordenar las hojas alfabéticamente es una elección conveniente cuando se trata de darle una presentación fácil de seguir al archivo.
En mi caso en particular muchas peticiones que me solicitan para realizar macros incluyen este requisito, es decir, que al final las hojas estén ordenas alfabéticamente. La última solicitud que elaboré organizaba la información de ciertos productos por hojas individuales, cuyos nombres eran precisamente el del producto, al final tenía que dejar lo hojas ordenas alfabéticamente.
Si tienes que ordenar las hojas de un libro de Excel alfabéticamente, y generalmente los haces de forma manual, entonces la macro a continuación es para ti, para que así lo realices automáticamente de ahora en adelante.
¡Afortunadamente!, este macro es bastante sencilla, contrario a lo que se podría pensar ….
.
Contexto: nuestro ejemplo
– Ejemplo: Proudctos de Limpeza
Visualicemos la siguiente situación: Tenemos un libro de Excel donde cada hoja tiene las estadísticas de un producto de limpieza, dicha hoja tiene como nombre la denominación del producto.
Bien, para facilitar la visualización de todas las hojas en el archivo de Excel, utilizamos el cuadro de diálogo Activar para observarlo de manera más cómoda (Para llamara este cuadro de diálogo pulse clic derecho encima de las flechas las cuales utilizamos para «desplazarnos» en las hojas – Parte inferior izquierda -) La imagen debajo presenta el cuadro de diálogo con los nombre de las distinas hojas.
Además, también se puede ver el orden en el que se encuentran las hojas
– ¿Organizarlos alfabéticamente de forma manual?
Tal vez en esta situación particular no sea muy tedioso porque tan solo son 17 hojas, pero imagina que constará de unas 50, 100, 200 o incluso más hojas o, por otra parte, tener que repetir este procedimiento con frecuencia.
– Hmm tedioso
Veamos cómoo sería la macro
Construcción paso a paso
– Creación de Procedimiento
Presionamos el atajo de teclado Alt + F11 estando en Excel, esto nos llevará al editor de visual basic, pulsemos dos veces clic sobre cualquier módulo de hoja
Creemos un procedimiento Sub llamado OrdenarHojasAlfabeticamente
Option Explicit
Public Sub OrdenarHojasAlfabeticamente()
End Sub
– (1) Declaración de variables
Ahora vamos a declarar dos variables de tipo entero (Integer) una la llamaremos: iHojaActual y a la segunda iHojaAnterior
- iHojaActual: tiene como objetivo guardar el número de índice de la hoja actual desde la cual se está iterando.
- iHojaAnterior: tiene como objetico guardar el número de índice de la hoja previa, esto respecto a la hoja desde la cual se está iterando
.
Por lo que tendríamos:
Option Explicit
Public Sub OrdenarHojasAlfabeticamente()
Dim iHojaActual As Integer
Dim iHojaAnterior As Integer
End Sub
YouTube Nota: Puedes estudiar todo lo relacionado con declaraciónde variables en el siguiente vídeo: Macros 06: Variables, Constantes y Otros Conceptos relacionados
– (2) Bucles: Anidación Bucles For … Next
Nuestro siguiente paso es crear un ciclo For .. Next que tenga como contador la varibale iHojaActual y que inicializaremos en 1 hasta recorrer todas las hojas del libro actual, para esto podemos utilizar la propiedad Count de la colección Sheet.
Sino recuerdas muy bien el ciclo For … Next la siguiente imagen puede dar unas ideas generales:
Colección Sheet: Este objeto contiene todas las hojas del libro de Excel sin importar de que tipo, puede ser hoja de cálculo, hoja de gráfico, etc.
Propiedad Count: La propiedad Count de la colección Sheet retornar un número que representa el número de hojas que tiene el libro de Excel
Dentro de el bucle anterior vamos a anidar otro bucle for … next que va a utilizar la variable iHojaAnterior como contador, y la cual inicializaremos en 1 también, hasta iHojaActual -1, quedando de la siguente manera nuestro código hasta el momento:
Option Explicit
Public Sub OrdenarHojasAlfabeticamente()
Dim iHojaActual As Integer
Dim iHojaAnterior As Integer
For iHojaActual =1 To Sheets.Count
For iHojaAnterior=1 To iHojaActual – 1
Next
Next
End Sub
YouTube Nota: Puedes estudiar el ciclo for … next de forma detallada en el siguiente vídeo: Macros 10: Bucles (For … Next) & (While … Wend)
– (3) Comparar el nombre de la hoja actual con la anterior
¡Comprar el nombre de la hoja actual con la hoja anterior!: Para no tener inconvenientes con mayúsculas y minúsculas vamos a utilizar la función Ucase de VBA la cual nos permite convertir toda una cadena de caracteres en mayúsculas, de esta manera podemos comprar si ningún problema si la hoja anterior es mayor que la hoja actual, esta línea de código especifica sería:
- UCase(Sheets(iHojaAnterior).Name) > UCase(Sheets(iHojaActual).Name)
.
– Ok, Pero … ¿Cómo así que un texto mayor a otro texto?
Puede sonar extraño al principio, pero en realidad estamos familiarizado con ello, por ejemplo, si te pido que ordenes esta lista de nombres: Samuel, Marcela, Ricardo. Básicamente es: Marcela, Ricardo y Samuel; es es exactamente el mayor organizar de esta manera (de la A a la Z) los valores de tipo texto.
Una vez hemos identificado si es mayor el nombre de la hoja anterior, entonces debemos mover la hoja actual después de la hoja anterior, de lo contrario que no haga nada, para esto simplemente utilizamos un control de flujo IF … End If, por lo que tendríamos hasta el momentocolección Sheet
Option Explicit
Public Sub OrdenarHojasAlfabeticamente()
Dim iHojaActual As Integer
Dim iHojaAnterior As Integer
For iHojaActual =1 To Sheets.Count
For iHojaAnterior=1 To iHojaActual – 1
If UCase(Sheets(iHojaAnterior).Name) > UCase(Sheets(iHojaActual).Name) Then
Sheets(iHojaActual).Move before:=Sheets(iHojaAnterior)
End If
Next
Next
End Sub
Exploremos un poco más esta línea de código: Sheets(iHojaActual).Move before:=Sheets(iHojaAnterior), básicamente estamos utilizando el método Move del objeto Sheets para desplazar la hoja actual justo antes de la hoja anterior, esto se terminamos de especificar con el parámetro before.
– (4) El ciclo
¡Estas líneas de código se repiten! cada iteración incrementa en 1 tanto la variabe iHojaActual como iHojaAnterior hasta la última hoja, después de que todas las iteraciones han sido ejecutadas la macro finaliza, por lo que en este punto deberiamos tener todas nuestras hojas ordenadas alfabéticamente
Cómo utilizar la macro: ordenasr hojas alfabéticamente
– El mejor lugar para almacenar esta macro:
El lugar más apropiado para guardar esta macro es el libro personal, con esto conseguiremos que la macro esté disponible en cualquier libro de Excel antiguo o nuevo que nuestro computador, esto es así porque el libro de macros personal se carga cada vez que se inicia un archivo en Excel, puedes seguir los siguientes pasos:
- Ir al editor de visual basic
- Clic en personal.xlsb
- Insertar un módulo
- Copie y pegue el código que desarrollamos anteriormente
Si el libro de macros personal no aparece significa que aún no existe, para ello primero debemos grabar una macro utilizando como destino el libro de macros personal
YouTube Nota: Puedes estudiar acerca del libro personal en el siguiente vídeo: Macros 04: Seguridad de macros, centro de confianza y el libro personal
Descargar archivo
– Descarga
Si lo deseas pueeds descargar el código y el ejemplo utilizado en este artículo en el siguiente enlace: 007 . Orndear hojas alfabéticamente
¿En cuáles situaciones ordenas las hojas tu libro de Excel alfabéticamente (A a la Z o incluso Z a la A)? comparte con nosotros tus experiencias, estaremos charlando.
– Eso es todo por mí el día de hoy, hasta la próxima oportunidad.