Llene un cuadro de lista con valores únicos de una hoja de trabajo usando VBA en Microsoft Excel

Anonim

En este artículo, crearemos un cuadro de lista en forma de usuario y lo cargaremos con valores después de eliminar los valores duplicados.

Los datos brutos que insertaremos en el cuadro de lista constan de nombres. Estos datos brutos contienen duplicidad en nombres definidos.

En este ejemplo, hemos creado un formulario de usuario que consta de List Box. Este cuadro de lista mostrará nombres únicos de los datos de muestra. Para activar el formulario de usuario, haga clic en el botón enviar.

Este formulario de usuario devolverá el nombre seleccionado por el usuario como salida en un cuadro de mensaje.

Explicación lógica

Antes de agregar nombres en el cuadro de lista, hemos utilizado el objeto de colección para eliminar nombres duplicados.

Hemos realizado los siguientes pasos para eliminar entradas duplicadas: -

  1. Se agregaron nombres del rango definido en la hoja de Excel al objeto de colección. En el objeto de colección, no podemos insertar valores duplicados. Entonces, el objeto Collection arroja un error al encontrar valores duplicados. Para manejar los errores, hemos utilizado la declaración de error "En caso de error, reanudar a continuación".

  2. Después de preparar la colección, agregue todos los elementos de la colección a la matriz.

  3. Luego, inserte todos los elementos de la matriz en el Cuadro de lista.

Siga a continuación para obtener el código

 Opción Sub explícito en ejecución () UserForm1.Show End Sub 'Agregar código a continuación en el formulario de usuario Opción Sub-comando explícito privado Botón1_Click () Dim var1 As String Dim i As Integer' Recorrer todos los valores presentes en el cuadro de lista 'Asignar el valor seleccionado a la variable var1 For i = 0 To ListBox1.ListCount - 1 If ListBox1.Selected (i) Then var1 = ListBox1.List (i) Salir para finalizar si sigue 'Descargar el formulario de usuario. Unload Me 'Visualizando el valor seleccionado MsgBox "Ha seleccionado el siguiente nombre en el List Box:" & var1 End Sub Private Sub UserForm_Initialize () Dim MyUniqueList As Variant, i As Long' Calling UniqueItemList function 'Asignando el rango como parámetro de entrada MyUniqueList = UniqueItemList (Range ("A12: A100"), True) With Me.ListBox1 'Borrar el contenido del cuadro de lista. Borrar' Agregar valores en el cuadro de lista para i = 1 a UBound (MyUniqueList) .AddItem MyUniqueList (i) Siguiente i ' Seleccionar el primer elemento .ListIndex = 0 End With End Sub Private Function UniqueItemList (InputRange As Range, _ HorizontalList As Boolean) As Variant Dim cl As Range, cUnique As New Collection, i As Long 'Declarar una matriz dinámica Dim uList () As Variante 'Declarar esta función como volátil' Significa que la función se volverá a calcular siempre que se produzca un cálculo en cualquier aplicación de celda.Volátil en caso de error Reanudar Siguiente 'Agregar elementos a la colección' Solo se insertará un elemento único 'La inserción de un elemento duplicado pasará por un error Para cada cl In InputRange If cl.Value "" Then 'Añadiendo valores en la colección cUnique.Add cl.Value, CStr (cl.Value) End If Next cl' Inicializando el valor devuelto por la función UniqueItemList = "" If cUnique.Count> 0 Then 'Cambiar el tamaño del tamaño de la matriz ReDim uList (1 a cUnique.Count)' Insertar valores de la colección a la matriz para i = 1 a cUnique.Count uList (i) = cUnique (i) Siguiente i UniqueItemList = uList 'Verificando el valor de HorizontalList' Si el valor es verdadero, entonces se transpone el valor de UniqueItemList Si no es HorizontalList Then UniqueItemList = _ Application.WorksheetFunction.Transpose (UniqueItemList) End If End If On Error GoTo 0 End Function 

Si te gustó este blog, compártelo con tus amigos en Facebook. Además, puede seguirnos en Twitter y Facebook.

Nos encantaría saber de usted, háganos saber cómo podemos mejorar nuestro trabajo y hacerlo mejor para usted. Escríbanos al sitio de correo electrónico