Quiero filtrar números con Macro

Tengo conocimientos muy básicos sobre programación y estoy trabajando con un código en una base de datos que tome de Internet y lo adapte a mi necesidad me funciona perfectamente para filtrar texto pero cuando lo modifico para que me filtre por números de identidad no me funciona se que debo estar haciendo algo mal pero no lo detecto, adjunto el código por si algún experto me puede ayudar a solucionar .

Le agradezco a quien me pueda ayudad

Private Sub TextBox1_Change()

If TextBox1.Text <> "" Then

criteriofiltro = "*" & Sheets("Filtro").TextBox1.Text & "*"
Range("B5").AutoFilter Field:=2, Criteria1:=criteriofiltro

Else
criteriofiltro = ""
Sheets("Filtro").Range("B5").CurrentRegion.AutoFilter

End If

End Sub

1 Respuesta

Respuesta
1

Revisa si lo siguiente es lo que necesitas:

Private Sub TextBox1_Change()
  If TextBox1.Text <> "" Then
    If IsNumeric(Sheets("Filtro").TextBox1.Text) Then
      criteriofiltro = Sheets("Filtro").TextBox1.Value
    Else
      criteriofiltro = "*" & Sheets("Filtro").TextBox1.Value & "*"
    End If
    Range("B5").AutoFilter Field:=2, Criteria1:=criteriofiltro
  Else
    criteriofiltro = ""
    Sheets("Filtro").Range("B5").CurrentRegion.AutoFilter
  End If
End Sub

Muchas gracias por su ayuda 

pero al agitar el numero en el texbox1 se ejecuta el filtro pero no me muestra el numero solicitado

así me queda para mi caso no entiendo que me falta la ejecute paso a paso para ver si me falta una accion pero no pude dectar mi falla

----------------------------------------------------------------------------------------

Private Sub TextBox1_Change()

If TextBox1.Text <> "" Then

If IsNumeric(Sheets("Datos").TextBox1.Text) Then
criteriofiltro = Sheets("Datos").TextBox1.Value
Else
criteriofiltro = "*" & Sheets("Datos").TextBox1.Text & "*"
End If
Range("B8").AutoFilter Field:=2, Criteria1:=criteriofiltro

Else
criteriofiltro = ""
Sheets("Datos").Range("B8").CurrentRegion.AutoFilter

End If

End Sub

¿Por qué cambiaste a B8?


Así tengo mis datos de prueba antes del filtro:

Así me quedan los datos después de filtrar:


Puedes poner un par de imágenes para ver cómo tienes tus datos (sigue el ejemplo de mis imágenes como guía para que tú pongas tus imágenes).

Los datos que tengo están así los filtro por nombre pero los quiero filtrar por cedula

Y qué tienes en la columna B, ¿son números con formato "00000000000" o son textos?

es una cadena personalizada de 13 caracteres requeridos de tipo numero

¿Y cómo es que muestras los ceros a la izquierda?

Si son números entonces no podrías poner ceros al izquierda.

Podrías poner otra imagen, pero en esta ocasión selecciona la celda B14 para que yo pueda ver lo que te aparece en la "Barra de fórmulas".

el formato de la columna es personalizado

Prueba de esta manera:

Private Sub TextBox1_Change()
  If TextBox1.Text <> "" Then
    If IsNumeric(Sheets("Filtro").TextBox1.Value) Then
      criteriofiltro = Format(Val(Sheets("Filtro").TextBox1.Value), String(13, "0"))
    Else
      criteriofiltro = "*" & Sheets("Filtro").TextBox1.Value & "*"
    End If
    Range("B8").AutoFilter Field:=2, Criteria1:=criteriofiltro
  Else
    criteriofiltro = ""
    Sheets("Filtro").Range("B5").CurrentRegion.AutoFilter
  End If
End Sub

Pero tendrías que capturar el número de cédula completo.


¿Quieres escribir un número y que te filtre todas las cédulas que empiezan con ese número o que contienen ese número?

Para mi es más fácil y seguro digitar el numero de cédula y que me vaya filtrando los valores parecidos hasta llegar al valor exacto tal y como lo hace con las palabras por ejemplo me busca todas las palabras que contienen luis

Prueba lo siguiente:

Private Sub TextBox1_Change()
  Dim arr As Object, lr As Long
  Application.ScreenUpdating = False
  '
  Set dic = CreateObject("Scripting.Dictionary")
  If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilterMode = False
  lr = Range("B" & Rows.Count).End(3).Row
  For i = 8 To lr
    If InStr(1, Range("B" & i).Value, TextBox1.Value) > 0 Then
      dic(Range("B" & i).Value) = Range("A" & i).Value
    End If
  Next
  '
  If TextBox1.Text <> "" Then
    ActiveSheet.Range("A7:B" & lr).AutoFilter 1, dic.items, xlFilterValues
  End If
  Application.ScreenUpdating = True
End Sub

Nota: lo que hace la macro es buscar en la columna B, si encuentra un número almacena el dato de la columna A en un "Diccionario" y al último filtra por la columna A. Aparentemente está filtrando por la columna A, pero en realidad está buscando en la columna B.

Prueba y me comentas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas