24 marzo, 2023

ORDENAR EL CONTENIDO NUMÉRICO DE UNA CELDA

Hola a todos:

El post de hoy, como de costumbre, surge como respuesta a una consulta. El lector buscaba una solución para poder ordenar el contenido números de una celda (pero con los números separados por comas).

Sobre este asunto ya he escrito varias entradas relacionadas, en concreto en este post: ORDENAR LAS PALABRAS DE UNA CELDA ALFABÉTICAMENTE.

Aunque en ese ejemplo trabajaba con palabras, una sencilla modificación podría servir para realizar el ejercicio. Por ejemplo, si tenemos este número en una celda: 8,2,9,9,6,5 y queremos este dato: 2,5,6,8,9,9 utilizaremos esta función (UDF):

*OJO: Para esta función no vamos a utilizar el método Sort, dado que puede producir efectos no deseados a la hora de realizar la ordenación, dado que en números, por defecto responde a la posición del valor del string de acuerdo a su valor Unicode.

La alternativa es esta:

Function OrdenarNumCom(ByVal micelda As String)
Valor = Split(micelda, ",")
ReDim miarray(0 To UBound(Valor))
For i = 0 To UBound(Valor)
miarray(i) = Int(Valor(i))
Next i
Do
Control = True
For i = 0 To UBound(miarray) - 1
If miarray(i) > miarray(i + 1) Then
Control = False
BetaString = miarray(i)
miarray(i) = miarray(i + 1)
miarray(i + 1) = BetaString
End If
Next i
Loop While Not (Control)
'Pasamos los datos ya ordenados a una cadena de texto
For Each num In miarray
inum = inum & "," & num
Next num
OrdenarNumCom = Trim(Mid(inum, 2, Len(inum)))
End Function

Si lo que queremos hacer es ordenar los números pero sin comas, por ejemplo: 715017 y queremos obtener esto: 011577 utilizaremos esta macro:

Function Ordenanum(ByVal micelda As String)
'Declaramos las variables
Dim Matriz As Variant, num As Variant, inum As String
Dim numero As String, j As Long
'Creamos colección arraylist para ir agregando los elementos de la matriz
Set Matriz = CreateObject("System.Collections.ArrayList")
'Por cada núumero contenido en la celda seleccionada
For j = 1 To Len(micelda) Step 1
numero = Mid(micelda, j, 1)
'Añadimos cada número a la matriz con un bucle
Matriz.Add numero
Next j
'Una vez la matriz creada la ordenamos
Matriz.Sort
'Pasamos los datos ya ordenados
For Each num In Matriz
inum = inum & "" & num
Next num
Ordenanum = inum
'Limpiamos variable de objeto
Set Matriz = Nothing
End Function

Con estas dos funciones podremos realizar perfectamente el trabajo. Y en el caso de la función que ordena los números separados por comas, si el separador es otro, solo tenemos que cambiarlo en el código y funcionará perfectamente.

ORDENAR EL CONTENIDO NUMÉRICO DE UNA CELDA

Y esto es todo, espero que os sea de utilidad.

Descarga el archivo de ejemplo pulsando en: ORDENAR EL CONTENIDO NUMÉRICO DE UNA CELDA

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

Donate Button with Credit Cards

¡¡Muchas gracias!!

Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies

Comparte este post

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