Forums Últimos mensajes - Powered by IBM
 

Otra Sobre filtros

27/10/2005 - 04:55 por Raúl Matias | Informe spam
Hola, hace unos días pedí ayuda para hacer una macro o función para filtrar
una base de datos en excel.
el objetivo era que ingresando (por ejemplo) el Nº 3 en una determinada
celda, excel me filtre todos los registros con el código tres.
Uno de los participantes del foro (Héctor Miguel) me dio la siguiente macro,
que funciona perfectamente:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$D$1" Then Exit Sub
Range("a1").AutoFilter Field:=2, Criteria1:=Range("d1")
If IsEmpty(Range("d1")) Then Me.ShowAllData
End Sub

Pero ahora quisiera saber como modificarla para filtrar con un criterio mas,
por ejemplo:

en la celda A escribo "3" y en la B "6", y excel me filtre todos los
registros con el codigo 3 y a su vez con el 6

Espero se me entienda (jeje)

desde ya muchas gracias

Gracias Hector!
 

Leer las respuestas

#1 Héctor Miguel
27/10/2005 - 06:29 | Informe spam
hola, Raúl !

... la siguiente macro... funciona
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$D$1" Then Exit Sub
Range("a1").AutoFilter Field:=2, Criteria1:=Range("d1")
If IsEmpty(Range("d1")) Then Me.ShowAllData
End Sub
... quisiera... modificarla para filtrar con un criterio mas, por ejemplo:
... celda A escribo "3" y en la B "6"... filtre... los registros con el... 3 y... con el 6 [...]



suponiendo que 'A' es la celda 'D1'... y 'B' es la celda 'E1'...
y que el rango filtrado esta en 'A:B'... y que filtras el campo 2 [columna B]...
[creo que] cabria la posibilidad de 4 opciones de filtrado 'intermedio' [no se cual filtrarias primero]
que podrian ser: A... o B... o A+B... o ninguna :))

prueba con las siguientes adaptaciones al codigo anterior...
en el modulo de codigo de 'esa' hoja ==Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("d1:e1")) Is Nothing Then Exit Sub
Dim Opcion As Byte
Opcion = 0 - Not IsEmpty(Range("d1"))
Opcion = Opcion - 2 * Not IsEmpty(Range("e1"))
With Range("a1")
Select Case Opcion
Case 0: If Me.FilterMode Then Me.ShowAllData
Case 1: .AutoFilter Field:=2, Criteria1:=Range("d1")
Case 2: .AutoFilter Field:=2, Criteria1:=Range("e1")
Case 3: .AutoFilter Field:=2, Criteria1:=Range("d1"), _
Operator:=xlOr, Criteria2:=Range("e1")
End Select
End With
End Sub

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

Preguntas similares