Filtros en VBA

5 envíos / 0 nuevos
Último envío
Jesus_2012
Imagen de Jesus_2012
Offline
última acción: Hace 7 años 2 meses
Nivel 1 - 200 puntos
alta: 17/05/2011 - 15:42
Puntos: 390
Filtros en VBA

 

Hola a todos,

Aquí solicitandoles un consejo sobre el siguiente problema que tengo en mi código. Básicamente, es un filtro avanzado en base a cuatro criterios. Los primeros tres filtros si me los ejecuta pero el cuatro y quinto no lo hace. No sé si me pudieran orientar qué es lo que está mal y como puedo solucionarlo.

 

Saludos y gracias!

 

 

 

If [J22] = 0 And [K22] = 0 And [L22] = 0 And [M22] = 0 Then
       datos = MsgBox("Error: Seleccione los criterios de búsqueda")
        End If
        Range("BD[#All]").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange _
        :=Range("J21:M22"), Unique:=False
                  
If [J22] = 0 And [K22] <> 0 And [L22] <> 0 And [M22] = 0 Then
    Range("BD[#All]").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange _
        :=Range("K21:L22"), Unique:=False
        End If
       
If [J22] <> 0 And [K22] <> 0 And [L22] = 0 And [M22] = 0 Then
          Range("BD[#All]").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange _
        :=Range("J21:K22"), Unique:=False
        End If


If [J22] <> 0 And [K22] = 0 And [L22] = 0 And [M22] <>  0 Then
          Range("BD[#All]").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange _
        :=Range("J21:M22"), Unique:=False
        End If

If [J22] <> 0 And [K22] = 0 And [L22]  <> 0 And [M22] = 0 Then
          Range("BD[#All]").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange _
        :=Range("J21:L22"), Unique:=False
        End If

 

 

 

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 13 horas 52 segs
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11005
Re: Filtros en VBA

Cuando en el cuarto caso pones que el rango de criterios es J21:M22 estás considerando desde la J hasta la M, es decir, que también incluye lo que tengas en las columnas K y L (que por las condiciones que pones ahí serán ceros)

El filtro avanzado no permite poner un rango discontinuo en el filtro, así que no puedes decir que tu criterio está en la J y en la M nada más.

 

Yo he resuelto esto en alguna ocasión poniendo una condición en la celda en vez de un cero, por ejemplo >=0, así todos los números positivos cumplirían (según los datos pongo una cosa u otra)

Trato de poner siempre que puedo un rango de criterios único que me sirva para todos los casos, en vez de seleccionar distintos rangos mediante VBA 

 

------
Ya sé Excel, pero necesito más.

Jesus_2012
Imagen de Jesus_2012
Offline
última acción: Hace 7 años 2 meses
Nivel 1 - 200 puntos
alta: 17/05/2011 - 15:42
Puntos: 390
Re: Filtros en VBA

 

  Hola Paco,

 

  Trabaje con lo que me recomendaste de >=0, sin embargo aún así no funcionó. No entendí bien la parte de poner un rango de criterios único, no sé si me pudieras apoyar dando un poco más detalle de como realizarlo.

 

Básicamente lo que busco es que se pueda filtrar a partir de cuatro criterios, todas las combinaciones posibles. Por eso opté por utilizar distintos rangos.

 

De antemano muchas gracias!!

Saludos!

Jesús

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 13 horas 52 segs
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11005
Re: Filtros en VBA

con lo de rango de criterios único, me refiero a que tiene que ser un rango continuo, es decir, que las condiciones deben estar una al lado de la otra, no puedes tomar la condición en la columna J y también la de la M, saltándote las columnas K y L

lo que puedes hacer es repetir algunos criterios para que queden juntos aquellos que necesitas.

partes de un rango de criterios con esta estructura:

campo1-campo2-campo3-campo4

este rango te vandría para criterios 1-2, 2-3, 3-4, 1-2-3, 2-3-4

pero ¿cómo pones el criterio 1 y 4? pues repite el criterio 1 a continuación del 4

campo1-campo2-campo3-campo4-campo1

con esto, eligiendo como rango de criterio las dos últimas columnas ya tienes el caso 1-4 (o 4-1 que da igual)

también tenemos el 1-3-4

¿y cómo conseguiríamos el caso 1-3? pues añadiendo el campo3 a continuación

campo1-campo2-campo3-campo4-campo1-campo3

(aún faltaría un caso 2-4)

de esta manera, queda algo más compacto que repitiendo los criterios completos, que sería otra opción, tener un rango de criterios para cada caso.

Como ves, el orden de los campos para los criterios no tiene por qué coincidir con el orden en que aparecen en el rango donde están los datos

 

------
Ya sé Excel, pero necesito más.

Jesus_2012
Imagen de Jesus_2012
Offline
última acción: Hace 7 años 2 meses
Nivel 1 - 200 puntos
alta: 17/05/2011 - 15:42
Puntos: 390
Re: Filtros en VBA

 

 Muchísimas Gracias Paco,

 

Efectivamente la solución que me propusiste sirvió de maravilla.

 

De nueva cuenta muchas gracias!

 

Saludos,

Jesús