viernes, 17 de diciembre de 2021

Filtrar registros de una hoja en ListBox por un campo seleccionado de un ComboBox

Les muestro el código que hace posible filtrar datos en donde el criterio de búsqueda a evaluar sea un campo o columna especifica seleccionada por el usuario a traves de un ComboBox segun el framento o palabra completa capturada por el usuario en el TextBox1 del evento Change.

  1. Crear una hoja con datos.
  2. Ingresar al editor VBA excel.
  3. Insertar un formulario con los componentes:
    • Etiqueta (Label1)
    • Caja de texto (TextBox1)
    • Cuadro de lista (ListBox1)
  4. Escribir el siguiente código.

Private Sub UserForm_Initialize()
Me.ComboBox1.AddItem "ID"
Me.ComboBox1.AddItem "NOMBRE"
Me.ComboBox1.AddItem "FECHA"
Me.ComboBox1.AddItem "SEXO"
Me.ComboBox1.AddItem "DIRECCION"
Me.ComboBox1.AddItem "TELEFONO"
Me.ComboBox1.AddItem "CORREO"
End Sub
Private Sub TextBox1_Change()
Dim intregistros, i As Integer
Dim intfila As Integer
'Definimos el número de columnas
Me.ListBox1.ColumnCount = 7
'Definimos el ancho de cada columna
Me.ListBox1.ColumnWidths = "30;160;80;80;80;80;80"
'Limpiar el lixtbox
ListBox1.Clear
'Agregar el elemento en las respectivas columnas
ListBox1.AddItem
intfila = ListBox1.ListCount - 1
ListBox1.Column(0, intfila) = "ID"
ListBox1.Column(1, intfila) = "NOMBRE"
ListBox1.Column(2, intfila) = "FEC_NAC"
ListBox1.Column(3, intfila) = "SEXO"
ListBox1.Column(4, intfila) = "DIRECCION"
ListBox1.Column(5, intfila) = "TELEFONO"
ListBox1.Column(6, intfila) = "CORREO"
'Seleccionamos el campo a buscar
intcampo = Me.ComboBox1.ListIndex + 1
'Contamos el numero de registros en la hoja 1
intregistros = Hoja1.Range("A1").CurrentRegion.Rows.Count
'Recorre todos los registros a partir de la fila 2 de la hoja1
For i = 2 To intregistros
'Si contiene alguna cadena de la columna seleccionada que coincida con TextBox1
    If InStr(Hoja1.Cells(i, intcampo), Me.TextBox1.Value) Then
        'Carga a la lista el registro de la hoja 1
        ListBox1.AddItem Hoja1.Cells(i, 1)
        ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Hoja1.Cells(i, 2)
        ListBox1.List(Me.ListBox1.ListCount - 1, 2) = Hoja1.Cells(i, 3)
        ListBox1.List(Me.ListBox1.ListCount - 1, 3) = Hoja1.Cells(i, 4)
        ListBox1.List(Me.ListBox1.ListCount - 1, 4) = Hoja1.Cells(i, 5)
        ListBox1.List(Me.ListBox1.ListCount - 1, 5) = Hoja1.Cells(i, 6)
        ListBox1.List(Me.ListBox1.ListCount - 1, 6) = Hoja1.Cells(i, 7)
    End If
Next i
End Sub

Filtrar genero femenino según el campo sexo de la hoja1


Hoja 1 con Datos







No hay comentarios.:

Publicar un comentario