Copiar una fila a otro lugar de la misma hoja por medio de un criterio

02/09/2008 - 17:27 por mis_pistolas | Informe spam
Saludos compañeros del grupo, solicito su ayuda para los siguiente

Tengo un archivo en excel donde tengo digamos en la columna L "Status"
y en la columna AE "Fecha de ultimo estado"

Lo que quiero es hacer como un tipo de filtro especial.

que digamos me jale todas las filas y que me las acomode por status y
que ademas me las separe por la fecha que yo le diga como si fuese un
tipo de fomato condicional digamos "entre 1/09/2008 y 30/09/2008",
esto me serviria para hacer como un corte de actividades mensuales.

Ya obteniendo este yo puedo sacar los demas puntos que me solicitan ya
que son parecidos.

Gracias y disculpen las molestias.

Saludos.
Ricardo TS
 

Leer las respuestas

#1 Ivan
03/09/2008 - 00:27 | Informe spam
hola Ricardo,

aunque ando despistado y por aqui seguro que te dan soluciones mas
limpias, una posibilidad serian los filtros avanzados

de todas formas creo que los datos que das dejan una cierta ambigüedad
en el aire:

¿donde comienza la lista? ¿y donde acaba?
¿donde y/o como le introduces los criterios a excel para que sepa que
filtrar?
¿hay posibilidad de columnas vacias entre L y AE?

bueno, para un supuesto como el que expones, y añadiendo estos otros:

a) la lista comienza en E1
b) la fila 1 es la de titulos y los datos comienzan en la 2
c) no hay columnas vacias entre la 1ª (E) y la ultima y todas tienen
titulo
d) el nº maximo de columnas de la lista seria de 124 (para previos al
2007) aunque iria justita
e) los criterios los introduces en A1 =Status, B1=Fecha inicio, C1fech fin
f) la columna D esta vacia, asi como a partir de la columna DY


podrias intentar algo asi:

en un modulo normal

Sub Filtrar()
Dim criterio As String, rngOrigen As Range, _
rngDestino As Range
criterio = "=And(L2=""" & [A1].Value & """,AE2>=" & _
CLng([B1]) & ",AE2<=" & CLng([C1]) & ")"
Application.ScreenUpdating = False
With Worksheets("Hoja1")
If .FilterMode Then .ShowAllData
.Columns("dx:iv").Clear
.Range("dz2").Formula = criterio
Set rngOrigen = .[e1].CurrentRegion
Set rngDestino = .Range(.Cells(1, 132), _
.Cells(1, rngOrigen.Columns.Count + 131))
rngOrigen.AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=.[dz1:dz2], _
CopyToRange:=rngDestino, _
Unique:=False
' .[dz1:dz2].Clear
.Columns.AutoFit
.Range("e1:ea1").EntireColumn.Hidden = True
End With
Set rngOrigen = Nothing
Set rngDestino = Nothing
End Sub

en el modulo de la Hoja1 (puedes cambiar la hoja en el codigo)

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("a1:c1")) Is Nothing Then Filtrar
End Sub

esto haria que cada vez que cambie el contenido de A1, B1, o C1 se
filtre la lista (OJO: oculta la lista original para facilita la vista.
Puedes evitarlo eliminando el uso de Hidden)

espero te ayude

un saludo
Ivan

Preguntas similares