Tabla de contenido
Saber cómo ordenar rangos utilizando VBA en Excel supone un ahorro de tiempo y esfuerzo en nuestros cálculos diarios. Aunque Excel proporciona una función de ordenación por defecto. Utilizando la función Rango.Ordenar método se accede a varios parámetros para ordenar un conjunto de datos con más opciones de lo habitual.
Descargar el cuaderno de prácticas
Descárgate este cuaderno de prácticas para ejercitarte mientras lees este artículo.
Ordenar Rango en Excel.xlsmIntroducción a la sentencia Range.Sort en Excel VBA
Objetivo : Para ordenar un rango de datos de celdas.
Sintaxis:
expresión Ordenar ( Clave1 , Pedido1 , Clave2 , Tipo , Pedido2 , Clave3 , Pedido3 , Cabecera , PedidoPersonalizado , MatchCase , Orientación , SortMethod , DatosOpción1 , DatosOpción2 , DatosOpción3 )
Aquí, el expresión representa un Gama es decir, una celda, una fila, una columna o una selección de celdas.
Argumentos:
Tenemos que proporcionar tres parámetros principales para el Rango.Ordenar método. Son-
Clave - El rango de celdas de una o varias columnas que necesitamos ordenar.
Pida - Especifique el orden de clasificación, ascendente o descendente.
Cabecera - Declara si las columnas a ordenar tienen cabecera o no.
6 Ejemplos para Ordenar Rango en Excel VBA
En este artículo, utilizaremos como conjunto de datos una lista de nombres de personas con su fecha de nacimiento y edad. Aplicaremos diferentes métodos para ordenar el conjunto de datos. Repasemos el artículo y practiquemos para dominar estos métodos.
1. Ordenar rango de una sola columna usando Excel VBA
En este ejemplo ordenar personas de más antiguo a el más joven Sigamos los pasos para utilizar la función Gama . Ordenar método que ordenar el Columna de edad en orden descendente .
Pasos:
- Ir a la Ficha Desarrollador en el Cinta Excel a haga clic en en el Visual Basic
- A continuación, elija la opción Opción de módulo del Ficha Insertar para abrir un nuevo módulo .
Ahora, pondremos nuestro código en ordenar el Edad rango de columnas.
1.1 Columna con cabecera
Ponga el siguiente código en el editor de código visual.
Sub SortRange() Range("D4:D11").Sort Key1:=Range("D4"), _ Order1:=xlDescending, _ Header:=xlYes End Sub
Pulse F5 o haga clic en el botón Ejecutar para ejecutar el código.
Explicación:
En el código anterior, ponemos
Expresión (objeto Range)=Range("D4:D11"); el columna de edad con un cabecera en celda D4 y valores en D5:D11.
Clave = Rango("D4"); el clave para clasificar.
Orden= xlDescendente; como queremos ordenar valores de mayor a más bajo fijamos el orden de clasificación como descendente.
Cabecera =xlSí; En la siguiente captura de pantalla, podemos ver que el conjunto de datos tiene un cabecera para cada uno de los columnas.
1.2 Columna sin cabecera
Ponga el siguiente código en el editor de código visual.
Sub SortRange() Range("D4:D10").Sort Key1:=Range("D4"), _ Order1:=xlDescending, _ Header:=xlNo End Sub
Pulse F5 o haga clic en el botón Ejecutar para ejecutar el código.
Explicación:
En el código anterior, ponemos
Expresión (objeto Range)=Range("D4:D10"); el columna de edad sin cabecera tiene valores en D4:D10.
Clave = Rango("D4"); el clave para clasificar.
Orden= xlDescendente; como queremos ordenar valores de mayor a más bajo fijamos el orden de clasificación como descendente.
Cabecera =xlNo; En la siguiente captura de pantalla, podemos ver que el conjunto de datos no tiene de cabeza.
Contenido relacionado: Cómo ordenar columnas en Excel sin mezclar datos (3 maneras)
2. Uso de código VBA para ordenar rango de columnas múltiples en Excel
Para mostrar la clasificación en varias columnas necesitamos modificar nuestra conjunto de datos un poco. insertado algunos nuevo filas En el conjunto de datos modificado, las filas 7, 8, y 9 tienen la mismo valores para el fecha de nacimiento y edades pero tres nombres diferentes . nombres son no en cualquier pedido específico de ascender o descender.
En este ejemplo, ordenaremos los nombres en orden ascendente Vamos a ejecutar el siguiente código en el editor de Visual Basic:
Sub SortRange() Range("B4:D12").Sort Key1:=Range("D4"), _ Order1:=xlDescending, _ Key2:=Range("B4"), _ Order2:=xlAscending, _ Header:=xlYes End Sub
Explicación:
En la captura de pantalla anterior, podemos ver que las edades en columna D son clasificado en descendente orden. Añadimos dos parámetros más en nuestro código anterior.
Clave2: =Rango("B4") la tecla para ordenar los nombres.
Orden2: =xlAscendente El pedir para nombres en corto .
Como resultado, vemos que el nombres en filas 7, 8 y 9 son ahora alfabéticamente clasificado en ascendente orden.
En la siguiente captura de pantalla, cambiamos el valor de la Parámetro Order2 a ordenar el nombres en descendente orden.
Más información: Cómo Ordenar Varias Columnas en Excel (5 Métodos Rápidos)
3. Haga doble clic en el encabezado para ordenar rango de columnas en Excel VBA
La función de ordenación por defecto de Excel no permite ordenar valores de una columna por doble clic en el encabezado de columna Pero utilizando código VBA podemos hacerlo realidad. Ilustremos esta funcionalidad aplicando el siguiente código.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim KeyRange As Range Dim ColCount As Integer ColCount = Range("A1:C8").Columns.Count Cancel = False If Target.Row = 1 And Target.Column <= ColCount Then Cancel = True Set KeyRange = Range(Target.Address) Range("A1:C8").Sort Key1:=KeyRange, Header:=xlYes End If End Sub
En este código, utilizamos la función Evento BeforeDoubleClick a desactivar el habitual doble - haga clic en que es poner en marcha el edición modo de la célula. Con este evento en marcha, si doble - haga clic en en cualquiera de los encabezados de columna ordena los datos de las columnas en orden ascendente .
Más información: VBA para ordenar columnas en Excel (4 métodos)
Lecturas similares:
- Cómo añadir un botón de ordenación en Excel (7 métodos)
- Ordenar Lista Única en Excel (10 Métodos Útiles)
- Cómo utilizar la función Ordenar en Excel VBA (8 ejemplos adecuados)
- Ordenar Duplicados en Excel (Columnas y Filas)
- Ordenación aleatoria en Excel (Fórmulas + VBA)
4. Ordenar Rango de Columnas Basado en el Color de Fondo Usando Excel VBA
Podemos ordenar un rango de celdas en una columna basado en en su color de fondo Para ello, necesitamos añada a parámetro llamado SortOn que tiene un valor xlSortOnCellColor Para demostrar la ordenación, primero establecemos diferentes colores de fondo a las filas de nuestro conjunto de datos .
A continuación, en el editor de código de Visual Basic copia el siguiente código y pulse F5 para ejecutarlo.
Sub SortRangeByBackgroundColor() ActiveWorkbook.Worksheets("background").Sort.SortFields.Add2 Key:=Range("B4"), _ SortOn:=xlSortOnCellColor, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("background").Sort .SetRange Range("B4:D10") .Apply End With End Sub
En la siguiente captura de pantalla, podemos ver el conjunto de datos ordenados en función de su color de fondo.
Explicación:
- En este ejemplo, hemos llamado al hoja de trabajo " fondo ". Así, en el código, ponemos " fondo "como nuestro nombre de la hoja de cálculo activa.
- Fijamos B4 como el clave y B4:D10 como el gama El código ordenará los datos en función de la clave.
- Como no especificamos el parámetro de cabecera el código se ejecuta por defecto sin cabecera.
- Fijamos el pedir como parámetro ascendente, así que ordenó los datos de menor a mayor valor .
Más información: Cómo Ordenar por Color en Excel (4 Criterios)
5. Aplicar Código VBA para Ordenar Rango de Columnas Basado en el Color de Fuente
Aplicando código VBA, podemos ordenar nuestro conjunto de datos en función de su color de fuente En primer lugar, necesitamos colorear diferentes filas para ilustrar el ejemplo.
Aplique el código siguiente para ordenar el conjunto de datos en función de color de fuente.
Sub SortRangeByFontColor() ActiveWorkbook.Worksheets("fontcolor").Sort.SortFields.Add(Range("B4"), _ xlSortOnFontColor, xlAscending, xlSortNormal).SortOnValue.Color = RGB(0, 0, 0) With ActiveWorkbook.Worksheets("fontcolor").Sort .SetRange Range("B4:D11") .Header = xlYes .Orientation = xlTopToBottom .Apply End With End Sub
Explicación:
- En este ejemplo, hemos llamado al hoja de trabajo " color de fuente ". Así, en el código, ponemos " color de fuente "como nuestro nombre de la hoja de cálculo activa.
- Fijamos B4 como el clave y B4:D11 como el gama El código ordenará los datos en función de la clave.
- En este ejemplo, también hemos especificado el parámetro de cabecera como xlSí .
- Aquí, fijamos el pedir como parámetro ascendente, así que ordenó los datos de menor a mayor valor .
- El valor del SortOn es el parámetro
- En parámetro de orientación mantiene el valor xlTopToBottom ya que es obligatorio.
- Color para ordenar es en términos RGB que tiene un valor de 0 a 255 .
Más información: Cómo Ordenar Dos Columnas en Excel para que Coincidan (Tanto Coincidencia Exacta como Parcial)
6. Cambiar la Orientación para Ordenar Rango Usando Excel VBA
Utilización de la orientación podemos cambiar la forma en que queremos ordenar los datos. En este ejemplo, tenemos transpuesta nuestro conjunto de datos para ordenar it horizontalmente .
Pongamos el siguiente código en el editor de visual basic y pulsemos F5 para ejecutarlo.
Sub Orientation() Range("B4:H6").Sort Key1:=Range("B6"), _ Order1:=xlAscending, _ Orientation:=xlSortRows, _ Header:=xlYes End Sub
Aquí clasificado los datos basados en la línea de edad en ascendente pedir a izquierda a derecha En el código, establecemos el parámetro orientación como parámetro xlSortRows .
Contenido relacionado: Cómo ordenar automáticamente varias columnas en Excel (3 maneras)
Cosas para recordar
- En Parámetro SortOn que utilizamos para ordenar rango de columnas basado en color de fondo y color de fuente sólo puede ser utilizado por un objeto de hoja de cálculo No podemos utilizarlo con un objeto de rango .
- En Evento BeforeDoubleClick clasifica los datos sólo en ascendente.
Conclusión
Ahora, sabemos cómo ordenar rango utilizando VBA en Excel. Esperemos que le animaría a utilizar esto con más confianza. Cualquier pregunta o sugerencia no se olvide de ponerlos en el cuadro de comentarios a continuación.