Seleccionar y copiar filas

21/02/2007 - 13:50 por anabcn | Informe spam
Hola a todos, soy nueva en excel. Es la primera vez que voy a
programar y necesito ayuda.
Tengo una hoja con 45000 registros y necesito copiar en otra hoja las
filas que contengan una determinada información en la columna j y las
previas.
El caso seria, si la columna j a partir de j2 esta llena, copia toda
la fila y muevete arriba y copiala tambien. Ademas mira si ésta fila
previa tiene j en cuyo caso te mueves a la previa y si no continua la
búsqueda.

Se que aparentemente es sencillo, pero sólo he programado en acces y
tampoco tengo mucha experiencia. Además no tengo ni idea de la
nomenclatura que utiliza excel.

Si alguien me puede ayudar se lo agradeceré.

Muchas gracias

Ana

Preguntas similare

Leer las respuestas

#6 Juan M
22/02/2007 - 14:43 | Informe spam
Hola a todos,

Ivan, después de ver tu último código, en el que ordenas la lista para dejar
las celdas vacias al final y luego no seleccionarlas, me acordé de un caso
similar. En este caso no se cambia el orden inicial de los datos de la tabla
y no le influye la cantidad de filas de la hoja.
La hoja de los datos se llama Inicio y la de pegado Resumen.

Un saludo
Juan

Inicio Código
Sub test3()
Dim MiRango As Range

With Worksheets("inicio")
Set MiRango = .Range(.Range("J2"), .Range("J" & .Rows.Count).End(xlUp))
End With
MiRango.SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
MiRango.Offset(, -9).Resize(, 10).SpecialCells(xlCellTypeVisible).Copy _
Destination:=Worksheets("Resumen").Range("A1")
MiRango.EntireRow.Hidden = False

End Sub
Fin Código
"Ivan" escribió en el mensaje
news:
hola David, lo primero, muchas gracias por los consejos, no dudes que los
probare/comparare en cuanto tenga un rato, pero espero no te impor te que
comente un poco tu respuesta

Yo programaba de esa forma, pero tomando la escuela de uno de los Gurús
de Office (Héctor),





creo que de esa 'escuela' (aunque no estoy muy seguro de que el admitiera
su existencia) ya somos unos cuantos

aprendí a evitar el código para recorrer grandes cantidades de celdas.
Es muy lento





aqui, aunque estoy de acuerdo contigo, me temo que hay situaciones en las
que un bucle (del tipo que sea: For Each, Do ..Loop, For Next , ..) se
hace imprescindible. De hecho en el codigo que expones creo recordar un DO
..Loop.

de todas formas creo que para este caso en concreto posiblemente no hace
falta ( seguro que Hector tiraria de unos filtros avanzados, o en su
defecto unos autofiltros [ disculpad que no ponga un ejemplo, pero me
acabo de dar cuenta segun escribia este mensaje < y de hecho lo mismo
estoy equivocado>], copiando las filas con 'jotas' no vacias, de hecho
posiblemente se puedan evitar hasta las macros sin que suponga demasiado
exfuerzo.

incluso creo que simplemente (via macros o no) con ordenar el rango por la
'J' y copiar hasta la ultima fila de 'J' que contiene datos podria valer
(repito: si la consulta de Ana iba por donde yo decia, que no estoy del
todo seguro)

la verdad es que a veces ( y hablo exclusivamente por mi) nos complicamos
la vida, cuando la solucion es la mas sencilla

Tal vez fuera mejor algo como:
Cells(j, 1).EntireRow.Copy
y luego pegarlo:
Sheets(H2).Cells(i, 1).PasteSpecial
Pruébalo, y verás cómo se acelera el proceso.



como te comentaba, ten por seguro que correre unas priebas, pero no estoy
del todo convencido de que sea generalizable, de hecho tengo la impresion
de que, a veces puede ralentizar mas el codigo el uso 'excesivo' de la
notacion por puntos, con lo que puede resultar mejor (creo y depende)
asignar variables para asi evitar el uso repetitivo de dicha notacion para
referirse a un mismo objeto, valor, etc,..

> Más aún si utilizas Application.screenupdate = false



he de reconocer que en los ejs. que suelo mandar al foro (casi) siempre se
me olvida incluirlo, pero tienes toda la razon

bueno lo dicho, muchas gracias, y espero que tomes esto como un simple
intercambio de puntos de vista/dudas. De hecho estare encantado si me
quieres aclarar cualquier punto...'oscuro'

un saludo y hasta pronto
Ivan

PD: Ana, si sigue al tanto del hilo, y lo que quieres hacer es lo que te
comentaba, toma en cuenta lo de ordenar por J

puedes usar el metodo Sort del objeto Range. De memori podrias hacer algo
parecido a esto

Sub CopiarJotas()
with worksheets("Nombre de hoja de origen")
.Usedrange.Sort Key1:=.[J2], Order1:=xlAscending
.Range("a2:J" & .[j65536].End(xlup).row).copy
worksheets("nombre hoja destino").[a65536].end(xlup).offset(1) _
.PasteSpecial xlPasteValues
end with
end sub

solo ten en cuenta algunos puntos:

a) el limite de filas (si tu excel es inferior al 2007) es de 65536
b) en -> .Range("a2:J" & .[j65536].End(xlup).row).copy -> he supuesto
que la ultima columna es la J, si no es asi cambia la 'J' del "A2:J" por
la letra de tu ultima columna (solo esa J, la otra dejala)
c) en la hoja de destino deberia haber al menos una fila de titulos ( o
en su defecto algun dato en la columna A) a partir de la cual, si no hay
mas registros te pegaria los datos.
d) si quieres restaurar el orden que tenias previamente, incluye otra
instruccion Sort antes del end With ( y si quieres tambien para la segunda
hoja, haciendo referncia a ella -> Workshhets("destino").usedrange.sort
...etc) cambiando en Key1 la columna por la que quiers que te ordene
e) ten cuidado con los posibles saltos/roturas de linea en el editor del
foro ( en mi anterior respuesta el codigo se habia truncado en un par de
sitios, pero es facil ver donde esta el 'salto'). Tambie puede haberseme
escapado algun error de sintaxis en este ultimo codigo, pues lo he escrito
aqui directamente. Si quieres comentas las dudas/problemas que te surjan

un saludo de nuevo y espero no haberte liado demasiado

Respuesta Responder a este mensaje
#7 Ivan
22/02/2007 - 15:11 | Informe spam
hola Juan, y a todos los demás

muchas gracias por la aportación. Como comentaba, un experto hace sencillo y
'evidente' <a posteriori> lo que (al menos en mi caso) nos empeñamos en
retorcer.

lo dicho, muchas gracias de nuevo y añado tu código a mi 'saca' particular.

un saludo y hasta pronto
Ivan
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida