trabajar con rangos

22/01/2008 - 11:06 por Francisco Durante | Informe spam
Buenas grupo!
os explico mi caso:
Tengo 2 hojas, en la hoja 1 selecciono un rango y necesito pegarlo en la
hoja 2, pero en la hoja ya hay un rango con datos (A1:G25) y no quiero
machacarlo, sino que deseo que se copie a continuación. Por ejemplo, si el
rango de la hoja 2 termina en la celda G25, el rango de la hoja 1 debe
copiarse a partir de la siguiente fila libre, osea empezando en la A26.

Tengo el siguiente código que me indica la última celda ocupada de la hoja
2:

Dim LastCellAddress As String
Dim ultimaCelda As Range

' Return the address of the last cell to the variable.
LastCellAddress =
ActiveCell.SpecialCells(xlLastCell).AddressLocal(RowAbsolute:=False,
ColumnAbsolute:=False)

' Display the variable in a message box.
MsgBox LastCellAddress

Lo que no sé es como hacer para que sabiendo cual es la última celda de ese
rango, se copien los nuevos valores a partir de la fila siguiente.

A ver si alguien me ilumina :-)

Salu2!

Preguntas similare

Leer las respuestas

#1 Francisco Durante
22/01/2008 - 12:09 | Informe spam
Buenas de nuevo,
He estado leyendo acerca de la función Offest y he conseguido escribir en la
siguiente fila, pero solo funciona bien la primera vez que ejecuto dicho
código. Me explico:
No entiendo muy bien como se comporta el Offset, pero si la última celda
escrita es la G25 y ejecuto el código, me escribe en la A26, eso es lo
correcto!, pero si vuelvo a ejecutar el código, ahora me detecta como la
última celda la G26 y ahí no hay nada escrito! por lo que entonces me
escribe en la A27 , si lo vuelvo a ejecutar me detecta como últiam celda la
G27 y me escribe en la A28 y así sucesivamente :-(

Este es el codigo:

Dim LastCellAddress As String
Dim ultimaCelda As Range

' Return the address of the last cell to the variable.
LastCellAddress =
ActiveCell.SpecialCells(xlLastCell).AddressLocal(RowAbsolute:=False,
ColumnAbsolute:=False)
Set ultimaCelda = Hoja2.Range(LastCellAddress)

' Display the variable in a message box.
MsgBox LastCellAddress

'activamos la ultima celda
ultimaCelda.Activate

'escribimos en la siguiente fila libre
ultimaCelda.Offset(1, -6).Value = "AQUI EMPEZARIA A COPIAR"


"Francisco Durante" escribió en el mensaje
news:
Buenas grupo!
os explico mi caso:
Tengo 2 hojas, en la hoja 1 selecciono un rango y necesito pegarlo en la
hoja 2, pero en la hoja ya hay un rango con datos (A1:G25) y no quiero
machacarlo, sino que deseo que se copie a continuación. Por ejemplo, si el
rango de la hoja 2 termina en la celda G25, el rango de la hoja 1 debe
copiarse a partir de la siguiente fila libre, osea empezando en la A26.

Tengo el siguiente código que me indica la última celda ocupada de la hoja
2:

Dim LastCellAddress As String
Dim ultimaCelda As Range

' Return the address of the last cell to the variable.
LastCellAddress =
ActiveCell.SpecialCells(xlLastCell).AddressLocal(RowAbsolute:=False,
ColumnAbsolute:=False)

' Display the variable in a message box.
MsgBox LastCellAddress

Lo que no sé es como hacer para que sabiendo cual es la última celda de
ese rango, se copien los nuevos valores a partir de la fila siguiente.

A ver si alguien me ilumina :-)

Salu2!

Respuesta Responder a este mensaje
#2 AnSanVal
22/01/2008 - 17:00 | Informe spam
Si te indica como última celda la G5, es porque en esa fila (y en cualquiera
de las columnas A:G) hay algo escrito.

LastCell te devuelve la celda de la esquina inferior derecha del rectángulo
que contiene TODOS los datos de la hoja.

Offset funciona desplazando la celda activa tantas filas hacia abajo (núm.
positivo) o hacia arriba (núm. negativo) como indique el primer parámetro, y
tantas columnas hacia la derecha (núm. positivo) o hacia la izquierda (núm.
negativo) como indique el segundo parámetro. p.e.: ActiveCell.Offset(-3,15)
se refiere a la celda que está 3 filas más arriba que la celda activa y 15
columnas más a la derecha.

Podrias sustituir LastCell por END(XLUP) y combinar con Offset. Por ejemplo
para obtener la primera fila libre de G (ultimaCelda)...
ultimaCelda = Cells(65535, 7).End(xlUp).Offset(1, 0).Row
... en caso de que quieras la primera fila libre de A, cambia el 7 por 1.

Saludos desde Tenerife.
***********************************
"Francisco Durante" escribió en el mensaje
news:%
Buenas de nuevo,
He estado leyendo acerca de la función Offest y he conseguido escribir en
la siguiente fila, pero solo funciona bien la primera vez que ejecuto
dicho código. Me explico:
No entiendo muy bien como se comporta el Offset, pero si la última celda
escrita es la G25 y ejecuto el código, me escribe en la A26, eso es lo
correcto!, pero si vuelvo a ejecutar el código, ahora me detecta como la
última celda la G26 y ahí no hay nada escrito! por lo que entonces me
escribe en la A27 , si lo vuelvo a ejecutar me detecta como últiam celda
la G27 y me escribe en la A28 y así sucesivamente :-(

Este es el codigo:

Dim LastCellAddress As String
Dim ultimaCelda As Range

' Return the address of the last cell to the variable.
LastCellAddress =
ActiveCell.SpecialCells(xlLastCell).AddressLocal(RowAbsolute:=False,
ColumnAbsolute:=False)
Set ultimaCelda = Hoja2.Range(LastCellAddress)

' Display the variable in a message box.
MsgBox LastCellAddress

'activamos la ultima celda
ultimaCelda.Activate

'escribimos en la siguiente fila libre
ultimaCelda.Offset(1, -6).Value = "AQUI EMPEZARIA A COPIAR"


"Francisco Durante" escribió en el mensaje
news:
Buenas grupo!
os explico mi caso:
Tengo 2 hojas, en la hoja 1 selecciono un rango y necesito pegarlo en la
hoja 2, pero en la hoja ya hay un rango con datos (A1:G25) y no quiero
machacarlo, sino que deseo que se copie a continuación. Por ejemplo, si
el rango de la hoja 2 termina en la celda G25, el rango de la hoja 1 debe
copiarse a partir de la siguiente fila libre, osea empezando en la A26.

Tengo el siguiente código que me indica la última celda ocupada de la
hoja 2:

Dim LastCellAddress As String
Dim ultimaCelda As Range

' Return the address of the last cell to the variable.
LastCellAddress =
ActiveCell.SpecialCells(xlLastCell).AddressLocal(RowAbsolute:=False,
ColumnAbsolute:=False)

' Display the variable in a message box.
MsgBox LastCellAddress

Lo que no sé es como hacer para que sabiendo cual es la última celda de
ese rango, se copien los nuevos valores a partir de la fila siguiente.

A ver si alguien me ilumina :-)

Salu2!





Respuesta Responder a este mensaje
#3 Francisco Durante
23/01/2008 - 11:26 | Informe spam
Ok, gracias por la info! probaré la solución que comentas.
Gracias!

Salu2
"AnSanVal" escribió en el mensaje
news:ex%2366$
Si te indica como última celda la G5, es porque en esa fila (y en
cualquiera de las columnas A:G) hay algo escrito.

LastCell te devuelve la celda de la esquina inferior derecha del
rectángulo que contiene TODOS los datos de la hoja.

Offset funciona desplazando la celda activa tantas filas hacia abajo (núm.
positivo) o hacia arriba (núm. negativo) como indique el primer parámetro,
y tantas columnas hacia la derecha (núm. positivo) o hacia la izquierda
(núm. negativo) como indique el segundo parámetro. p.e.:
ActiveCell.Offset(-3,15) se refiere a la celda que está 3 filas más arriba
que la celda activa y 15 columnas más a la derecha.

