¿Cómo hacer filtros dinámicos en excel?

Tengo una inquietud sobre filtros dinámicos. Yo cree ya la macro de mis filtros dinámicos el cual guarde en la hoja donde esta el filtro bajo el método: " worksheet change"

Private Sub Worksheet_Change(ByVal Target As Range)
Sheets("Base_modelo").Columns("A:G").AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Range("B6:C7"), CopyToRange:=Range("B11:H11"), Unique:= _
        False
End Sub

Pero quiero algo mas estético, y es que mientras no este aplicando ningún filtro, no se muestre nada en el resultado, solo cuando digito el valor a consultar traiga el resultado correspondiente. No se si esto sea posible de realizar.

1 respuesta

Respuesta
2

Si entendí bien, quieres que el código se ejecute solamente si tú capturas el valor a consultar.

Prueba lo siguiente:

Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, Range("B6:C7")) Is Nothing Then
    Sheets("Base_modelo").Columns("A:G").AdvancedFilter Action:=xlFilterCopy, _
      CriteriaRange:=Range("B6:C7"), CopyToRange:=Range("B11:H11"), Unique:= _
      False
  End If
End Sub

Hola Dante, de antemano agradezco inmensamente tu ayuda.

No, seria algo como lo siguiente.

Si no tengo información en B7 o C7, no me muestre ningún resultado, así:

pero si digito un valor, me traiga la información que esta esta en la base, asi:

Me cuentas si fui claro, de nuevo muchas gracias

Prueba esto:

Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, Range("B7:C7")) Is Nothing Then
    If Range("B7").Value = "" And Range("C7").Value = "" Then
      Range("B12:H" & Rows.Count).ClearContents
    Else
      Sheets("Base_modelo").Range("A:G").AdvancedFilter 2, [B6:C7], [B11:H11], False
    End If
  End If
End Sub

¡Gracias! 

Dante, funciona perfecto, mil y mil gracias por tu ayuda.

Hola Dante buenas tardes, deseándote que todo vaya de maravilla.


Disculpa te molesto con una nueva consulta al respecto con los filtros dinámicos. Esto me ha funcionado muy bien, pero ahora me salió un error ya que en una de las bases donde aplico los filtros dinámicos no contuvo datos.

Intente generar un variable que contuviera el valor de la celda B2 de la base, y así generar un condicional, si es vacío no haga nada, de lo contrario aplique el filtro, así:

Sub filtro_lc()

Dim VALIDAR As String

VALIDAR = Worksheets("Base_lc").Range("B2").Value

If VALIDAR = "" Is Nothing Then
ElseIf Range("C10").Value = "" And Range("D10").Value = "" Then
Range("J29:L31").ClearContents
Else
Sheets("Base_lc").Range("A:K").AdvancedFilter 2, [C9:D10], [J28:L28], False
End If

End Sub

Pero me genera un error:

Error de compilación: No coinciden tipos

Y realmente no he logrado descubrir donde esta el error. Agradecería tu ayuda enormemente, para validar si lo que estoy haciendo es correcto o puedo mejor hacer algo adicional.

Te invito a suscribirte a mi canal.

Presiona clic en el siguiente enlace:

Cursos de Excel y Macros.

Puede ser porque tienes algún error en la celda. ¿Tienes fórmulas en la hoja?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas