Duda con macro

Quisiera saber si en esta esta parte de la macro
Range("A1:G254").AdvancedFilter
Se puede ajustar el tamaño del rango del libro con el que estoy trabajando ya que este cambia día a día y por consecuencia los rangos
Sub Macro2()
'
' Macro2 Macro
' Macro grabada el 02/09/2004 por Ricardo Garza
'
'
Selection.End(xlToRight).Select
ActiveCell.FormulaR1C1 = "Plaza"
Range("J2").Select
ActiveCell.FormulaR1C1 = "CULIACAN"
Range("J3").Select
ActiveCell.FormulaR1C1 = "LOS MOCHIS"
Range("J4").Select
ActiveCell.FormulaR1C1 = "MAZATLAN"
Range("J5").Select
ActiveCell.FormulaR1C1 = "NOGALES"
Range("J6").Select
Selection.End(xlUp).Select
Selection.End(xlUp).Select
Selection.End(xlToLeft).Select
Range("A1:G254").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Range("J1:J5"), Unique:=False
End Sub
5

5 respuestas

Respuesta
1
Desde Barquismeto, Venezuela.
Lo que puedes hacer para poder ampliar el rango de tu filtro avanzado es lo siguiente; aquí te envío el código que me enviaste con las modificaciones necesarias para que pueda funcionar como quieres:
---------- Código ------------->
Dim rango As String ' Primera Modificación
Sub Macro2()
'
' Macro2 Macro
' Macro grabada el 02/09/2004 por Ricardo Garza
'
'
Selection.End(xlToRight).Select
ActiveCell.FormulaR1C1 = "Plaza"
Range("J2").Select
ActiveCell.FormulaR1C1 = "CULIACAN"
Range("J3").Select
ActiveCell.FormulaR1C1 = "LOS MOCHIS"
Range("J4").Select
ActiveCell.FormulaR1C1 = "MAZATLAN"
Range("J5").Select
ActiveCell.FormulaR1C1 = "NOGALES"
Range("J6").Select
Selection.End(xlUp).Select
Selection.End(xlToLeft).Select
rango = "A1:G254" ' Segunda Modificación
Range(rango).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("J1:J5"), Unique:=False
End Sub
-------- Fin de Código ----------->
Te explico: Para empezar, debes declarar a la variable "rango" como un Strig la cual contendrá el rango de celdas a filtrar; luego debes agregar la linea donde le asignas a ese "rango"; valga la redundancia, el rango de valores a filtrar. Una manera práctica de hacerlo es introducir este valor en una celda específica y vincular a ésta con la variable "rango" mediante la asignación:
rango = Range("H1").Value
Suponiendo que introduces el rango de celdas (A1:G254 o mayor), en la celda "H1". Y para terminar debes sustituir en la última línea de tu código en el rango "Range("A1:G254")" por "Range(rango)" y obtendrás lo que deseas. Espero te sirva la respuesta, de cualquier manera si tienes alguna duda con el código o con alguna otra cosa de Excel, escríbeme y con gusto te responderé. No olvides puntualizarme.
Estamos en contacto.
Respuesta
1
Si va hasta el final de los datos, puedes utilizar la siguiente opción:
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Si no es así, dime cuál es el criterio para que aumente el rango o hasta qué lugar iría y te puedo dar otra idea.
Hice lo siguiente pero el depurador me subraya lo sig .AdvancedFilter
Me podrías ayudar a acomodar la linea en la macro ya que no se mucho de esto
Por tu ayuda gracias
Sub Macro2()
'
' Macro2 Macro
' Macro grabada el 02/09/2004 por Ricardo Garza
'
'
Selection.End(xlToRight).Select
ActiveCell.FormulaR1C1 = "Plaza"
Range("J2").Select
ActiveCell.FormulaR1C1 = "CULIACAN"
Range("J3").Select
ActiveCell.FormulaR1C1 = "LOS MOCHIS"
Range("J4").Select
ActiveCell.FormulaR1C1 = "MAZATLAN"
Range("J5").Select
ActiveCell.FormulaR1C1 = "NOGALES"
Range("J6").Select
Selection.End(xlUp).Select
Selection.End(xlUp).Select
Selection.End(xlToLeft).Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Range("J1:J5"), Unique:=False
End Sub
Éste sería el código
Sub Macro2()
'
'
'
Dim ultcelda As Integer
Selection.End(xlToRight).Select
ActiveCell.FormulaR1C1 = "Plaza"
Range("J2").Select
ActiveCell.FormulaR1C1 = "CULIACAN"
Range("J3").Select
ActiveCell.FormulaR1C1 = "LOS MOCHIS"
Range("J4").Select
ActiveCell.FormulaR1C1 = "MAZATLAN"
Range("J5").Select
ActiveCell.FormulaR1C1 = "NOGALES"
Range("J6").Select
ActiveCell.SpecialCells(xlLastCell).Select
i = ActiveCell.Row
Selection.End(xlUp).Select
Selection.End(xlUp).Select
Selection.End(xlToLeft).Select
Range("A1:G" & i).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Range("J1:J5"), Unique:=False
End Sub
No te olvides de calificar
Respuesta
1
Si. Tienes que crear una variable que halle cual es el rango. Si pones
Range("g2").Select
Selection.End(xlDown).Select
rownumber = ActiveCell.Row
Esto te dará el valor de la fila.
Despues pones Range("A1:G" & rownumber).advanced... etc y ya esta
Luis
Si. Tienes que crear una variable que halle cual es el rango. Si pones
Range("g2").Select
Selection.End(xlDown).Select
Disculpa no se mucho de programación a que te refieres con esto
¿Con esto tendría que cambiar el rango de la base de datos todos los días? Ya que como te digo los libros y los rangos varían
Con selection end lo que hace es ir hasta la ultima fila de la columna g para determinar cual es la última fila del rango.
Con eso no tendría que cambiar el rango:pones
Range("A1:G"& rownumber).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Range("J1:J5"), Unique:=False
Esto soluciona el problema de cambiar el rango
El libro es otro problema: yo pondría esta macro en todos los libros y así te soluciona el problema
Respuesta
1
Lo lamento, pregunta a otro experto.
Respuesta
1
Por lo visto encontraste una forma más sencilla de utilizar el filtro avanzado.
Con respecto a la actualización del rango, lo que hago es manejar una variable que me controle el numero de fila del ultimo registro (supongo que las columnas siempre son las mismas). No utilizo selection.end pues aunque es más rapido no es tan confiable.
El código queda más o menos:
Range("A1") 'Inicio de la base de datos
While activecell<>""
Activecell.offset(1,0).select
Wend
i=Activecell.row-1
Luego entonces donde va el rango Range("A1:G254") quedaria:
Range("A1:G" & i & "").
Cualquier duda me avisas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas