Hola a todos!. Espero que todos estéis bien!.

Después de haber publicado estos dos post sobre las nuevas fórmulas de matrices dinámicas: PROGRAMAR LA FUNCIÓN ÚNICOS EN VBA y PROGRAMAR LA FUNCIÓN ORDENAR EN VBA, me quedaba pendiente escribir un post sobre cómo programar la combinación de ambas fórmulas.

Y es que cuando obtenemos valores únicos de un listado, es muy posible que necesitemos ordenar la información, para ello debemos combinar la función ORDENAR con la función UNICOS.

Veamos un ejemplo sencillo:

La idea es clara, lo que buscamos es: primero extraer valores únicos y luego ordenarlos. Para ello os dejo los tres métodos con los que hemos estado trabajando en las publicaciones anteriores:

Con el método uno, utilizamos la función de hoja en nuestro editor de VBA. y combinamos ambas funciones:

Sub F_UNICOS_ORDENAR_1()
    'Declaramos variables
    Dim fin As Long, i As Long, unicos_ord As Variant
    With Sheets("Hoja1")
        fin = Application.CountA(.Range("A:A"))
        'Combinamos las dos funciones
        unicos_ord = WorksheetFunction.Sort(WorksheetFunction.Unique(Range("A2:A" & fin)), 1, 1)
        'Obtenemos los datos de la matriz y los pasamos a la hoja
        For i = LBound(unicos_ord) To UBound(unicos_ord)
            .Cells(i + 1, 2) = unicos_ord(i, 1)
            Next i
        End With
    End Sub

Para el segundo ejemplo, utilizaremos otra forma: Componemos la función con una cadena de texto, las combinamos y llamamos a la fórmula.

Sub F_UNICOS_ORDENAR_2()
    Dim fin As Long, i As Long, unicos_ord As Variant
    With Sheets("Hoja1")
        fin = Application.CountA(.Range("A:A"))
        'Componemos y combinamos funciones
        unicos_ord = "=SORT(" & "UNIQUE(" & "A" & 2 & ":" & "A" & fin & ")" & ",1,1)"
        .Cells(2, 3) = unicos_ord
        'Eliminamos referencias estructuradas
        .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, y como los códigos anteriores, combinamos las dos funciones.

Sub F_UNICOS_ORDENAR_3()
    Dim fin As Long, i As Long, unicos_ord As Variant
    With Sheets("Hoja1")
        fin = Application.CountA(.Range("A:A"))
        'Componemos y combinamos funciones
        unicos_ord = Evaluate("SORT(" & "UNIQUE(" & "A" & 2 & ":" & "A" & fin & "),1,1)")
        For i = LBound(unicos_ord) To UBound(unicos_ord)
            .Cells(i + 1, 4) = unicos_ord(i, 1)
            Next i
    End With
End Sub

Y con estos tres métodos ya hemos conseguido obtener el resultado esperado:

Y sabéis que para cambiar el orden (ascendente o descendente), tenéis que modificar el último parámetro de la función ORDENAR (SORT) que es un 1 y cambiarlo de signo: 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 eso es todo!. Espero que sea de utilidad 🙂

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