Macro para ordenar datos automáticamente en Excel

Existen múltiples razones por las cuales nos conviene ordenar los datos de nuestras hojas, pero es aún más conveniente cuando dicho ordenamiento es aplicado de una manera automática. Hoy te mostraré cómo crear una macro para ordenar datos automáticamente en Excel.

Ordenar datos de una columna

En ocasiones tenemos datos en una sola columna que posteriormente serán utilizados para realizar una búsqueda o tal vez como el origen de una lista desplegable, pero cualquiera que sea el uso que le demos a los datos, lo que deseamos hacer es ordenar la columna conforme ingresamos nuevos registros. Considera los siguientes datos iniciales de nuestra hoja:

Macro para ordenar datos automáticamente en Excel

La macro que utilizaremos para ordenar la columna A de nuestra hoja será la siguiente:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
With Columns(1)
.Sort key1:=.Cells(1, 1)
End With
End If
End Sub

Para utilizar esta macro será suficiente con hacer clic derecho sobre el nombre de la hoja y seleccionar la opción Ver código lo cual abrirá el Editor de Visual Basic y podrás pegar el código. A continuación puedes ver el comportamiento de la macro:

Ordenar datos con macros en Excel

Ahora explicaré un poco sobre el funcionamiento de la macro recién creada. Es importante notar que hemos colocado el código como parte del evento Worksheet_Change el cual se ejecuta cada vez que se realiza un cambio a una celda de nuestra hoja. Precisamente por esa razón la línea 2 es una validación para saber si el cambio proviene de la columna 1 que es donde se encuentran nuestros datos.

Si el cambio fue en una celda de la columna A, entonces se ejecuta el método Sort que es el encargado de realizar el ordenamiento. Este método se ejecuta como parte del objeto Columns que está haciendo referencia a la columna 1 y el argumento key1 se utiliza para indicar el campo por el cual se realizará el ordenamiento. Para nuestro ejemplo este argumento no tiene mucha relevancia ya que solo tenemos una columna de datos, pero aún así es necesario especificarlo por lo que utilizo el objeto Cells para indicar la primera celda de la columna.

Ordenar datos de columna con encabezado

En el ejemplo anterior, los datos no tenían un encabezado, pero en caso de que lo tuviera debemos hacer una pequeña modificación a la macro para que mantenga fija la primera de la columna. El código a utilizar solamente varía en una línea y que es la siguiente:

.Sort key1:=.Cells(1, 1), Header:=xlYes

He agregado el argumento Header para indicar al método Sort que nuestros datos tienen un encabezado y de esta manera Excel realizará el ordenamiento sin considerar la primera celda de la columna:

Ordenar datos automáticamente en Excel

Ordenar datos de manera descendente

Hasta ahora hemos ordenado los datos automáticamente de manera ascendente (alfabéticamente), pero si necesitas hacer un ordenamiento descendente debes utilizar el argumento order1 para indicarlo. De nueva cuenta nuestra macro será similar a las anteriores y solamente cambiará la siguiente línea:

.Sort key1:=.Cells(1, 1), order1:=xlDescending

Al indicar el valor xlDescending podremos ordenar los datos de manera descendente:

Macro para ordenar alfabéticamente en Excel

Macro para ordenar datos de un rango

Por último te mostraré como ordenar los datos de varias columnas y para eso supondremos que tengo la siguiente información en la hoja:

Macro para ordenar columnas en Excel

Son los mismos nombres de nuestro primer ejemplo pero ahora he agregado la columna Apellido y los datos han sido ordenados alfabéticamente por dicha columna. La macro que mostraré a continuación ordenará los nuevos registros por la columna Apellido.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 Then
With Range("A:B")
.Sort key1:=.Cells(1, 2), Header:=xlYes
End With
End If
End Sub

El código es muy similar a las macros anteriores, pero tiene algunos cambios significativos. En primer lugar quiero detectar los cambios en la columna Apellido y por eso hago la comparación Target.Column = 2. Además el método Sort ahora se ejecuta sobre el rango A:B a través del objeto Range y el argumento key1 indica que el ordenamiento se realizará por la columna 2. Ahora observa el comportamiento de esta macro:

Cómo ordenar automáticamente en Excel con una macro

Solo resta que elijas el método adecuado y que implementes la macro para ordenar datos automáticamente en Excel. Descarga el libro de trabajo que utilizado en el desarrollo de este artículo y realiza pruebas adicionales por tu cuenta.

Artículos relacionados
Fórmula para ordenar datos en Excel