Hola a todos! ¿cómo estáis?, espero que bien.
Siguiendo con las funciones de matrices dinámicas, hoy quiero centrarme en otra fórmula muy interesante e imprescindible en nuestros procesos y automatizaciones. La función Ordenar.
Al igual que el caso de la función UNICOS y el post que escribí: PROGRAMAR LA FUNCIÓN ÚNICOS EN VBA os dejaré tres formas de programar esta función (hay otras, pero estas me parecen las más interesantes).
Con el método uno, utilizamos la función de hoja en nuestro editor de VBA. En este caso tendremos que utilizar un loop para devolver los datos de elementos únicos, dado que se guardan en una matriz.
Sub F_ORDENAR_1()
'Declaramos variables
Dim fin As Long, i As Long, Ordenar As Variant
With Sheets("Hoja1")
fin = Application.CountA(.Range("A:A"))
Ordenar = WorksheetFunction.Sort(Range("A2:A" & fin), 1, 1)
'Obtenemos los datos de la matriz y los pasamos a la hoja
For i = LBound(Ordenar) To UBound(Ordenar)
.Cells(i + 1, 2) = Ordenar(i, 1)
Next i
End With
End Sub
Para el segundo ejemplo, utilizaremos otra forma: Componemos la función con una cadena de texto y llamamos a la fórmula.
Sub F_ORDENAR_2()
Dim fin As Long, i As Long, Ordenar As Variant
With Sheets("Hoja1")
fin = Application.CountA(.Range("A:A"))
'Componemos la función y la evaluamos.
Ordenar = "=SORT(" & "A" & 2 & ":" & "A" & fin & ",1,1)"
.Cells(2, 3) = Ordenar
'Eliminamos referencia estructurada
.Cells(2, 3).Replace What:="@", Replacement:="", LookAt:=xlPart, FormulaVersion:=xlReplaceFormula2
End With
End Sub
Para el tercer ejemplo vamos a utilizar el método Evaluate:
Sub F_ORDENAR_3()
Dim fin As Long, i As Long, Ordenar As Variant
With Sheets("Hoja1")
fin = Application.CountA(.Range("A:A"))
Ordenar = Evaluate("SORT(" & "A" & 2 & ":" & "A" & fin & ",1,1)")
For i = LBound(Ordenar) To UBound(Ordenar)
.Cells(i + 1, 4) = Ordenar(i, 1)
Next i
End With
End Sub
El resultado de aplicar estos tres métodos es este:
![](https://i0.wp.com/excelsignum.com/wp-content/uploads/2020/04/PROGRAMAR-LA-FUNCION-ORDENAR-EN-VBA.jpg?resize=517%2C627&ssl=1)
Aunque resulta obvio, para cambiar el orden (descendente o ascendente) de la función, debemos cambiar el signo del último 1 de la fórmula. En positivo es ascendente, en negativo es descendente.
Nota: Aunque es obvio, los códigos únicamente van a funcionar en versiones de Excel que tengan instaladas las nuevas funciones de matrices dinámicas.
Y esto es todo, espero que os haya resultado de interés 🙂
A continuación puedes descargar el archivo:
¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.
¡¡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
Hola, da error al correr las macros para ordenar.
En la primera el error es en esta linea: unicos = WorksheetFunction.Sort(Range(«A2:A» & fin), 1, 1) No se puede obtener la propiedad sort de la clase WorksheetFunction
En la segunda en esta linea: .Cells(2, 3) = unicos Error definido por la aplicacion o el objeto
En la tercera en esa linea: For i = LBound(unicos) To UBound(unicos) No coinciden los tipos
Hola Victor: Estas fórmulas hacen referencia a la función Ordenar. Es decir que para que funcionen debes tener la función instalada en el equipo ¿es así?. Si no lo es, no funcionará. Si tienes una versión antigua o que no tenga actualización de funciones, no va funcionar. Saludos.