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 2Creamos 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