Excel VBA Sort

Hay diferentes formas de ordenar los datos en Microsoft Excel. Hay un ícono de ordenar debajo de la cinta de la pestaña Datos de Excel desde donde puede ordenar sus datos en un santiamén y obtener los resultados. ¿Por qué es necesario escribir el código complejo de VBA entonces?

Debe tenerlo siempre en mente, los códigos VBA están ahí para automatizar las cosas. Supongamos que tiene datos que se actualizan de vez en cuando. Tal vez todos los días, semanalmente, mensualmente, etc., y necesita sus datos de una manera ordenada específica. En tales casos, se puede usar la función VBA SORT y será una herramienta útil para su referencia.

VBA tiene un método Range.Sort para ordenar los datos por usted. Donde Rango especifica el rango de celdas que queremos clasificar en orden ascendente o descendente.

La sintaxis para Range.Sort es la siguiente:

Dónde,

  • Clave : columna / rango que necesita ordenar. Ex. Si desea ordenar las celdas A1: A10, debe mencionar Rango (A1: A10)
  • Orden : este es el parámetro que le permite ordenar los datos en orden ascendente o descendente.
  • Encabezado : este es el parámetro que especifica si su columna / rango tiene encabezados o no.

Estos tres parámetros son suficientes para nuestros procedimientos. Sin embargo, hay algunos otros parámetros como MatchCase, SortMethod, etc. que siempre puede explorar y ver cómo funcionan.

¿Cómo utilizar la función de clasificación de Excel VBA?

Aprenderemos cómo se puede usar VBA Sort para ordenar la columna sin encabezados, una columna con encabezados y varias columnas con ejemplos en Excel.

Puede descargar esta plantilla Excel de VBA aquí - Plantilla Excel de VBA

Función de ordenación de VBA - Ejemplo # 1

Ordenar una sola columna sin encabezado

Supongamos que tiene una columna con los nombres que se muestran a continuación y todo lo que necesita es ordenar alfabéticamente estos datos en orden ascendente o descendente.

Siga los pasos a continuación para usar la función Ordenar en VBA.

Paso 1: defina un nuevo procedimiento auxiliar bajo un módulo y cree una macro.

Código:

 Sub SortEx1 () End Sub 

Paso 2: use la función Range.Sort para poder ordenar esta columna en orden ascendente.

Código:

 Sub SortEx1 () Range ("A1", Range ("A1"). End (xlDown)). Sort End Sub 

Aquí está dando un rango que comienza desde la celda A1 hasta la última celda usada / no vacía (vea la función .End (xlDown)) a la función Range.Sort.

Paso 3: Ahora, ingrese los valores del argumento.

Código:

 Sub SortEx1 () Range ("A1", Range ("A1"). End (xlDown)). Sort Key1: = Range ("A1"), Order1: = xlAscending, Header: = xlNo End Sub 

Como hemos discutido anteriormente, la clave, el orden y el encabezado son los argumentos importantes y necesarios que se proporcionarán. Hemos dado Rango ("A1") como el rango de inicio de columna que debemos clasificar. El orden se proporciona como Ascendente y Encabezado como No (lo que significa que la columna no tiene encabezado).

Este código verificará todas las celdas no vacías a partir de A1 y luego las ordenará en orden ascendente a partir de la celda A1.

Paso 4: Ejecute este código presionando F5 o el botón Ejecutar manualmente y vea la salida.

Si puede comparar esto con la imagen al comienzo de este ejemplo, puede ver que los nombres están ordenados en orden ascendente.

Función de ordenación VBA - Ejemplo # 2

Ordenar una sola columna con encabezado

Suponga que tiene una columna con el encabezado como se muestra a continuación. Y quería ordenar esta columna en orden ascendente o descendente.

Siga los pasos a continuación para usar la función Ordenar en VBA.

Paso 1: defina un nuevo subprocedimiento bajo un nuevo modelo para almacenar la macro.

Código:

 Sub SortEx2 () End Sub 

Paso 2: Use Hojas ("Ejemplo # 2") para especificar qué hoja son sus datos.

Código:

 Sub SortEx2 () Hojas ("Ejemplo # 2") Fin Sub 

Paso 3: utilice el rango ("A1"). Ordene delante de la línea de código anterior para que sea una función de clasificación.

Código:

 Sub OrdenarEx2 () Hojas ("Ejemplo # 2"). Rango ("A1"). Ordenar Fin Sub 

Paso 4: Proporcione la Clave1 como Rango ("A1") para ordenar los datos de la celda A1, Orden1 para ordenar los datos en orden ascendente o descendente y Encabezado como para que el sistema sepa que la primera fila es el encabezado en su datos.

Código:

 Sub OrdenarEx2 () Hojas ("Ejemplo # 2"). Rango ("A1"). Ordenar clave1: = Rango ("A1"), Orden1: = xl Ascendente, Encabezado: = xl Sí Fin Sub 

Paso 5: Ejecute este código presionando F5 o el botón Ejecutar manualmente y vea la salida.

Aquí, los datos del Ejemplo # 2 del libro de trabajo de Excel dado se ordenan en orden ascendente dado que tiene un encabezado. Lo que significa que, al ordenar estos datos, la primera fila (que contiene el Nombre Emp ) se descuida porque se considera como un encabezado para estos datos en la columna A.

También puede ordenar los mismos datos en orden descendente de alfabetos. Todo lo que necesita hacer es cambiar el orden de ascendente a descendente.

Paso 6: Cambie el orden1 a descendente para ordenar los datos en orden descendente.

Código:

 Sub OrdenarEx2 () Hojas ("Ejemplo # 2"). Rango ("A1"). Ordenar clave1: = Rango ("A1"), Orden1: = xlDescendente, Encabezado: = xl Sí Fin Sub 

Paso 7: Ejecute el código y vea una salida como se muestra a continuación.

Puede ver que los datos están ordenados en orden descendente.

Función de ordenación VBA - Ejemplo # 3

Ordenar múltiples columnas con encabezados

Hasta ahora, hemos cubierto cómo ordenar los datos de una sola columna en orden ascendente o descendente (sin encabezado y con encabezado). ¿Qué sucede si tiene datos que necesita ordenar según varias columnas? ¿Es posible escribir un código para el mismo?

La respuesta es: "Sí, seguramente se puede hacer".

Suponga que tiene los datos que se detallan a continuación:

Deseaba ordenar estos datos primero por Nombre Emp y luego por Ubicación. Siga los pasos a continuación para ver cómo podemos codificarlo en VBA.

Paso 1: defina un nuevo subprocedimiento para agregar una macro en un nuevo módulo.

Código:

 Sub SortEx3 () End Sub 

Paso 2: Use una instrucción With … End With para agregar múltiples condiciones de clasificación en un solo ciclo.

Código:

 Sub SortEx3 () con ActiveSheet.Sort End Sub 

Paso 3: Ahora, use SortFields.Add para agregar las múltiples condiciones de clasificación en la misma hoja de trabajo.

Código:

 Sub SortEx3 () con ActiveSheet.Sort .SortFields.Add Key: = Range ("A1"), Order: = xlAscending .SortFields.Add Key: = Range ("B1"), Order: = xlAscending End Sub 

Paso 4: decida el rango de la hoja que se ordenará y el encabezado en el siguiente paso.

Código:

 Sub SortEx3 () con ActiveSheet.Sort .SortFields.Add Key: = Range ("A1"), Order: = xlAscending .SortFields.Add Key: = Range ("B1"), Order: = xlAscending .SetRange Range ("A1 : C13 "). Encabezado = xl Sí Fin Sub 

Paso 5: Use .Aplicar para aplicar todas estas cosas con la declaración y cierre el ciclo escribiendo Finalizar con.

Código:

 Sub SortEx3 () con ActiveSheet.Sort .SortFields.Add Key: = Range ("A1"), Order: = xlAscending .SortFields.Add Key: = Range ("B1"), Order: = xlAscending .SetRange Range ("A1 : C13 "). Encabezado = xl Sí. Aplicar fin con fin Sub 

Paso 6: Ejecute este código presionando F5 o el botón Ejecutar manualmente y vea la Salida.

En este código, ActiveSheets.Sort ayuda al sistema a identificar la hoja bajo la cual se ordenarán los datos. SortFields.Add permite agregar dos condiciones de clasificación con su orden (Ascendente en ambos casos). SetRange permite que el sistema establezca el rango de A1 a C13. También puedes subir este rango. Aplicar declaraciones permite que el sistema aplique todos los cambios realizados en el bucle With.

Finalmente, obtendrá los datos que se ordenan según el nombre Emp primero y luego por ubicación.

Cosas para recordar

  • En VBA Sort, puede crear rangos con nombre en lugar de referencias de celda y usar el mismo. Ex. Si ha creado el rango con nombre para la celda A1: A10 como "EmpRange", puede usarlo en Rango. Ordenar como Rango ("EmpRange").
  • Puede ordenar los datos en orden ascendente y descendente igual que en Excel.
  • Si no está seguro de si sus datos tienen un encabezado o no, puede usar xlGuess en la sección Encabezado para que el sistema adivine si la primera línea de datos es un encabezado o no.

Artículos recomendados

Esta ha sido una guía para Excel VBA Sort. Aquí discutimos VBA Sort y cómo usar Excel VBA Sort Function junto con ejemplos prácticos y plantilla de Excel descargable. También puede consultar nuestros otros artículos sugeridos:

  1. Guía rápida para Excel Ordenar por número
  2. Usando la función VBA Match
  3. ¿Cómo ordenar la columna en Excel?
  4. VBA While Loop | MS Excel

Categoría: