Selección de rangos en una macro de Excel

28/08/2007 - 21:34 por miguel p | Informe spam
Como debo hacer para seleccionar un rango de celdas, mediante códigos de
Visual Basic, dentro de una macro que maneja la selección. El objeto es poder
copiar el conjunto de celdas para poder trasladarlo a otro lugar de la hoja
de Excel.
No te des por vencido

Preguntas similare

Leer las respuestas

#1 Ivan
28/08/2007 - 22:46 | Informe spam
Como debo hacer para seleccionar un rango de celdas, mediante códigos de
Visual Basic, dentro de una macro que maneja la selección. El objeto es poder
copiar el conjunto de celdas para poder trasladarlo a otro lugar de la hoja
de Excel.




hola Miguel,

si el unico motivo de seleccionar las celdas es el que expones (copiar
el rango) no es necesrio hacerlo (seleccionarlas). En practicamente el
¿99%? de los casos no es necesario andar seleccionando rangos, hojas,
libros u objetos en general para trabajar con ellos

pej. para copiar el rango de celdas "A2:C15" de la hoja activa y
pegarlo en otra hoja llamada por ej "Otra" a partir de la primera
celda libre de la columna A podrias hacer algo parecido a esto=>>

Range("a2:c15").Copy _
Worksheets("Otra").Range("a65536").End(xlUp).Offset(1)

esto te pegaria todo (formulas, formatos, etc), si por ej solo deseas
pegar los valores podrias hacer algo parecido a esto=>

Range("a2:c15").Copy
Worksheets("Otra").Range("a65536").End(xlUp) _
.Offset(1).PasteSpecial xlPasteValues


OJO: fijate que en el 1er caso va todo en una linea (aqui lo he
partido con un guion bajo de continuacion de linea para evitar
rupyuras en el foro), es decir detras de 'Copy' iria un espacio y a
continuacion el destination (Whorksheets(tal).., pero en el segundo
caso, con pastespecial va en dos filas diferentes

en cuanto a seleccionar un rango, una vez asegurado de que la hoja que
lo contiene es la activa, te bastaria con algo asi=>

Range("A2:C15").Select

y para trabajar con el podrias usar pej para este mismo caso

Range("a2:c15").Select
Selection.Copy
Worksheets("Otra").Range("a65536").End(xlUp) _
.Offset(1).PasteSpecial xlPasteValues

espero te ayude

un saludo
Ivan
Respuesta Responder a este mensaje
#2 miguel p
29/08/2007 - 01:58 | Informe spam
Hola Ivan:
Antes que nada te agradezco la atención de haberme contestado
y te pido disculpas por la pregunta tan mal hecha que hice.
Lo que quería preguntar ( y no lo hice correctamente ), es
teniendo en cuenta que la posición de la celda de partida es aleatoria y a
partir de ella, quiero seleccionar un rango.
Así como a partir de una celda seleccionada aleatoriamente
puedo seleccionar otra que se encuentre, por ejemplo, 2 columnas a la derecha
y 3 filas mas abajo, me interesa conocer si existe una instrucción que copie
un rango definido, por ejemplo, como hasta 2 columnas a la derecha y 3 filas
más abajo.
Te pido disculpas nuevamente y te agradezco la atención que
seguramente prestarás a esta pregunta (creo que esta vez es más precisa).
Afectuosos saludos.
Miguel

No te des por vencido


"Ivan" escribió:


> Como debo hacer para seleccionar un rango de celdas, mediante códigos de
> Visual Basic, dentro de una macro que maneja la selección. El objeto es poder
> copiar el conjunto de celdas para poder trasladarlo a otro lugar de la hoja
> de Excel.


hola Miguel,

si el unico motivo de seleccionar las celdas es el que expones (copiar
el rango) no es necesrio hacerlo (seleccionarlas). En practicamente el
¿99%? de los casos no es necesario andar seleccionando rangos, hojas,
libros u objetos en general para trabajar con ellos

pej. para copiar el rango de celdas "A2:C15" de la hoja activa y
pegarlo en otra hoja llamada por ej "Otra" a partir de la primera
celda libre de la columna A podrias hacer algo parecido a esto=>>

Range("a2:c15").Copy _
Worksheets("Otra").Range("a65536").End(xlUp).Offset(1)

esto te pegaria todo (formulas, formatos, etc), si por ej solo deseas
pegar los valores podrias hacer algo parecido a esto=>

Range("a2:c15").Copy
Worksheets("Otra").Range("a65536").End(xlUp) _
.Offset(1).PasteSpecial xlPasteValues


OJO: fijate que en el 1er caso va todo en una linea (aqui lo he
partido con un guion bajo de continuacion de linea para evitar
rupyuras en el foro), es decir detras de 'Copy' iria un espacio y a
continuacion el destination (Whorksheets(tal).., pero en el segundo
caso, con pastespecial va en dos filas diferentes

en cuanto a seleccionar un rango, una vez asegurado de que la hoja que
lo contiene es la activa, te bastaria con algo asi=>

Range("A2:C15").Select

y para trabajar con el podrias usar pej para este mismo caso

Range("a2:c15").Select
Selection.Copy
Worksheets("Otra").Range("a65536").End(xlUp) _
.Offset(1).PasteSpecial xlPasteValues

espero te ayude

un saludo
Ivan


Respuesta Responder a este mensaje
#3 Ivan
29/08/2007 - 03:56 | Informe spam
hola Miguel,


a partir de una celda seleccionada aleatoriamente
puedo seleccionar otra que se encuentre, por ejemplo, 2 columnas a la derecha
y 3 filas mas abajo, me interesa conocer si existe una instrucción que copie
un rango definido, por ejemplo, como hasta 2 columnas a la derecha y 3 filas
más abajo.




si te he entendido bien, echale un ojo en la ayuda a las propiedades
Offset y Range

aunque seguramente existen otras formas aqui te pongo varios ejemplos
con select, pero son igualmente validos para hacer referncia al rango
sin tener que seleccionarlo y en cuanto a copiar es exactamente igual
que en mi respuesta anterior

a) esto selecciona el rango que va de la celda activa a tres filas
mas abajo y dos columnas a la derecha (en total 4 filas y 3 columnas
incluyendo las de la activa):

op1=>> Range(ActiveCell, ActiveCell.Offset(3, 2)).Select

op2=>> Range(ActiveCell, ActiveCell.Cells(4, 3)).Select

b) esto selecciona la celda que esta 3 filas abajo y dos columnas
derecha

