dudas con autofiltro

20/12/2006 - 03:47 por Ivan | Informe spam
hola a todos

he estado practicando un poco con los autofiltros por codigo, y me han
surgido un par (mas) de dudas sobre su manejo ->

1.- ¿es posible usar como criterio de filtrado varias celdas de una
misma fila en una sola pasada? me da la impresion de que no, o al menos
en la ayuda no consigo aclararlo, pero ¿quizas se pueda utilizar algo
como CurrentArray, o alguna propiedad o metodo que desconozco?

en las practicas que he estado realizando he usado una serie de bucles
celda a celda 'achicando' el rango filtrado, pero se hace un poco lento
(creo, igual se ralentiza en otra parte del codigo)

esta es la parte del codigo que realiza el filtrado, y que quizas sea
muy optimizable (filtra los registros que sean iguales en el rango
'a:e' )->

With Worksheets("testTransponer")
If .[a2] = "" Then Exit Sub
If .AutoFilterMode Then .AutoFilterMode = False
f = .[a65536].End(xlUp).Row
For Each celda In .Range("a2:a" & f)
criterio = celda.Value
celda.CurrentRegion.AutoFilter _
field:=1, _
Criteria1:=criterio
For cc = 2 To 5
criterio = celda.Cells(1, cc)
With .Cells.SpecialCells(xlCellTypeVisible)
If .Rows.Count > 1 Then
.AutoFilter _
field:=cc, _
Criteria1:=criterio
End If
End With
Next

2.- esta duda quizas incluso ya me la hayais respondido en alguna
ocasion, pero la verdad es que no lo recuerdo. ¿el rango filtrado
(.autofilter.range) incluye entre sus filas (la cuenta como tal) la de
encabezado (titulos de campo)?

creo entender que si, de ahi el uso normalmente de .resize.offfset(1)
para trabalar con los registros, pero hoy, en mis experimentos, me ha
surgido alguna duda, y de ahi la consulta.

bueno, si podeis echarme una mano de nuevo, os lo agradezco

un saludo y hasta pronto
Ivan
 

Leer las respuestas

#1 Héctor Miguel
20/12/2006 - 08:08 | Informe spam
hola, Ivan !

1) no comentas/expones/... cual seria al uso [o el siguiente paso] una vez 'auto-filtrados' -todos- los campos en el rango
[en caso de existir 'datos que filtrar'... -> cual seria la utilidad de tal 'tarea'] -?-

2) el proceso esta -realmente- haciendo un 'barrido/escaneo/bucle/...' por todas y cada una de las celdas [cada vez] -???-
[seguramente] esa es la razon del tiempo que le toma al codigo terminar su tarea [al menos, la parte que expones] ;)

3) [probablemente] si te sirve 'la inversa'... prueba:
a) ordenando primero las columnas C, D y E y al ultimo las columnas A y B [en ese orden]
b) luego aplica filtros avanzados [SIN la opcion de criterios] con la opcion de solo registros unicos ;)
-> obtendras un listado de los elementos 'unicos' en el rango [los 5 campos distintos] y se ocultaran los duplicados -?-

4) otra alternativa pudiera ser 'evaluar' una formula con sumaproducto(...) [conociendo que datos 'coincidentes' se buscarian] -?-

5) [fialmente] los autofiltros SI contemplan la fila de encabezados [en su propiedad 'autofilter.range'] ;)

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

__ la consulta original __
he estado practicando un poco con los autofiltros por codigo, y me han surgido un par (mas) de dudas sobre su manejo ->
1.- es posible usar como criterio de filtrado varias celdas de una misma fila en una sola pasada?
me da la impresion de que no, o al menos en la ayuda no consigo aclararlo, pero
quizas se pueda utilizar algo como CurrentArray, o alguna propiedad o metodo que desconozco?
en las practicas que he estado realizando he usado una serie de bucles celda a celda 'achicando' el rango filtrado
pero se hace un poco lento (creo, igual se ralentiza en otra parte del codigo)
esta es la parte del codigo que realiza el filtrado, y que quizas sea muy optimizable (filtra los registros que sean iguales en el rango 'a:e' )->
With Worksheets("testTransponer")
If .[a2] = "" Then Exit Sub
If .AutoFilterMode Then .AutoFilterMode = False
f = .[a65536].End(xlUp).Row
For Each celda In .Range("a2:a" & f)
criterio = celda.Value
celda.CurrentRegion.AutoFilter _
field:=1, _
Criteria1:=criterio
For cc = 2 To 5
criterio = celda.Cells(1, cc)
With .Cells.SpecialCells(xlCellTypeVisible)
If .Rows.Count > 1 Then
.AutoFilter _
field:=cc, _
Criteria1:=criterio
End If
End With
Next

2.- esta duda quizas incluso ya me la hayais respondido en alguna ocasion, pero la verdad es que no lo recuerdo.
el rango filtrado (.autofilter.range) incluye entre sus filas (la cuenta como tal) la de encabezado (titulos de campo)?
creo entender que si, de ahi el uso normalmente de .resize.offfset(1) para trabalar con los registros
pero hoy, en mis experimentos, me ha surgido alguna duda, y de ahi la consulta...

Preguntas similares