Con validación de datos no puedo autocompletar, pero sí usando macros en Excel
Hace días un amigo me preguntó sobre la posibilidad de tener la posibilidad de autocompletar textos usando Validación de datos. Aunque es una característica interesante, ésta no está disponible a menos que se tenga una lista de datos en un rango superior a la celda con validación de datos, pero no veo viable la opción.
Aprovechando el uso de macros se me ocurrió una idea precisamente usando macros y formularios de Excel.
Repasando la validación de datos
Vamos a ver dos opciones de ingreso de datos. Primero con Validación de datos. Tenemos una tabla para capturar NOMBRE y CARGO. El Cargo lo ingresaremos mediante lista de Validación.
En la Hoja 2 tendremos una lista la cual nombraremos lstCargos, como vemos en la Figura 1.
Figura 1. Asignar nombre a rango.
En la Hoja 1 estará nuestra Tabla de ingreso. Seleccionamos el rango donde deseemos aplicar la validación de datos y nos vamos a la pestaña Datos > Validación de datos. En el formulario de Validación elegimos Permitir Lista y en Origen ingresamos =lstCargos (ver Figura 2).
Figura 2. Uso de una lista como Validación de datos.
En la siguiente animación vemos en acción la Validación de datos usando una Lista.
Figura 3. Validación de datos en Excel.
Usando autocompletar mediante Formulario y ComboBox
Como les platicaba al principio, la solución alterna que di para autocompletar una lista fue usando un Formulario y un ComboBox, que éste a su vez sí tiene la característica de autocompletar. Mi idea inicial fue “cada que se elija una celda de cierto rango se abriría automáticamente un Formulario donde podamos elegir el dato de una lista y al dar Enter que se capture el valor e la celda”. Y esto es lo que resultó:
Primero creamos el Formulario. Presionamos [Ctrl] + [F11] para abrir el IDE de Visual Basic para Aplicaciones. Elegimos el proyecto activo (el archivo en uso) y después seleccionamos el menú Insertar > UserForm.
Figura 4. Controles de formulario.
En la Hoja 1 añadimos el evento Worksheet_SelectionChange:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'Si la celda elegida es B13:B18 se muestra el Formulario. If Not Intersect(Target, Range("B13:B18")) Is Nothing Then UserForm1.Show 'En todo caso no se muestra. Else End If End Sub
Al formulario le modificamos el evento Initialize y le ponemos el siguiente código:
Private Sub UserForm_Initialize() Me.ComboBox1.RowSource = "lstCargos" End Sub
Al primer botón le pondremos Cerrar en la propiedad Caption, así como True en la propiedad Cancel. Le añadimos el siguiente código:
Private Sub CommandButton1_Click() Unload Me End Sub
Al segundo botón le ponemos Aceptar en Caption y True en Default. Le añadimos el siguiente código:
Private Sub CommandButton2_Click() ActiveCell.Value = Me.ComboBox1.Value Unload Me End Sub
Figura 5. Propiedades de controles.
Al final sólo cambiamos el tamaño el formulario procurando ocultar los dos botones.
En la siguiente animación vemos cómo se muestra el formulario al elegir una celda del rango B13:B18.
Figura 6. Autocompletar con Formulario y ComboBox en Excel.
Video tutorial
Ver en el video en Youtube: https://www.youtube.com/watch?v=ykbM9UqmtHw
[youtube https://www.youtube.com/watch?v=ykbM9UqmtHw&w=560&h=315]