martes, 7 de junio de 2016

VBA: Contando Únicos dentro de una cadena de texto.

Veremos hoy una sencilla UDF (función personalizada) que nos devuelve un conteo de elementos únicos contenidos en una celda.
Se trata de dar solución a un usuario del blog:
[...] tengo los datos de1-2-3-4-5-6-2-3-5-4-7-, cuantas números hay sin considerar repeticiones? [...]


Para resolver nuestra cuestión en particular, insertamos el siguiente código dentro de un módulo estándar del explorador de proyectos del Editor de VB:

Function ContarUnicos(celda As Range, separador As String) As Long
Application.Volatile
'definimos la matriz de trabajo, empleando el 'separador' dado por el usuario
matriz = Split(celda.Text, separador)

'generamos la coleccion
Set unicos = New Collection
'loop por todos los elementos de la matriz
For Each dato In matriz
    'cuando encuentre un item repetido, daría un error
    'que salvamos con la instrucción On Error Resume Next
    On Error Resume Next
    'por tanto, nuestra coleccion solo agrega elementos no repetidos
    'objeto.Add item, key, before, after
    'ocurre un error si una key especificada duplica la key de un miembro existente de la colección
    unicos.Add dato, CStr(dato)
    On Error GoTo 0
Next dato

'escribir los datos unicos en la Hoja de cálculo
ContarUnicos = unicos.Count

End Function



El uso es simple, basta indicar la celda que contiene los elementos y cuál es el separador empleado.
Vemos el resultado:

VBA: Contando Únicos dentro de una cadena de texto.

No hay comentarios:

Publicar un comentario en la entrada