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:

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.

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