Combobox sin duplicados en vba

En excel tengo una columna con datos repetidos, en un form tengo un combo que debe contener los registros de esa columna pero sin que se repitan.
Mi intención es usar un código que recorra los registros y que por cada uno de ellos compruebe si ya existe en la lista del combo, si existe, entonces se añadirá. Pero no se ni como empezar.
Mi idea es algo más o menos así:
for each reg in range("a1:a5")
if [ya existe]= false then
combobox1.additem reg
end if
next
'ya existe = busqueda en la lista del combo
1

1 respuesta

Respuesta
1
Hola Spinal!
No vas nada mal con tu razonamiento. Solamente lo he desarrollado un poco más.
El siguiente ejemplo creo que soluciona tu problema.
Comenzamos declarando un nuevo objeto del tipo "Collection" y al que denominaremos "ElementosUnicos".
Asume que el rango llamado "Datos" contiene una lista de elementos, algunos de los cuales podrían estar duplicados.
El código que te muestro hace un "Loop" a través de las celdas en el rango y añade un valor de celda a la colección "ElementosUnicos".
Usar la declaración "On Error Resume" hace que VBA ignore el error que ocurre si el dato no es único. Cuando ocurre un error, no se añade a la colección (que es justo lo que queremos).
A partir de ahí, el procedimiento transfiere los elementos no duplicados de la colección "ElementosUnicos" al cuadro de lista.
****** CODIGO ********
Sub BorrarDuplicados()
Dim TodaslasCeldas As Range, Celda As Range
Dim ElementosUnicos As New Collection
On Error Resume Next
For Each Celda In Range("Datos")
ElementosUnicos.Add Celda.Value, CStr(Celda.Value)
Next Celda
On Error GoTo 0
'Añadir elementos no duplicados a un Cuadro de lista.
For Each Item In ElementosUnicos
UserForm1.ListBox1.AddItem Item
Next Item
'Mostrar el número de entradas en el ListBox1.
UserForm1.Label1.Caption = _
"Elementos únicos: " & ElementosUnicos.Count
'Mostrar el UserForm
UserForm1.Show
End Sub
****** FIN DEL CODIGO ******
Créate un UserForm con un ListBox y un Label (te aconsejo que también te crees un botón de "ACEPTAR" y otro de "CANCELAR").
Espero que esto solucione tu problema.
Un saludo!
César M.C.M.
Eso soluciona mi problema... pero tengo una duda: ¿El objeto collection no admite registros duplicados?
Hola Spinal!
Efectivamente no los admite.
Por eso aprovechamos esa circunstancia y en el código desarrollado introducimos "On Error Resume Next". Esta instarucción motiva que VBA ignore el error que ocurre si el registro no es único. Cuando ocurre un error, no se añade el elemento a la colección (que es justo lo que queremos).
Un saludo!
César M.C.M.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas

Ordenar datos en listbox sin afectar la hoja activa

1 respuesta - Saludos de nuevo, jcgonzalez31, espero no parecerte demasiado ignorante,...

Una macro con msgbox.

1 respuesta - Hola. Necesito una macro que me avise cuando en una columna hay uno, o...

8 combobox dependientes enlazados

1 respuesta - Estimados expertos tengo el sigiente problema quiero realizar una macro en...

Vincular 2 combobox y 1 listbox con una tabla

1 respuesta - Hola Experto Ante todo gracias por tu tiempo y pedirte disculpas por...

Coincidir celdas desde un listbox

1 respuesta - Hola amigo otra vez aquí tratando de aclarar mis dudas este mundo de la...

Userform combobox dependiente

1 respuesta - Hola Amigo, Tengo una hoja columna A, B, C, D, con títulos, necesito que al...

Como le pongo titulo a las columnas de Listbox

1 respuesta - Buenas experto, Tengo un Listbox de 5 columnas y tienen el cabesado...

Selección con filtro en un ListBox dentro de un Formulario

1 respuesta - Buenos días Mi objetivo es poder llevar un registro de las facturas...