¿Cómo cargar un combobox con valores únicos y de dos columnas?

Tengo un problema con carga un combobox que muestre 2 columnas y al mismo tiempo cargue sin duplicados, sólo pude cargarlo con las dos columnas lo otro aún no se como porque he tratado de adaptarle códigos que me he encontrado en la web, pero ninguno me queda. Espero me puedan ayudar un poco, muchas gracias de antemano.

Tengo este código:

Private Sub UserForm_Initialize()

ComboBox1.Clear
Sheets("hoja1").Select
ComboBox1.RowSource = "A5:b" & Range("A" & Rows.Count).End(xlUp).Row
ComboBox1.ColumnWidths = "40;120"

End Sub

Necesito quede exactamente igual a este, sólo que sin duplicados, me pregunto si es posible.

3 respuestas

Respuesta
1

·

Debes introducir los datos en el combobox uno a uno después de comprobar que el dato que vas a meter no está entre los ya introducidos.

Respecto a duplicados ¿Qué se entiende por duplicados? Si las dos columans van por separado podría ser que al final quedara un columna de combobox con más datos que la otra. Si van juntas entonces solo habria duplicados cuando coincidiesen los dos datos y el combobox tendría la misma cantidad de datos en las dos columnas.

También es interesante saber el tipo de datos que se introducen, si son númericos o texto.

Si me mandas el fichero con ejemplos de como actuar sería lo mejor para despejar dudas.

[email protected]

Prueba con esto en lugar de lo que tienes.

Private Sub UserForm_Initialize()
Dim i, j, ulfila As Integer
Dim repetido As Boolean
ComboBox1.Clear
Sheets("hoja1").Select
ulfila = Worksheets("hoja1").Range("A" & Rows.Count).End(xlUp).Row
ComboBox1.ColumnWidths = "40;120"
For i = 5 To ulfila
    repetido = False
    For j = 0 To ComboBox1.ListCount - 1
        If Cells(i, 1) & Cells(i, 2) = ComboBox1.List(j, 0) & ComboBox1.List(j, 1) Then
            repetido = True
            Exit For
        End If
    Next
    If Not repetido Then
        ComboBox1.AddItem Cells(i, 1)
        ComboBox1.List(ComboBox1.ListCount - 1, 1) = Cells(i, 2)
    End If
Next
End Sub
Respuesta

A todos

Si las columnas están vinculadas (nombre y N° de documento personal, por ejemplo) puedes intentar con lo siguiente:

Private Sub UserForm_Initialize()
Dim Q&, C
Application.ScreenUpdating = False: Set C = ActiveSheet.[a5]
Q = C.Parent.Cells(Rows.Count, "a").End(xlUp).Row - C.Row + 1
With Workbooks.Add.Sheets(1): C.Resize(Q, 2).AdvancedFilter 2, , .[a1], 82
  Q = .Cells(Rows.Count, "a").End(xlUp).Row
  C = .[a1].Resize(Q, 2).Value: .Parent.Close False: End With
With ComboBox1: .List = C: .ColumnCount = 2: .ColumnWidths = "40;120": End With
Application.ScreenUpdating = True
End Sub

¡Gracias! 

.)

Amigo Alonso te tardaste 15 meses en agradecer la ayuda: ¡Vaya que eres duro de convencer!

Jajajajaja

.

.

Respuesta

Necesito de su ayuda con un listbox que me trae de una gran base de datos 8 columnas, pero me esta trayendo los valores reperido segun la busqueda, ¿cómo hago para que solo me traiga el valor unico?

Aca esta la info:

Private Sub UserForm_Activate()
Application.ScreenUpdating = False
Sheets("INFORME RECEP").Select
Range("A2").Select

While ActiveCell.Value <> ""
ActiveCell.Offset(0, 7).Select

If ActiveCell.Value <> 0 Then
ActiveCell.Offset(0, -7).Select
LISTINFO.ColumnCount = 8
LISTINFO.AddItem
LISTINFO.List(LISTINFO.ListCount - 1, 0) = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
LISTINFO.List(LISTINFO.ListCount - 1, 1) = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
LISTINFO.List(LISTINFO.ListCount - 1, 2) = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
LISTINFO.List(LISTINFO.ListCount - 1, 3) = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
LISTINFO.List(LISTINFO.ListCount - 1, 4) = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
LISTINFO.List(LISTINFO.ListCount - 1, 5) = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
LISTINFO.List(LISTINFO.ListCount - 1, 6) = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
LISTINFO.List(LISTINFO.ListCount - 1, 7) = ActiveCell.Value
ActiveCell.Offset(1, -7).Select
Else
ActiveCell.Offset(1, -7).Select
End If
Wend
Sheets("IMP INF RECEP").Select
Range("H2").Select
Application.ScreenUpdating = True

End Sub

Private Sub UserForm_Activate()
Application.ScreenUpdating = False
Sheets("INFORME RECEP").Select
Range("A2").Select

While ActiveCell.Value <> ""
ActiveCell.Offset(0, 7).Select

If ActiveCell.Value <> 0 Then
ActiveCell.Offset(0, -7).Select
LISTINFO.ColumnCount = 8
LISTINFO.AddItem
LISTINFO.List(LISTINFO.ListCount - 1, 0) = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
LISTINFO.List(LISTINFO.ListCount - 1, 1) = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
LISTINFO.List(LISTINFO.ListCount - 1, 2) = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
LISTINFO.List(LISTINFO.ListCount - 1, 3) = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
LISTINFO.List(LISTINFO.ListCount - 1, 4) = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
LISTINFO.List(LISTINFO.ListCount - 1, 5) = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
LISTINFO.List(LISTINFO.ListCount - 1, 6) = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
LISTINFO.List(LISTINFO.ListCount - 1, 7) = ActiveCell.Value
ActiveCell.Offset(1, -7).Select
Else
ActiveCell.Offset(1, -7).Select
End If
Wend
Sheets("IMP INF RECEP").Select
Range("H2").Select
Application.ScreenUpdating = True

End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas