Cómo ordenar los datos en Excel desde Visual Basic

Bloquear columnas en excel

Tenemos muchas opciones para ordenar nuestros datos en Excel. Lo puedes hacer con los botones de ordenación ascendente o descendente que encontrarás en la barra de herramientas, lo puedes hacer a través de la función ordenar de Excel, pero también lo puedes hacer con macros, que entre sus muchas funciones incluyen el orden. Es una operación muy fácil, lo único que hay que tener claro es cómo ordenar datos de Excel desde VBA y saber utilizar esas macros.

Ordenar datos de Excel con macros

Como siempre que trabajamos en Visual Basic, la clave del éxito de la operación están en aplicar la fórmula correcta, y para insertarla haremos click con el botón derecho del ratón sobre el nombre de la hoja y seleccionaremos la opción Ver Código. Entonces se abrirá el Editor de VBA y podrás pegar la fórmula de la macro en Visual Basic. La macro de Excel que veremos a continuación nos servirá para ordenar una columna de Excel.

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

Gracias a esta macro la columna de Excel se ordenará, y cada vez que añadamos un nuevo dato a la columna este se añadirá siguiendo el orden que hemos indicado en la macro, no en la última celda en blanco por mucho que lo escribamos allí. Eso explica por qué la línea 2 de la macro es una validación con el único objetivo de averiguar si el cambio procede de la columna 1, en la que hemos puesto los datos. Lógicamente, debes adaptar la macro al rango que quieres ordenar de tu documento.

Macros para ordenar datos

Pero esa no es la única fórmula existente para ordenar datos en Visual Basic. Por ejemplo, si vas a ordenar una columna con encabezado habrá que modificarla ligeramente indicando la existencia de ese encabezado si no queremos que se mezcle con el resto de los datos ordenados. En este caso, la macro será exactamente igual salvo en la línea 4, donde introduciremos el siguiente texto, en el que se indica la existencia del encabezado (Header).

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



Hasta ahora hemos visto dos macros para ordenar los datos por orden ascendente de Excel o alfabético, pero también existe la posibilidad de que tengamos que ordenarlos del revés, en orden descendente. Si es el caso, volveremos a modificar la línea 4 de la macro, añadiendo el valor xlDescending de forma que los datos aparezcan en el orden deseado. La línea 4 de la fórmula quedará así:

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

Finalmente hay que hablar de la macro para ordenar datos de un rango, ya que las tres fórmulas anteriores solo nos servían para ordenar los datos de una sola columna. Como verás, la fórmula es bastante parecida, pero incluye pequeños cambios como la ampliación del rango y las columnas que se indican. El argumento key1 indica que se ordenará siguiendo los datos de la columna 2, y como en el primer caso que hemos visto a medida que añadas datos a las columnas estos se irán ordenando.

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

  • ¿Te ha servido de ayuda?
  • No