Excel ya tiene un par de formas de clasificar los datos rápidamente.
Puede ordenar fácilmente un conjunto de datos utilizando los iconos de clasificación de la cinta o el cuadro de diálogo de clasificación.
Entonces, ¿por qué necesitas saber cómo hacer esto usando VBA?
Saber cómo clasificar los datos usando VBA puede ser útil cuando se incluye como parte de su código. Por ejemplo, supongamos que obtienes un conjunto de datos diarios/semanales que necesitas formatear y ordenar en un orden específico.
Puedes crear una macro para hacer todo esto por ti con un solo clic. Eso te ahorrará mucho tiempo y esfuerzo cada vez que lo hagas.
Además, si se crean cuadros de mando de Excel, se puede llevar la capacidad de clasificación de Excel a un nuevo nivel al permitir al usuario clasificar los datos con sólo hacer doble clic en el encabezamiento (como se muestra a continuación).
Más adelante en este tutorial, explicaré cómo crearlo. Primero, aclaremos rápidamente lo básico.
Glosario
Comprendiendo el método Range.Sort en Excel VBA
Cuando clasificas usando VBA, necesitas usar el método Range.Sort en tu código.
El ‘Rango’ sería los datos que estás tratando de clasificar. Por ejemplo, si estás ordenando los datos en A1:A10, entonces «Rango» sería Rango («A1:A10»).
También puedes crear un rango con nombre y usarlo en lugar de las celdas de referencia. Por ejemplo, si creo un rango con nombre ‘DataRange’ para las celdas A1:A10, entonces también puedo usar Range(«DataRange»)
Con el método de clasificación, es necesario proporcionar alguna información adicional a través de los parámetros. A continuación se presentan los parámetros clave que necesita saber:
- Clave – aquí tienes que especificar la columna que quieres ordenar. Por ejemplo, si quieres ordenar la columna A, necesitas usar key:=Range(«A1»)
- Orden – aquí se especifica si se quiere la clasificación en orden ascendente o descendente. Por ejemplo, si quieres la clasificación en orden ascendente, usarás Order:=xlAscending
- Cabecera – aquí se especifica si su conjunto de datos tiene cabeceras o no. Si tiene cabeceras, la clasificación comienza desde la segunda fila del conjunto de datos, si no, comienza desde la primera fila. Para especificar que tus datos tienen cabeceras, usarás Header:=xlYes
Aunque estos tres son suficientes en la mayoría de los casos, puede leer más sobre los parámetros en este artículo.
Ahora veamos cómo usar el método Range.Sort en VBA para ordenar los datos en Excel.
Clasificación de una sola columna sin encabezamiento
Suponga que tiene una sola columna sin encabezamiento (como se muestra a continuación).
Puedes usar el siguiente código para ordenarlo en orden ascendente.
Sub SortDataWithoutHeader() Rango(«A1:A12»).Ordenar Clave1:=Rango(«A1»), Orden1:=xlAscendente, Cabecera:=xlNo End Sub
Note que he especificado el rango de datos manualmente como Rango («A1:A12»).
En caso de que haya cambios en los datos y se añadan o eliminen valores, puede utilizar el siguiente código que se ajusta automáticamente en función de las celdas rellenadas del conjunto de datos.
Sub SortDataWithoutHeader() Rango(«A1», Rango(«A1»).Fin(xlAbajo)).Ordenar Clave1:=Rango(«A1»), Orden1:=xlAscendente, Encabezado:=xlNo End Sub
Note que en lugar de Range(«A1:A12»), he usado,Range(«A1», Range(«A1»).End(xlDown)).
Esto comprobará la última celda rellenada consecutivamente en la columna y la incluirá en la clasificación. En caso de que haya espacios en blanco, sólo considerará los datos hasta la primera celda en blanco.
También puedes crear un rango con nombre y usar ese rango con nombre en lugar de las referencias de la celda. Por ejemplo, si el rango nombrado es el DataSet, su código sería ahora como se muestra a continuación.
Sub SortDataWithoutHeader() Rango(«DataRange»).Ordenar Clave1:=Rango(«A1»), Orden1:=xlAscendente, Cabecera:=xlNo End Sub
Ahora permítanme explicar rápidamente los parámetros utilizados en los ejemplos anteriores:
- Tecla1:=Rango(«A1») – Especificó A1 para que el código supiera qué columna ordenar.
- Orden1:=xlAscendente – Especificó la orden como xlAscendente. Si quieres que sea en orden descendente, usa xlDescendente.
- Header:= xlNo – Especificó que no hay cabeceras. Este es también el valor por defecto. Así que incluso si omites esto, tus datos serán ordenados teniendo en cuenta que no hay cabeceras.
¿Preguntándose dónde poner este código VBA y cómo ejecutar la macro? ¡Lee este tutorial!
Clasificar una sola columna con encabezamiento
En el ejemplo anterior, el conjunto de datos no tenía un encabezamiento.
Cuando los datos tienen encabezados, es necesario especificarlo en el código para que la clasificación pueda comenzar desde la segunda fila del conjunto de datos.
Supongamos que tienes un conjunto de datos como el que se muestra a continuación:
A continuación se muestra el código que clasificará los datos en orden descendente basado en las ventas de las tiendas.
Sub SortDataWithHeader() Rango(«DataRange»).Ordenar Clave1:=Rango(«C1»), Orden1:=xlDescendiendo End Sub
Note que he creado un rango con nombre – ‘DataRange’, y he usado este rango con nombre en el código.
Clasificación de múltiples columnas con cabeceras
Hasta ahora en este tutorial, hemos visto cómo ordenar una sola columna (con y sin encabezados).
Ahora, ¿qué pasa si quieres ordenar en base a múltiples columnas.
Por ejemplo, en el siguiente conjunto de datos, ¿qué pasa si quiero ordenar primero por el código del estado, y luego por la tienda.
<svg version="1.1" wi