Podrias sustituir LastCell por END(XLUP) y combinar con Offset. Por
ejemplo para obtener la primera fila libre de G (ultimaCelda)...
ultimaCelda = Cells(65535, 7).End(xlUp).Offset(1, 0).Row
... en caso de que quieras la primera fila libre de A, cambia el 7 por 1.

Saludos desde Tenerife.
***********************************
"Francisco Durante" escribió en el mensaje
news:%
Buenas de nuevo,
He estado leyendo acerca de la función Offest y he conseguido escribir en
la siguiente fila, pero solo funciona bien la primera vez que ejecuto
dicho código. Me explico:
No entiendo muy bien como se comporta el Offset, pero si la última celda
escrita es la G25 y ejecuto el código, me escribe en la A26, eso es lo
correcto!, pero si vuelvo a ejecutar el código, ahora me detecta como la
última celda la G26 y ahí no hay nada escrito! por lo que entonces me
escribe en la A27 , si lo vuelvo a ejecutar me detecta como últiam celda
la G27 y me escribe en la A28 y así sucesivamente :-(

Este es el codigo:

Dim LastCellAddress As String
Dim ultimaCelda As Range

' Return the address of the last cell to the variable.
LastCellAddress =
ActiveCell.SpecialCells(xlLastCell).AddressLocal(RowAbsolute:=False,
ColumnAbsolute:=False)
Set ultimaCelda = Hoja2.Range(LastCellAddress)

' Display the variable in a message box.
MsgBox LastCellAddress

'activamos la ultima celda
ultimaCelda.Activate

'escribimos en la siguiente fila libre
ultimaCelda.Offset(1, -6).Value = "AQUI EMPEZARIA A COPIAR"


"Francisco Durante" escribió en el mensaje
news:
Buenas grupo!
os explico mi caso:
Tengo 2 hojas, en la hoja 1 selecciono un rango y necesito pegarlo en la
hoja 2, pero en la hoja ya hay un rango con datos (A1:G25) y no quiero
machacarlo, sino que deseo que se copie a continuación. Por ejemplo, si
el rango de la hoja 2 termina en la celda G25, el rango de la hoja 1
debe copiarse a partir de la siguiente fila libre, osea empezando en la
A26.

Tengo el siguiente código que me indica la última celda ocupada de la
hoja 2:

Dim LastCellAddress As String
Dim ultimaCelda As Range

' Return the address of the last cell to the variable.
LastCellAddress =
ActiveCell.SpecialCells(xlLastCell).AddressLocal(RowAbsolute:=False,
ColumnAbsolute:=False)

' Display the variable in a message box.
MsgBox LastCellAddress

Lo que no sé es como hacer para que sabiendo cual es la última celda de
ese rango, se copien los nuevos valores a partir de la fila siguiente.

A ver si alguien me ilumina :-)

Salu2!









Respuesta Responder a este mensaje
#4 nelson
31/01/2008 - 14:48 | Informe spam
On 23 ene, 05:26, "Francisco Durante" wrote:
Ok, gracias por la info! probaré la solución que comentas.
Gracias!

Salu2
"AnSanVal" escribió en el mensajenews:ex%2366$



> Si te indica como última celda la G5, es porque en esa fila (y en
> cualquiera de las columnas A:G) hay algo escrito.

> LastCell te devuelve la celda de la esquina inferior derecha del
> rectángulo que contiene TODOS los datos de la hoja.

> Offset funciona desplazando la celda activa tantas filas hacia abajo (núm.
> positivo) o hacia arriba (núm. negativo) como indique el primer parámetro,
> y tantas columnas hacia la derecha (núm. positivo) o hacia la izquierda
> (núm. negativo) como indique el segundo parámetro. p.e.:
> ActiveCell.Offset(-3,15) se refiere a la celda que está 3 filas más arriba
> que la celda activa y 15 columnas más a la derecha.

> Podrias sustituir LastCell por  END(XLUP) y combinar con Offset. Por
> ejemplo para obtener la primera fila libre de G (ultimaCelda)...
> ultimaCelda = Cells(65535, 7).End(xlUp).Offset(1, 0).Row
> ... en caso de que quieras la primera fila libre de A, cambia el 7 por 1.

