6 febrero, 2025

MACRO PARA ORDENAR ALFABÉTICAMENTE

Uno de los detalles más importantes a la hora de presentar la información, es sin duda, la estética y la funcionalidad.
En ese sentido, cuando generamos un informe tenemos la tendencia a no reparar en la necesidad de que los datos que estamos mostrando aparezcan ordenados de alguna forma.

Os voy a presentar una macro que realiza esa misma función, ordena nuestros datos de forma alfabética.

Supongamos un rango de celdas de A1 a F1 (aquí estaría el cabecero de la columna). En la columna B1 supongamos también que hay nombres  y en el resto de columnas diferentes indicadores. Pues bien, esta macro va a ordenar siempre la columna B1 (obviamente se puede cambiar de columna según nuestras necesidades) alfabéticamente hasta un rango de 65.000 filas.

Siempre podréis, en caso de necesidad, modificar los parámetros del código según vuestras necesidades.

Private Sub Ordenar_alfabéticamente()

Range("A1:F1").Select
Selection.AutoFilter
Range("A1:F65000").Sort Key1:=Range("B1"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A1:F1").Select
Selection.AutoFilter
Range("A1").Select

End Sub

Descarga el archivo pulsando enORDENAR ALFABÉTICAMENTE

PD: Si deseáis realizar esta tarea en columnas independientes, os recomiendo visitar la siguiente entrada: Ordenar columnas de forma independiente

¿Te ha resultado de interés?, puedes apoyar Excel Signum con una pequeña donación.


Donate Button with Credit Cards

¡¡Muchas gracias!!

Comparte este post

25 comentarios en «MACRO PARA ORDENAR ALFABÉTICAMENTE»

  1. Muy bueno Amigo, quisiera consultarle si se puede realizar este procedimiento en diferentes filas, pues mis datos se clasifican en varias Filas

  2. Hola Caleb,

    Se puede hacer, pero supongo que te refieres a columnas. Para hacerlo, realmente lo que debes hacer es dar la instrucción de que te ordene cada columna en el orden que desees, modificando la macro quedaría así, en el ejemplo con la Macro de ordenar por ID.

    Sub Ordenar_alfabéticamente_id()

    Range(«A1:F1»).Select
    Selection.AutoFilter
    Range(«A1:A65000»).Sort Key1:=Range(«A1»), Order1:=xlAscending, Header:= _
    xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal
    Range(«A1:F1»).Select
    Selection.AutoFilter
    Range(«A1»).Select

    Range(«A1:F1»).Select
    Selection.AutoFilter
    Range(«B1:B65000»).Sort Key1:=Range(«B1»), Order1:=xlAscending, Header:= _
    xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal
    Range(«A1:F1»).Select
    Selection.AutoFilter
    Range(«A1»).Select

    Range(«A1:F1»).Select
    Selection.AutoFilter
    Range(«C1:C65000»).Sort Key1:=Range(«C1»), Order1:=xlAscending, Header:= _
    xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal
    Range(«A1:F1»).Select
    Selection.AutoFilter
    Range(«A1»).Select

    Range(«A1:F1»).Select
    Selection.AutoFilter
    Range(«D1:D65000»).Sort Key1:=Range(«D1»), Order1:=xlAscending, Header:= _
    xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal
    Range(«A1:F1»).Select
    Selection.AutoFilter
    Range(«A1»).Select

    Range(«A1:F1»).Select
    Selection.AutoFilter
    Range(«E1:E65000»).Sort Key1:=Range(«E1»), Order1:=xlAscending, Header:= _
    xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal
    Range(«A1:F1»).Select
    Selection.AutoFilter
    Range(«A1»).Select

    Range(«A1:F1»).Select
    Selection.AutoFilter
    Range(«F1:F65000»).Sort Key1:=Range(«F1»), Order1:=xlAscending, Header:= _
    xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal
    Range(«A1:F1»).Select
    Selection.AutoFilter
    Range(«A1»).Select

    End Sub

    Este ejemplo se puede usar si tienes pocas columnas, en caso de ser muchas y para no hacer un código lento y extenso, puedes visitar el siguiente enlace de microsoft donde existe una macro para realizar el proceso: https://support.microsoft.com/kb/247311/es?wa=wsignin1.0

    Saludos.

  3. Segu, disculpa pero por ejemplo yo tengo una hoja que llega hasta la celda («YU») creo que copiar y pegar hasta llegar esta celda es una lata…

    No habrá una forma de poner el rango desde A hasta YU sin copiar y pegar toda la vida?

    Gracias.

  4. Hola Palma,

    Cuando dices que tienes una hoja con datos hasta la columna YU y quieres seleccionar el rango desde A … sin copiar y pegar, exactamente a que te refieres, es decir, deseas ordenar las columnas hasta ese rango? en ese caso, puedes echar mano del apunte que anexé de microsoft:
    https://support.microsoft.com/en-us/kb/247311/es?wa=wsignin1.0

    En todo caso, puedes enviarme un ejemplo de los datos que necesitas ordenar y como quieres que te aparezcan ordenados e intento trasladarte el ejemplo práctico.

    Puedes probar también como en el ejemplo que pongo en el post donde sí se selecciona un rango.

    Estamos en contacto,

    Saludos,

  5. Hola tengo un archivo e intente ordenar con tu macro pero me da errores cambie las celdas de acuerdo a mi necesidad pero no logro que se ordene; me gustaría enviarte el archivo para que lo revisaras por favor y Gracias..

  6. Buenos días,

    ¿Sabrías adaptar esta macro para ordenar solo las filas selecciónadas con el raton, y ordenar alfabeticamente la columna P en orden cresciente?

    Tengo que ordenar asi 4.000 filas, asi que si lo consigues y vives por Madrid te invito a una caña 🙂

    Saludos,
    Fran

  7. Hola Fran:

    Podrías enviar al correo de la web un ejemplo simple en un archivo en una pestaña la info como la tienes y en otra como te gustaría que quedase. Con breve explicación? Así verificó la mejor forma de hacer el trabajo. Sería interesante saber si será una tarea periódica y con la misma estructura de datos. En cuanto lo vea y tenga un momento te lo envío. El correo es excelsignum@yahoo.es luego hablamos de las cañas 🙂

  8. Amigo me gustaría saber la macro que ordene alfabéticamente desde la celda D15 pero que desbloquee algunas columnas y luego lo vuelva a cerrar mil gracias…

    1. Hola Wider,

      Suponiendo que la hoja es la 1 y que cuando te refieres a desbloquear es que tenías la página protegida esta sería la macro:

      Sub ORDENAR()
      Dim rRango As Range
      Dim cCell As Range
      'desprotegemos documentos, debes introducir la contraseña
      Sheets(1).Unprotect "CONTRASEÑA"
      Range("D15").Select
      'seleccionamos desde D15 tanto hacía la derecha como la abajo hasta que finalicen los datos
      Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
      Set rRango = Selection
      Set cCell = ActiveCell
      'ordenamos
      If cCell Empty Then
      rRango.Sort Key1:=cCell, Order1:=xlAscending, Header:=xlYes
      End If
      'volvemos a protgeger
      Sheets(1).Protect "CONTRASEÑA"
      End Sub

      Saludos

  9. muy bueno el archivo y me sirve de mucho, pero solo tengo una duda, ya que quiero continuar con estas macros en este mismo archivo, pero agregandola a mas hojas, mi pregunta, ¿como le hago para insertar los botones «ORDENAR POR PRODUCTO» y «ORDENAR POR ID», con el insertar boton (control de formulario), o con el boton «boton de comando (controles activex)?

  10. Hola; excelente aporte. Solo una consulta relacionada con la ordenación: Tengo una columna «A» con los nombres, Tengo una columna «B» con las edades, y tengo una COLUMNA «D» con el domicilio. Estas columnas desbloqueadas para cargar datos. La columna intermedia «C» tiene fórmula y bloqueada. ¿Qué macro uso para la ordenación automática por nombres con HOJA PROTEGIDA?. Muchas gracias!

    1. Hola Ricardo: puedes probar con la respuesta que ke doy a Wider en este post, ( los comentarios). Si no te funciona envíame un ejemplo de lo que tienes y como quieres que sea el resultado. En un archivo Excel, por supuesto.

  11. Un gusto he buscado por la web una macro que me ayude a ordenar alfabéticamente los resultados de una selección previa de un usuario por asi decirlo, soy sincero no he probado esta en especifico pero mi problema es que todas las que pruebo funcionan al ingresar los datos, o al momento de que exista un cambio en la hoja el problema es que no me ordena al ser resultados de una formula por que pasa esto y seria viable o como le digo a la macro que son resultados de fórmula?

  12. Hola un gusto, me gustaría saber si hay forma de hacer referencia en setrange range(«c4:j10»)
    Igual a como se hace la selección del rango a ordenar
    Esté es el rango
    Range(«d4»).end(xldown).select
    Selection.offset(0,-1).select
    Range(selectión, selection.end(xlup).offser(1,9)).select

    1. Buenas tardes:

      No comprendo la consulta, si te refieres a utilizar un set en la macro, sí lo puedes hacer:

      Set mirango = Range(«A1:F65000»)

      Por ejemplo. Saludos

  13. Buen día gracias, no supe explicarme. Como puedo completar el código para que me ordene el rango que selecciono con lo siguiente

    Range(«d4»).end(xldown).select
    Selection.offset(0,-1).select
    Range(selectión, selection.end(xlup).offser(1,9)).select

    Saludos

Si te ha gustado o tienes alguna duda, puedes dejar aquí tu comentario.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies