Hay varios métodos; comenzaremos por el mas sencillo:
Caso: estoy posicionado sobre una determinada celda y quiero que la macro la copie a otra hoja.
[+/-] Ver el resto / Ocultar
Caso: estoy posicionado sobre una determinada celda y quiero que la macro la copie a otra hoja.
[+/-] Ver el resto / Ocultar
Para resolver esto solo debemos escribir dentro de un módulo:
En una sola línea de código resolvimos el problema. Interpretemos:
ActiveCell: celda activa (sobre la cual esto posicionado)
Copy: copiar
ahora noten que hay un espacio después de Copy: luego de él debemos indicarle a Excel donde queremos pegarla. En este caso:
Sheets(“Hoja2”).Range(“a1”)
Le agregramos un condicional, para que solo copie si la celda tiene algún contenido. O sea que esta macro se ejecutará solo si la celda NO está vacía:
La macro funciona de 10... pero para la mayoría de las necesidades, posee un problema: cada vez que enviemos un dato a la otra hoja, sobrescribirá el existente, debido a que la celda de destino es siempre A1
Colocar los datos luego del ultimo ingresado. Esto se hace:
Agregamos dos variables: Fila y TotalFilas. Ya veremos su uso.
Interpretemos las nuevas líneas de código agregadas.
TotalFilas = Sheets(“Hoja2”).Rows.Count: aquí le indico a excel que almacene la cantidad de filas existentes en la Hoja2. Hasta la llegada de Excel 2007 todas las hojas tenían 65536 columnas, pero en esta ultima versión superan el millón. De allí la necesidad de saber de antemano cuantas filas tienen las hojas, por que necesito posicionarme en la última.
Fila = Sheets(“Hoja2”).range(“a” & TotalFilas).End(xlup).row: les traduzco en lenguaje informal:
“andá a la hoja2 posicionate en la última fila de la columna A y subí hasta encontrar la primer celda ocupada, almacenando el resultado en la variable Fila”. ¿Se entiende? Entonces Excel “subirá” por la columna A y al detectar una celda ocupada, guardará el nro de fila. Noten esta concatenación: range(“a” & TotalFilas).
TotalFilas posee un valor (que podría ser 65536), al unir de esta forma con el signo & es lo mismo que haber puesto range(“a65536”).
Y para la ultima instrucción ActiveCell.Copy Sheets("Hoja2").Range("a" & (Fila + 1)) también concatenamos: a Fila (que contiene la posición de la ultima celda ocupada) le sumo 1, para que el dato copiado se pegue una fila mas abajo.
Prueben la macro cuantas veces quieran y verán que lo copiado se pegará en todos los casos debajo del ultimo dato ingresado.
¿Dudas?
Sub CopiarCelda()
'macro realizada por DamianExcel
ActiveCell.Copy Sheets("Hoja2").Range("a1")
End Sub
ActiveCell: celda activa (sobre la cual esto posicionado)
Copy: copiar
ahora noten que hay un espacio después de Copy: luego de él debemos indicarle a Excel donde queremos pegarla. En este caso:
Sheets(“Hoja2”).Range(“a1”)
Le agregramos un condicional, para que solo copie si la celda tiene algún contenido. O sea que esta macro se ejecutará solo si la celda NO está vacía:
Sub CopiarCelda()
'macro realizada por DamianExcel
If Activecell.value <> “” then
ActiveCell.Copy Sheets("Hoja2").Range("a1")
End if
End Sub
Colocar los datos luego del ultimo ingresado. Esto se hace:
Sub CopiarCelda()
Dim Fila as Long
Dim TotalFilas as Long
'macro realizada por DamianExcel
If Activecell.value <> “” then
TotalFilas = Sheets(“Hoja2”).Rows.Count
Fila = Sheets(“Hoja2”).range(“a” & TotalFilas).End(xlup).row
ActiveCell.Copy Sheets("Hoja2").Range("a" & (Fila + 1))
End if
End Sub
Interpretemos las nuevas líneas de código agregadas.
TotalFilas = Sheets(“Hoja2”).Rows.Count: aquí le indico a excel que almacene la cantidad de filas existentes en la Hoja2. Hasta la llegada de Excel 2007 todas las hojas tenían 65536 columnas, pero en esta ultima versión superan el millón. De allí la necesidad de saber de antemano cuantas filas tienen las hojas, por que necesito posicionarme en la última.
Fila = Sheets(“Hoja2”).range(“a” & TotalFilas).End(xlup).row: les traduzco en lenguaje informal:
“andá a la hoja2 posicionate en la última fila de la columna A y subí hasta encontrar la primer celda ocupada, almacenando el resultado en la variable Fila”. ¿Se entiende? Entonces Excel “subirá” por la columna A y al detectar una celda ocupada, guardará el nro de fila. Noten esta concatenación: range(“a” & TotalFilas).
TotalFilas posee un valor (que podría ser 65536), al unir de esta forma con el signo & es lo mismo que haber puesto range(“a65536”).
Y para la ultima instrucción ActiveCell.Copy Sheets("Hoja2").Range("a" & (Fila + 1)) también concatenamos: a Fila (que contiene la posición de la ultima celda ocupada) le sumo 1, para que el dato copiado se pegue una fila mas abajo.
Prueben la macro cuantas veces quieran y verán que lo copiado se pegará en todos los casos debajo del ultimo dato ingresado.
¿Dudas?
- Obtener enlace
- Correo electrónico
- Otras aplicaciones
Etiquetas
Macros
Etiquetas:
Macros
- Obtener enlace
- Correo electrónico
- Otras aplicaciones
Comentarios
Publicar un comentario