op1=>> ActiveCell.Offset(3, 2).Select

op2=>> ActiveCell.Cells(4, 3).Select

c) esto selecciona el rango que va desde una fila mas abajo hasta 3
filas mas abajo y dede una columna a la drcha. a 2 columnas a la
derecha (es decir no incluye ni la fila ni la columna de la celda
activa

op1=>> Range(ActiveCell.Offset(1, 1), ActiveCell.Offset(3, 2)).Select

op2=>> Range(ActiveCell.Cells(2, 2), ActiveCell.Cells(4, 3)).Select

d) para 'ir' en direccion contraria, es decir hacia arriba y/o hacia
la izquierda solo tendrias que poner un signo menos donde te convenga

OJO: asegurate de que no excedes los limites. Pej. si la celda activa
es A1 e intentaras seleccionar/hacer referencia a un rango que esta
hacia la izq. y/o hacia arriba te daria un error

espero te ayude
un saludo
Ivan
Respuesta Responder a este mensaje
#4 miguel p
29/08/2007 - 07:30 | Informe spam
Hola Ivan: Con tu ayuda pude resolver el problema que tenía: op1=>>
Range(ActiveCell.Offset(1, 1), ActiveCell.Offset(3, 2)).Select. Estoy
sumamente agradecido. Afectuosos saludos.
Miguel
No te des por vencido


"Ivan" escribió:


hola Miguel,


> a partir de una celda seleccionada aleatoriamente
> puedo seleccionar otra que se encuentre, por ejemplo, 2 columnas a la derecha
> y 3 filas mas abajo, me interesa conocer si existe una instrucción que copie
> un rango definido, por ejemplo, como hasta 2 columnas a la derecha y 3 filas
> más abajo.


si te he entendido bien, echale un ojo en la ayuda a las propiedades
Offset y Range

aunque seguramente existen otras formas aqui te pongo varios ejemplos
con select, pero son igualmente validos para hacer referncia al rango
sin tener que seleccionarlo y en cuanto a copiar es exactamente igual
que en mi respuesta anterior

a) esto selecciona el rango que va de la celda activa a tres filas
mas abajo y dos columnas a la derecha (en total 4 filas y 3 columnas
incluyendo las de la activa):

op1=>> Range(ActiveCell, ActiveCell.Offset(3, 2)).Select

op2=>> Range(ActiveCell, ActiveCell.Cells(4, 3)).Select

b) esto selecciona la celda que esta 3 filas abajo y dos columnas
derecha

op1=>> ActiveCell.Offset(3, 2).Select

op2=>> ActiveCell.Cells(4, 3).Select

c) esto selecciona el rango que va desde una fila mas abajo hasta 3
filas mas abajo y dede una columna a la drcha. a 2 columnas a la
derecha (es decir no incluye ni la fila ni la columna de la celda
activa

op1=>> Range(ActiveCell.Offset(1, 1), ActiveCell.Offset(3, 2)).Select

op2=>> Range(ActiveCell.Cells(2, 2), ActiveCell.Cells(4, 3)).Select

d) para 'ir' en direccion contraria, es decir hacia arriba y/o hacia
la izquierda solo tendrias que poner un signo menos donde te convenga

OJO: asegurate de que no excedes los limites. Pej. si la celda activa
es A1 e intentaras seleccionar/hacer referencia a un rango que esta
hacia la izq. y/o hacia arriba te daria un error

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