Filtrar Combobox (lista) para quitar nombres repetidos.

Tengo el siguiente codigo para cargar una lista en un combobox de un Userform, pero el problema es que manejo muchos nombres repetidos de clientes y todos me aparecen en la lista del combobox, como puedo decirle que solo me muestre una vez el nombre en caso de que se repita varias veces en la lista.

Codigo:

Private Sub ComboBox1_Enter()
Dim Fila As Long
Dim Final As Long
Dim Lista As String

For Fila = 1 To ComboBox1.ListCount
ComboBox1.RemoveItem 0
Next Fila

Final = GetUltimoR(Hoja3)
For Fila = 2 To Final
Lista = Hoja3.Cells(Fila, 2)
ComboBox1.AddItem (Lista)
Next
End Sub

3 respuestas

Respuesta
2

Anexo otra opción

Private Sub ComboBox1_Enter()
    Dim Fila As Long
    Dim Final As Long
    Dim Lista As String
    For Fila = 1 To ComboBox1.ListCount
        ComboBox1.RemoveItem 0
    Next Fila
    Final = GetUltimoR(Hoja3)
    For Fila = 2 To Final
        Lista = Hoja3.Cells(Fila, 2)
        existe = False
        For i = 0 To ComboBox1.ListCount - 1
            If ComboBox1.List(i) = Lista Then existe = True
        Next
        If existe = False Then ComboBox1.AddItem (Lista)
    Next
End Sub

[sal u dos

Respuesta
1

Una posibilidad, suponiendo que el rango con los nombres duplicados tiene aplicado el nombre "Lista":

Private Sub UserForm_Initialize()
    On Error GoTo captura
    Dim n As Long
    For n = 1 To Range("Lista").Rows.Count
        Me.ComboBox1.AddItem Evaluate("=INDEX(Lista,SMALL(IF(MATCH(Lista,Lista,0)=ROW(INDIRECT(" & """1:""" & "&COUNTA(Lista))),MATCH(Lista,Lista,0)," & """""" & ")," & n & "-ROW(Lista)+1))")
    Next n
Exit Sub
captura:
    If Err.Number = -2147352571 Then Exit Sub Else MsgBox Err.Number & " - " & Err.Description
End Sub

Saludos_

Respuesta
1

:)

Hola! Armando (y jrcces). Otra posibilidad sería:

Private Sub ComboBox1_Enter()
Dim C As Range
With CreateObject("Scripting.Dictionary")
  For Each C In Hoja3.Range("b2", Hoja3.[b2].End(xlDown))
    If Not .Exists(Str(C)) Then .Add Str(C), Empty
  Next
  ComboBox1.List = .Keys
End With
End Sub

Saludos, Mario (Cacho) R.

:)

¡Gracias!  Corrí tu código en mi archivo pero no funcionó, de todas maneras agradezco tu aporte.

:)

Te "tiró" un error... ¿O qué?

Te lo pregunto pues es el método más eficiente...

:)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas