domingo, 19 de diciembre de 2021

VBA EXCEL 2022: LLENAR COMBOBOX DINAMICO CON DATOS UNICOS DE UNA COLUMNA

(LOS DATOS NO SE REPITEN E IGNORA CELDAS VACIAS)



Con este código podremos llenar un cuadro combinado (combobox) con DATOS UNICOS, es decir, que NO SE REPITEN, a partir de los datos de una columna. Estos datos no necesitan estar en una tabla y pueden estar uno separado del otro, ya que nuestro código solo considerará aquellas celdas que posean algún dato.

ANTES: Nuestro libro de excel debe estar habilitada para ejecutar macros, es decir, con la extención .xlsm y nuestra pestaña de programador debe estar en modo diseño para que podamos escribir código y editar los objetos que vamos a utilizar.


PASO 1: En una columna escribimos nuestros datos. Por el bien de este ejemplo, pondremos un encabezado y además separaremos uno de nuestros datos del resto, pero no es necesario.

Datos en una columna. No es una tabla.


PASO 2: Creamos un botón de comando(commandbutton) en una de nuestras hojas, en este caso la primera hoja, y tambien creamos un formulario. Hacemos doble clic sobre el botón de comando y escribimos lo siguiente:

Private Sub CommandButton1_Click()

UserForm1.Show

End Sub

Con esto mostraremos el formulario al hacer clic en el botón de comando.


PASO 3: En el formulario creamos un cuadro combinado (combobox). Creamos también una etiqueta (label) para describír qué datos nos mostrará el cuadro combinado. 



PASO 4: Hacemos doble clic en el combobox y escribimos lo siguiente:

Private Sub ComboBox1_Enter()

Dim Dictionary As Object
Set Dictionary = CreateObject("Scripting.Dictionary")
    
With Sheets("Hoja1")
For Each cell In .Range("B4:B" & .Cells(.Rows.Count, 2).End(xlUp).Row)
If Dictionary.exists(cell.Value) Or IsEmpty(cell.Value) Then
Else
Dictionary.Add cell.Value, Dictionary.Count + 1
ComboBox1.AddItem cell.Value
End If
Next cell
End With
    
End Sub

Con esto declaramos y creamos un objeto de tipo diccionario, llamado Dictionary. Situandonos en la "Hoja1", por cada celda en el rango desde B4 a B(ultima fila con un dato, en este caso 14) , si el valor de la celda existe en el diccionario; o bien, está vacío, no haremos nada; de lo contrario, añadiremos un elemento al diccionario. El elemento es un par de datos y está compuesto por una llave y su valor. La llave sería el valor de la celda, y su valor, en este caso, estaría vacío. Finalmente añadimos también el valor de la celda al combobox1. 
 
COMENTARIO

  • Las llaves y valores del diccionario para este ejemplo serían los siguientes:

  • Si cambiamos el valor de Empty por un String, ejemplo: "None", quedarían de la siguiente forma:
  • Si cambiamos el valor de Empty por Dictionary.count + 1, quedarían de la siguiente forma:


PASO 5: Ejecutar





LINK DE DESCARGA

No hay comentarios.:

Publicar un comentario