30 septiembre, 2023

ORDENAR LAS PALABRAS DE UNA CELDA ALFABÉTICAMENTE

Saludos a todos 🙂

Espero que vaya muy bien. Hoy vamos a trabajar con matrices en VBA para realizar un ejercicio que suele ser bastante habitual: ordenar el contenido de una celda alfabéticamente. Y resulta útil cuando necesitamos ordenar listados de información, por ejemplo una serie de nombres, de frutas, etc.

Imaginad que tenéis en una serie de celdas la siguiente información:

ORDENAR LAS PALABRAS DE UNA CELDA ALFABETICAMENTE

Efectivamente son tres listados diferentes, con nombres de personas, de frutas y de árboles y sin ningún criterio de ordenación. La tarea es ordenar el contenido de cada celda alfabéticamente, y eso o bien lo hacemos a mano, con una combinación de fórmulas o con VBA. La mejor opción será VBA, ya que construiremos nuestra propia función para resolver este tipo de tareas.

Vamos a usar esta macro:

Function OrdenarAlfa(ByVal Micelda As String)
'Declaramos las variables
Dim Matriz As Object, Palabra As Variant
Dim alfaDato As Variant, iPalabra As String
'Creamos colección arraylist para ir agregando los elementos de la matriz
Set Matriz = CreateObject("System.Collections.ArrayList")
'Por cada objeto/palabra contenida en la celda seleccionada
For Each Palabra In Split(Micelda, " ")
'Añadimos cada palabra a la matriz con un bucle
Matriz.Add Palabra
Next Palabra
'Una vez la matriz creada la ordenamos
Matriz.Sort
'Pasamos los datos ya ordenados a una cadena de texto
For Each alfaDato In Matriz
iPalabra = iPalabra & " " & alfaDato
Next alfaDato
OrdenarAlfa = Trim(iPalabra)
'Limpiamos variable de objeto
Set Matriz = Nothing
End Function

Con esta función (OrdenarAlfa) seleccionamos la celda, pasamos todas las palabras a una matriz, la ordenamos alfabéticamente y luego pasamos los datos ordenados a una cadena (string) que pasamos a la función y por lo tanto a la celda que contiene la fórmula.

En este ejemplo estoy suponiendo que entre cada palabra hay un espacio en blanco, si la separación fuese una coma «,» (o cualquier otro símbolo), solo tenéis que cambiarlo en la macro en esta línea:

For Each Palabra In Split(Micelda, ",")

Y si queréis que las palabras resultantes de la fórmula también tengan una coma de separación, debéis cambiarlo en esta otra línea:

iPalabra = iPalabra & ", " & alfaDato

y modificar el dato que pasa a la función:

OrdenarAlfa = Trim(Mid(iPalabra, 2, Len(iPalabra)))

El resultado es el siguiente:

ORDENAR LAS PALABRAS DE UNA CELDA ALFABETICAMENTE1

Ya tenemos todas las informaciones ordenadas alfabéticamente y con la ayuda de una nueva función. Obviamente, la podéis adaptar a un proceso automático o para mostrar los datos en un formulario, las posibilidades son muchas.

Y eso es todo, espero que os resulte de interés 🙂

Descarga el archivo de ejemplo pulsando en: ORDENAR LAS PALABRAS DE UNA CELDA ALFABETICAMENTE

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

Donate Button with Credit Cards

¡¡Muchas gracias!!

Comparte este post

11 comentarios en «ORDENAR LAS PALABRAS DE UNA CELDA ALFABÉTICAMENTE»

    1. Hola Fercho:

      Acabo de probar la macro y funciona perfectamente. Está testada en excel 2010, 2013 y 2016. Verifica que estás introduciendo correctamente la función.

      Saludos.

    1. Hola Carlos:

      Solo hay que hacer una sencilla modificación en el código, así:

      Function OrdenarAlfa(ByVal Micelda As String)
      'Declaramos las variables
      Dim Matriz As Object, Palabra As Variant
      Dim alfaDato As Variant, iPalabra As String
      'Creamos colección arraylist para ir agregando los elementos de la matriz
      Set Matriz = CreateObject("System.Collections.ArrayList")
      'Por cada objeto/palabra contenida en la celda seleccionada
      For Each Palabra In Split(Micelda, ",")
      'Añadimos cada palabra a la matriz con un bucle
      Matriz.Add Palabra
      Next Palabra
      'Una vez la matriz creada la ordenamos
      Matriz.Sort
      'Pasamos los datos ya ordenados a una cadena de texto
      For Each alfaDato In Matriz
      iPalabra = iPalabra & "," & alfaDato
      Next alfaDato
      OrdenarAlfa = Trim(Mid(iPalabra, 2, Len(iPalabra)))
      'Limpiamos variable de objeto
      Set Matriz = Nothing
      End Function

  1. Hola, muy bueno, gracias. Tuve que copiar/pegar mi info sobre el file excel descargable.

    Cuando coloqué la codificación en el VBA de mi doc excel, no fue reconocida al momento de escribir la función =Orden…. Qué podría haber faltado?

    Saludos
    Renatto

    1. Hola Renatto:

      Lo has colocado en un módulo estándar??. No en el módulo de la hoja o en thisworkbook. Debes crear un módulo y pegar el código.

      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