Llenar combobox con datos no repetidos en hoja excel

Tengo un libro de excel con 2 hojas, en la primera tengo mi base de datos (donde se repiten alguno datos varias veces), y en otra hoja estoy creando un combobox, lo que necesito es que el combobox me muestre los datos de la hoja 1, pero que me los muestre una sola vez (sin repetir los datos que esten varias veces).

1 respuesta

Respuesta
1

Si tu combobox es un control activex entonces utiliza este código, cambia "base" por el nombre de tu hoja que tiene tu base de datos. También cambia "A" por la columna que contiene los datos a cargar en el combo.

Sub agregar(combo As ComboBox, dato As String)
'Por.Dante Amor
    For i = 0 To combo.ListCount - 1
        Select Case StrComp(combo.List(i), dato, vbTextCompare)
            Case 0: Exit Sub 'ya existe en el combo y ya no lo agrega
            Case 1: combo.AddItem dato, i: Exit Sub 'Es menor, lo agrega antes del comparado
        End Select
    Next
    combo.AddItem dato 'Es mayor lo agrega al final
End Sub
'
Private Sub ComboBox1_DropButtonClick()
'Por.Dante Amor
    Set h2 = Sheets("base")
    'ComboBox1.Clear
    For i = 2 To h2.Range("A" & Rows.Count).End(xlUp).Row
        agregar ComboBox1, h2.Cells(i, "A")
    Next
End Sub

El código lo tienes que poner en la hoja.  

Sigue las Instrucciones para poner la macro en los eventos de worksheet

  1. Abre tu libro de excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. Del lado izquierdo dice: VBAProject, abajo dale doble click a worksheet(tu hoja)

4. Del lado derecho copia la macro


Saludos. Dante Amor

Hola, perdón pero por responder hasta hoy pero estaba sin internet, fíjate que ya intente utilizar el código pero me sale un error en la siguiente línea:

For i = 2 To h2.Range("W" & Rows.Count).End(xlUp).Row

Me dice que es error por desbordamiento, si me pudieras seguir ayudando te agradecería mucho! Gracias y saludos! :)

¿Cuántas filas de datos tienes en la hoja "base"?

tiene como 850,000 filas :/

Perdón, se fue un cero de más, tiene como 85,000 filas

Cambia toda la macro anterior por esta:

Dim cambio
'
Private Sub ComboBox1_Change()
    cambio = True
End Sub
'
Private Sub ComboBox1_DropButtonClick()
'Por.Dante Amor
    Set h2 = Sheets("base")
    anterior = ComboBox1
    If cambio = False Then ComboBox1.Clear
    ComboBox1 = anterior
    cambio = False
    h2.Columns("A:A").Copy h2.Range("AA1")
    u = h2.Range("AA" & Rows.Count).End(xlUp).Row
    h2.Range("AA1:AA" & u).RemoveDuplicates Columns:=1, Header:=xlYes
    For i = 2 To h2.Range("AA" & Rows.Count).End(xlUp).Row
        ComboBox1.AddItem h2.Cells(i, "AA")
    Next
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas