Bucle para filtro

Buenos días, necesito un poco de ayuda con la siguiente macro:

la macro realiza un filtro doble y necesito que se repita por ejemplo 1000 veces, pero cambiando el criterio (criteria1) de los dos filtros empieza en 1 y siempre sumará +1 hasta alcanzar las 1000 repetíciones.

Esto es la base de mi macro:

Sub ALBARANUNIDAD()


'ocultamos el procedimiento
Application.ScreenUpdating = False


Range("A1").Select
Sheets("ALBARÁN").Select


'añado 2 hojas temporales datos filtrados y suma de 1 filtro


Sheets.Add
ActiveSheet.Name = "RESULTADO"
Sheets.Add
ActiveSheet.Name = "SUMA"


'hago el 1 autofiltro para tener el subtotal
Sheets("ALBARÁN").Select
'selecciono columna M del título para filtrar
Range("M1").Select
Selection.AutoFilter
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 3
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 1
Selection.AutoFilter Field:=13, Criteria1:="1" 'atención: dejé col B


'copio y pego el resultado del subtotal
Range("O10001").Copy
Sheets("SUMA").Select
Range("A1").PasteSpecial Paste:=xlValues
Sheets("ALBARÁN").Select

'selecciona el 2 rango filtrado para copiar y pegar
Selection.AutoFilter Field:=14, Criteria1:="1" 'atención: dejé col B


'selecciona el rango filtrado
Range("A2:L10000").Select
' copio los valores filtrados a la hoja temporal
Selection.Copy
Sheets("RESULTADO").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'esto no se para que es pero me salía al grabar la macro.
'NOTA: es para quitar el parpadeo que queda cuando realizás un copy
Application.CutCopyMode = False
Sheets("ALBARÁN").Select
Application.CutCopyMode = False
Selection.AutoFilter
Range("A1").Select

Gracias de antemano espero que alguien pueda ayudarme.

1 Respuesta

Respuesta
1

Entiendo que necesitas un bucle del tipo:

for x = 1 to 1000

donde el criterio entonces será x. Entonces empezaría aquí:

For x = 1 to 1000

Sheets("ALBARÁN").Select
'selecciono columna M del título para filtrar....ESTO SERÁ B???
Range("B1").Select
Selection.AutoFilter
Selection.AutoFilter Field:=2, Criteria1:=x 'atención: dejé col B

Aquí sigue el resto de lo que se hace con el rango filtrado. Para el 2do filtro también utilizá x

Hasta llegar aquí que son las últimas líneas de tu macro

next x

Sheets("ALBARÁN").Select
Application.CutCopyMode = False
Selection.AutoFilter
Range("B1").Select

End sub

Lo que no está aclarado es cómo se copia cada rango... según donde está ahora el inicio del bucle se está copiando siempre en el mismo lugar.

Si hay que crear 1 hoja distinta cada vez tendrás que incluir esas instrucciones también dentro del bucle... Probalo y aclarame

Sdos

Elsa

http://aplicaexcel.galeon.com/manuales.htm

PD) Podemos entender que se les quede alguna consulta sin cerrar (como en tu caso x vacaciones o alguna otra razón justificable). Pero más de 1 ya es negligencia... no olvides finalizar la consulta si el tema queda resuelto.

Muchas gracias, en lo que escribí arriba faltaban cosas por eso ves que siempre escribe en la misma celda, mi problema ahora es otro, al hacer repeticiones seria posible que FOR x = 1 To (que este numero haga referencia al valor máximo de una celda o se pueda introducir a mano) porque sino cuando en el filtro no encuentra nada me copia todo en la otra hoja.

Gracias.

Buenas otra vez, lo he intentado de esta manera, pero se salta la función FOR.

Sub ALBARASUMA()
'
' CHFICHERO Macro
' Macro grabada el 09/02/2012 por usuario
'ocultamos el procedimiento
Application.ScreenUpdating = False
Range("A1").Select
Sheets("ALBARÁN").Select
'añado una hoja temporal llamada template
Sheets.Add
ActiveSheet.Name = "RESULTADO"
Sheets.Add
ActiveSheet.Name = "SUMA"
'NUMERO DE REPETICIONES
Dim x As Integer
Dim y As Integer
Dim t As Integer
x = 1
y = Range("P10001").Value 'valor max columna numerada
'Empiezan los ciclos de repetición
For t = x To y
'hago el autofiltro
Sheets("ALBARÁN").Select
'selecciono alguna celda de título para filtrar
Range("M1").Select
Selection.AutoFilter
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 3
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 1
Selection.AutoFilter Field:=13, Criteria1:=t 'atención: dejé col B
'selecciona el rango filtrado
Range("O10001").Copy
Sheets("SUMA").Select
Application.Goto Reference:="R65536C1"
'Subir hasta encontrar datos
Selection.End(xlUp).Select
ActiveCell.Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'esto no se para que es pero me salía al grabar la macro.
'NOTA: es para quitar el parpadeo que queda cuando realizás un copy
Application.CutCopyMode = False
Sheets("ALBARÁN").Select
Selection.AutoFilter Field:=14, Criteria1:=t 'atención: dejé col B
'selecciona el rango filtrado
Range("A2:L10000").Select
'ActiveSheet.Range("BX2").Select
'Selection.CurrentRegion.SpecialCells(xlCellTypeVisible).Select
'me copio los valores filtrados a la hoja temporal
Selection.Copy
Sheets("RESULTADO").Select
Application.Goto Reference:="R65536C1"
'Subir hasta encontrar datos
Selection.End(xlUp).Select
ActiveCell.Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'esto no se para que es pero me salía al grabar la macro.
'NOTA: es para quitar el parpadeo que queda cuando realizás un copy
Application.CutCopyMode = False
Sheets("ALBARÁN").Select
Application.CutCopyMode = False
Selection.AutoFilter
Range("A1").Select
Next t
Sheets("ALBARÁN").Select
Application.CutCopyMode = False
Selection.AutoFilter
Range("M1").Select
Sheets("SUMA").Select
Range("A2:A1000").Copy
Sheets("RESULTADO").Select
Range(J2).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("ALBARÁN").Select
Application.CutCopyMode = False
Range("A1").Select
End Sub

La variable y toma el valor de la celda P10001 de la hoja activa... pero hasta ahí la hoja activa es SUMA ...

Ajústalo así:

y = Sheets("nbre de hoja donde esté este valor"). Range("P10001").Value 'valor max columna numerada

Probalo y comentame

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas