Hola a todos!.

Una de las fórmulas más importantes publicadas en los últimos meses y que forma parte de las denominadas fórmulas de matriz dinámica, es la función Únicos.

Todos somos conscientes de la necesidad de está fórmula en Excel. Normalmente cuando trabajamos con nuestras hojas y necesitamos obtener únicos, la solución suele pasar por ir a la cinta de opciones: Pestaña datos > Eliminar Duplicados. O como alternativa utilizar fórmulas matriciales complejas que consumen grandes recursos en nuestro sistema.

Con esta función es sencillo obtener registros únicos de un rango seleccionado. Basta seguir los pasos del enlace al soporte de Microsoft y lo podréis hacer sin problemas.

Pero, y si necesitamos programar esta función, ¿cómo lo hacemos?.

Pues en realidad existen principalmente varias formas de hacerlo. Veamos un ejemplo:

El objetivo es claro, debemos extraer los elementos únicos de la primera columna en las columnas B y C, dependiente del método utilizado.

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_UNICOS_1()
    'Declaramos variables
    Dim fin As Long, i As Long, unicos As Variant
    With Sheets("Hoja1")
        fin = Application.CountA(.Range("A:A"))
        unicos = WorksheetFunction.Unique(Range("A2:A" & fin))
        'Obtenemos los datos de la matriz y los pasamos a la hoja
        For i = LBound(unicos) To UBound(unicos)
            .Cells(i + 1, 2) = unicos(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. En este caso, el resultado no se puede pasar a valores (fácilmente). Por lo que debemos tenerlo en cuenta y además debemos eliminar la referencia estructurada que en las nuevas fórmulas de matriz dinámica donde se coloca un «@» antes de la fórmula.

Sub F_UNICOS_2()
    Dim fin As Long, i As Long, unicos As Variant
    With Sheets("Hoja1")
        fin = Application.CountA(.Range("A:A"))
        'Componemos la función y la evaluamos.
        unicos = "=UNIQUE(" & "A" & 2 & ":" & "A" & fin & ")"
        .Cells(2, 3) = unicos
        .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, que si bien es similar el primero, creo conveniente tenerlo en cuenta en este post:

Sub F_UNICOS_3()
    Dim fin As Long, i As Long, unicos As Variant
    With Sheets("Hoja1")
        fin = Application.CountA(.Range("A:A"))
        unicos = Evaluate("UNIQUE(" & "A" & 2 & ":" & "A" & fin & ")")
        For i = LBound(unicos) To UBound(unicos)
            .Cells(i + 1, 4) = unicos(i, 1)
            Next i
    End With
End Sub

El resultado de aplicar estos tres métodos es este:

Como podéis observar, es sencillo de realizar la programación y automatización de esta función 🙂

Y estos es todo, espero que os haya resultado de interés 🙂

Esta fórmula actualmente está disponible en office 365 canal de actualización mensual y en versiones Online. En Julio se publicará en el canal semianual para aquellos de vosotros que tengáis esta opción.

Aunque es obvio, los códigos únicamente van a funcionar en versiones de Excel que tengan instaladas las nuevas funciones de matrices dinámicas.

Si no disponéis de esta fórmula, en esta web hay varios ejemplos de funciones (UDF) que obtienen únicos y funcionarán en prácticamente todas las versiones.

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