> Saludos desde Tenerife.
> ***********************************
> "Francisco Durante" escribió en el mensaje
>news:%
>> Buenas de nuevo,
>> He estado leyendo acerca de la función Offest y he conseguido escribir en
>> la siguiente fila, pero solo funciona bien la primera vez que ejecuto
>> dicho código. Me explico:
>> No entiendo muy bien como se comporta el Offset, pero si la última celda
>> escrita es la G25 y ejecuto el código, me escribe en la A26, eso es lo
>> correcto!, pero si vuelvo a ejecutar el código, ahora me detecta como la
>> última celda la G26 y ahí no hay nada escrito! por lo que entonces me
>> escribe en la A27 , si lo vuelvo a ejecutar me detecta como últiam celda
>> la G27 y me escribe en la A28 y así sucesivamente :-(

>> Este es el codigo:

>>        Dim LastCellAddress As String
>>        Dim ultimaCelda As Range

>>        ' Return the address of the last cell to the variable.
>>        LastCellAddress > >> ActiveCell.SpecialCells(xlLastCell).AddressLocal(RowAbsolute:=False,
>> ColumnAbsolute:=False)
>>        Set ultimaCelda = Hoja2.Range(LastCellAddress)

>>        ' Display the variable in a message box.
>>        MsgBox LastCellAddress

>>        'activamos la ultima celda
>>        ultimaCelda.Activate

>>        'escribimos en la siguiente fila libre
>>        ultimaCelda.Offset(1, -6).Value = "AQUI EMPEZARIA A COPIAR"

>> "Francisco Durante" escribió en el mensaje
>>news:
>>> Buenas grupo!
>>> os explico mi caso:
>>> Tengo 2 hojas, en la hoja 1 selecciono un rango y necesito pegarlo en la
>>> hoja 2, pero en la hoja ya hay un rango con datos (A1:G25)  y no quiero
>>> machacarlo, sino que deseo que se copie a continuación. Por ejemplo, si
>>> el rango de la hoja 2 termina en la celda G25, el rango de la hoja 1
>>> debe copiarse a partir de la siguiente fila libre, osea empezando en la
>>> A26.

>>> Tengo el siguiente código que me indica la última celda ocupada de la
>>> hoja 2:

>>>        Dim LastCellAddress As String
>>>        Dim ultimaCelda As Range

>>>        ' Return the address of the last cell to the variable.
>>>        LastCellAddress > >>> ActiveCell.SpecialCells(xlLastCell).AddressLocal(RowAbsolute:=False,
>>> ColumnAbsolute:=False)

>>>        ' Display the variable in a message box.
>>>        MsgBox LastCellAddress

>>> Lo que no sé es como hacer para que sabiendo cual es la última celda de
>>> ese rango, se copien los nuevos valores a partir de la fila siguiente.

>>> A ver si alguien me ilumina :-)

>>> Salu2!- Ocultar texto de la cita -

- Mostrar texto de la cita -




Hola Francisco
Yo utilizo este sencillo codigo creo que es lo que necesitas

''''' =>> primero debes incluir el codigo para copiar el rango Ejem
š:
Sheets("Hoja1").Select
Range("A1:G25").Select
Selection.Copy


'''''==>> ahora incluyes este que es el que te permite pasar a la
hoja 2,
bajar por la comuna A desde A1, (siempre deben haber
datos en la columna A)
al final se desplaza una fila abajo y pega


Sheets("Hoja2").Select
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste


Saludos

Nelsonb
Respuesta Responder a este mensaje
#5 Ivan
01/02/2008 - 02:25 | Informe spam
hola Francisco,

realmente no te hace falta andar selccionado/activando la otra hoja
para pgar los datos. Usando lo que te omntaba Antonio creo que te
podria valer algo asi=>

a) esto te pegaria todo (formulas, formatos, etc)=>

Selection.Copy Worksheets("Hoja2").Cells(65536,1).End(xlup).Offset(1)

b) esto pegaria solo valores =>

Selection.Copy
Worksheets("Hoja2").Cells(65536,1).End(xlup).Offset(1).PasteSpecial
xlPasteValues


aunque en cualquier caso siempre deberias comprobar si el rango
copiado no excede al de destino, y si son campos concretos, que la
selecion (Selection) coincida en su columna inicial

espero te ayude

Un saludo
Ivan
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida