ELIMINAR REGISTROS DUPLICADOS Y CARGAR DATOS ÚNICOS EN COMBOBOX Y LISTBOX

Hola a todos!

El universo de los datos duplicados y su tratamiento es muy variado en Excel, se pueden tratar tanto con fórmulas, con comandos instalados en la hoja y también con vba. El objetivo suele ser siempre trabajar con registros únicos para evitar duplicidades en las informaciones.

En esta web hay varios ejemplos de cómo se pueden obtener registros únicos, hoy os voy a mostrar una nueva variante. Imaginad que tenéis los meses del año en una columna, pero en algunos casos se duplica el nombre de los meses:

ELIMINAR REGISTROS DUPLICADOS Y CARGAR DATOS UNICOS EN COMBOBOX Y LISTBOX

El objetivo será obtener registros únicos y cargar un combobox y un listbox. Para ello vamos a trabajar con la siguiente macro:

Sub CARGAR_UNICOS()
'Declaramos las variables
Dim rango As Range, oDic As Object, celda As Object
Dim ipalabra As String, matriz1 As Variant, matriz2 As Variant
Dim sCadena1 As String, sCadena2 As String, i As Long, j As Long, Fin As Integer
'Trabajamos con la hoja
With Sheets("UNICOS")
'Limpiamos combo y listbox
.ComboBox1.Clear
.ListBox1.Clear
'Definimos el rango de los datos
Fin = .Range("A" & Rows.Count).End(xlUp).Row
'Trabajamos con rango establecido y creamos objeto diccionario
Set rango = .Range("A2:A" & Fin)
Set oDic = CreateObject("scripting.dictionary")
'Por cada celda con datos en el rango rango componemos un string
For Each celda In rango
If celda <> vbNullString Then
ipalabra = ipalabra & "," & celda
End If
Next celda
'Eliminamos posibles espacios en blanco
sCadena1 = Trim(Mid(ipalabra, 2, Len(ipalabra)))
'Comprobamos que cada palabra que incluimos en la matriz no existe en cadena
matriz1 = Split(sCadena1, ",")
For i = 0 To UBound(matriz1)
If Not oDic.Exists(matriz1(i)) Then oDic.Add matriz1(i), matriz1(i)
Next i
'Creamos una nueva cadena ya sin duplicados
sCadena2 = Join(oDic.Keys, ",")
matriz2 = Split(Trim(sCadena2), ",")
'Pasamos los datos al Combo y al listbox
For j = 0 To UBound(matriz2)
.ComboBox1.AddItem (matriz2(j))
.ListBox1.AddItem (matriz2(j))
Next
'Liberamos memoria
Set rango = Nothing
Set oDic = Nothing
End With
End Sub

Lo que estamos haciendo con este código es: pasar los datos del rango a una variable string con todos los meses (incluidos los repetidos) en una cadena de texto. Si en ese rango existen celdas sin información, no las tendremos en cuenta.

Con el objeto “scripting.dictionary” y mediante un loop, comprobamos si cada palabra “no” existe, en caso afirmativo, la incorporamos de nuevo a la “matriz1”. De esta forma controlamos que no aparezcan registros duplicados en nuestros datos.

A continuación, pasamos los datos a una string y de nuevo a una matriz (matriz2), que nos permitirá con un loop cargar los datos en el Combobox1 y en el Listbox1.

En las partes del código donde hago mención al uso de la coma como delimitador “,” es necesario su utilización para delimitar los elementos de la celda. Si usásemos un espacio en blanco pasaría la segunda, tercera o n palabra como si fuesen otra celda (que puede que también os sea de utilidad para obtener únicos en una única celda).

El resultado es el siguiente:

ELIMINAR REGISTROS DUPLICADOS Y CARGAR DATOS UNICOS EN COMBOBOX Y LISTBOX1

Como podéis observar, los datos se han cargado correctamente y sin duplicados. Por cierto, para que realicéis pruebas he adjuntado una sencilla macro para vaciar el combobox y el listbox que está vinculada al botón “Vaciar Combo y Listbox”.

Y eso es todo, espero que este método os resulte de interés : )

Descarga el archivo de ejemplo pulsando en: ELIMINAR REGISTROS DUPLICADOS Y CARGAR DATOS UNICOS EN COMBOBOX Y LISTBOX

¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.

Donate Button with Credit Cards

¡¡Muchas gracias!!

Anuncios

3 pensamientos en “ELIMINAR REGISTROS DUPLICADOS Y CARGAR DATOS ÚNICOS EN COMBOBOX Y LISTBOX

  1. Hola, muy interesante si en ocaciones se requiere de una formula rapida de eliminar duplicados y es muy util. Ahora, si en lugar de cargar a un listbox en otras celda de la misma hoja o en otra hoja, como seria el codigo de la macro?. Otra variante seria que en lugar de una sola columna de datos se tuvieran dos o mas y las duplicadas estuvieran en la columna A.
    Gracias, saludos ojala pudiera compartirlo con esas variantes que seran de mucha ayuda.

    Me gusta

  2. Pingback: ELIMINAR REGISTROS DUPLICADOS Y ORDENAR ALFABÉTICAMENTE LA INFORMACIÓN | EXCEL SIGNUM

¿Te ha gustado?. Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s