Pegar en columnas respetando el salto de página
Hola.
Querría que me dijeras como se pueden pegar los valores de una
columna (por ejemplo, de 2000 lineas), en otra hoja, de tal forma que al
llegar al salto de página, continué en la siguiente columna y así
sucesivamente.
O sea, si el salto de página esta en la fila 60, los primeros 60
valores se peguen en la columna A, los otros 60 en la B, y así
sucesivamente.
Muchas gracias.
Querría que me dijeras como se pueden pegar los valores de una
columna (por ejemplo, de 2000 lineas), en otra hoja, de tal forma que al
llegar al salto de página, continué en la siguiente columna y así
sucesivamente.
O sea, si el salto de página esta en la fila 60, los primeros 60
valores se peguen en la columna A, los otros 60 en la B, y así
sucesivamente.
Muchas gracias.
1 respuesta
Respuesta de patanrisitas
1
1
patanrisitas, Tengo experiencia en macros, funciones avanzadas y algo de...
Para empezar, lo que quieres si se puede... sin embargo hay un par de consideraciones:
1.- Excel tiene solo 254 Columnas
2.- Dado esto debes dividir la cantidad de datos totales entre los datos por columna para saber cuantas columnas necesitaras.
3.- O al contrario, por ejemplo: Si son 7 datos por columna, 254*7 = 1.778, es decir, no podrás convertir más de 1778 datos.
4.- En tu ejemplo serían 2.000/60=33 - necesitaras 33 columnas, lo que es posible!
[Para abrir Visual Basic] pulsas ALT+F11 y alli abres un módulo nuevo...
Acá tienes la macro (la copias y la pegas en Visual Basic):
-----
Sub Generador()
'
' Macro que genera columnas de datos
' Macro grabada el 16/06/2008 por Richard Chacón
Range("A1").Select
ActiveCell.Range("A1:A7").Select
Selection.Copy
Range("E1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A1").Select
ActiveCell.Range("A1:A7").Select
Application.CutCopyMode = False
Selection.ClearContents
Selection.End(xlDown).Select
ActiveCell.Range("A1:A7").Select
Selection.Copy
Range("E1").Select
ActiveCell.Offset(0, 1).Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A1").Select
Selection.End(xlDown).Select
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Range("A1:A7").Select
Application.CutCopyMode = False
Selection.ClearContents
Selection.End(xlDown).Select
While Selection <> ""
ActiveCell.Range("A1:A7").Select
Selection.Copy
Range("E1").Select
Selection.End(xlToRight).Select
ActiveCell.Offset(0, 1).Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Range("A1:A7").Select
Application.CutCopyMode = False
Selection.ClearContents
Selection.End(xlDown).Select
Wend
Range("A1").Select
End Sub
1.- Excel tiene solo 254 Columnas
2.- Dado esto debes dividir la cantidad de datos totales entre los datos por columna para saber cuantas columnas necesitaras.
3.- O al contrario, por ejemplo: Si son 7 datos por columna, 254*7 = 1.778, es decir, no podrás convertir más de 1778 datos.
4.- En tu ejemplo serían 2.000/60=33 - necesitaras 33 columnas, lo que es posible!
[Para abrir Visual Basic] pulsas ALT+F11 y alli abres un módulo nuevo...
Acá tienes la macro (la copias y la pegas en Visual Basic):
-----
Sub Generador()
'
' Macro que genera columnas de datos
' Macro grabada el 16/06/2008 por Richard Chacón
Range("A1").Select
ActiveCell.Range("A1:A7").Select
Selection.Copy
Range("E1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A1").Select
ActiveCell.Range("A1:A7").Select
Application.CutCopyMode = False
Selection.ClearContents
Selection.End(xlDown).Select
ActiveCell.Range("A1:A7").Select
Selection.Copy
Range("E1").Select
ActiveCell.Offset(0, 1).Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A1").Select
Selection.End(xlDown).Select
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Range("A1:A7").Select
Application.CutCopyMode = False
Selection.ClearContents
Selection.End(xlDown).Select
While Selection <> ""
ActiveCell.Range("A1:A7").Select
Selection.Copy
Range("E1").Select
Selection.End(xlToRight).Select
ActiveCell.Offset(0, 1).Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Range("A1:A7").Select
Application.CutCopyMode = False
Selection.ClearContents
Selection.End(xlDown).Select
Wend
Range("A1").Select
End Sub
Hola patanrisitas.
Muy buena tu respuesta. No sabia lo de las 234 columnas. Para mejorar la solución, ¿podría ser que, al llegar a la columna donde se acaba un página de A4, por ejemplo la columna QUE, siguiera rellenando en la celda A61, luego en la B61,... hasta la K61 y luego en la A121, etc.
Recuerda que los datos los debe tomar de otra hoja distinta de donde los pega.
Gracias de nuevo.
Muy buena tu respuesta. No sabia lo de las 234 columnas. Para mejorar la solución, ¿podría ser que, al llegar a la columna donde se acaba un página de A4, por ejemplo la columna QUE, siguiera rellenando en la celda A61, luego en la B61,... hasta la K61 y luego en la A121, etc.
Recuerda que los datos los debe tomar de otra hoja distinta de donde los pega.
Gracias de nuevo.
Correcto... si no tienes más de 15.000 datos, esta solución te va a servir.
Solo debes modificar la macro a tu conveniencia en cuanto a la posición de los datos, es decir, la macro Sub Generador() comienza sus acciones ubicándose en la celda A1 de la Hoja1 y toma 7 datos hacia abajo, los copia y luego se ubica en la celda E1 y los pega allí.
En otro ejemplo habría que incluir antes de range("E1") la llamada a la hoja2 con un comando: sheets("hoja2"). select y con eso pasas los datos a otra hoja.
Claro... debes revisar toda la macro para que cambies todo lo que sea necesario para que se adapte a tu necesidad!
Solo debes modificar la macro a tu conveniencia en cuanto a la posición de los datos, es decir, la macro Sub Generador() comienza sus acciones ubicándose en la celda A1 de la Hoja1 y toma 7 datos hacia abajo, los copia y luego se ubica en la celda E1 y los pega allí.
En otro ejemplo habría que incluir antes de range("E1") la llamada a la hoja2 con un comando: sheets("hoja2"). select y con eso pasas los datos a otra hoja.
Claro... debes revisar toda la macro para que cambies todo lo que sea necesario para que se adapte a tu necesidad!
Hola de nuevo.
Lo siento, no se mucho de macros, pero no veo como modificarla para que después de la columna QUE, siga en la A61, etc.
Gracias por tu tiempo.
Un saludo.
Lo siento, no se mucho de macros, pero no veo como modificarla para que después de la columna QUE, siga en la A61, etc.
Gracias por tu tiempo.
Un saludo.
Dame un correo para mandarte un ejemplo... o también puedes mandarme tu archivo con unas notas de lo que quieres que haga la macro y yo te la diseño.
Mi correo es [email protected]
Mi correo es [email protected]
Mi correo es [email protected]
Tomate tu tiempo, que no me corre prisa.
Por cierto, ¿sabes de algún manual para aprender algo más de macros?
Saludos
Tomate tu tiempo, que no me corre prisa.
Por cierto, ¿sabes de algún manual para aprender algo más de macros?
Saludos
Hola Richard.
Perdona por la tardanza...
Lo que me has pasado por correo es lo mismo que me habías puesto antes. Lo que te pedía después era lo del salto de página:
"Hola patanrisitas.
Muy buena tu respuesta. No sabia lo de las 234 columnas. Para mejorar la solución, ¿podría ser que, al llegar a la columna donde se acaba un página de A4, por ejemplo la columna QUE, siguiera rellenando en la celda A61, luego en la B61,... hasta la K61 y luego en la A121, etc.
Recuerda que los datos los debe tomar de otra hoja distinta de donde los pega."
De todas formas, gracias.
Ya me dirás si se puede hacer lo que pido.
Un saludo
Perdona por la tardanza...
Lo que me has pasado por correo es lo mismo que me habías puesto antes. Lo que te pedía después era lo del salto de página:
"Hola patanrisitas.
Muy buena tu respuesta. No sabia lo de las 234 columnas. Para mejorar la solución, ¿podría ser que, al llegar a la columna donde se acaba un página de A4, por ejemplo la columna QUE, siguiera rellenando en la celda A61, luego en la B61,... hasta la K61 y luego en la A121, etc.
Recuerda que los datos los debe tomar de otra hoja distinta de donde los pega."
De todas formas, gracias.
Ya me dirás si se puede hacer lo que pido.
Un saludo
Cambia la Macro por esta. Usala en un Libro nuevo y pruébala. En la Hoja1 enumera unos 2000 datos en la Columna A. Asegúrate de que exista una Hoja2. Pulsa ALT+F11 y pega este código. Por lo de la Columna QUE y lo de A61 no te preocupes que eso lo solucionas por la Opción de Vista Preliminar (En configuración, tipo de hoja y márgenes cambias a tu conveniencia):
Sub CreaColumnas()
'
' Macro Crea Columnas
' Macro grabada el 16/06/2008 por Richard Chacón
Range("A1").Select
ActiveCell.Range("A1:A60").Select
Selection.Copy
Sheets("Hoja2").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Hoja1").Select
Range("A1").Select
ActiveCell.Range("A1:A60").Select
Application.CutCopyMode = False
Selection.ClearContents
Selection.End(xlDown).Select
ActiveCell.Range("A1:A60").Select
Selection.Copy
Sheets("Hoja2").Select
Range("A1").Select
ActiveCell.Offset(0, 1).Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Hoja1").Select
Range("A1").Select
Selection.End(xlDown).Select
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Range("A1:A60").Select
Application.CutCopyMode = False
Selection.ClearContents
Selection.End(xlDown).Select
While Selection <> ""
ActiveCell.Range("A1:A60").Select
Selection.Copy
Sheets("Hoja2").Select
Range("A1").Select
Selection.End(xlToRight).Select
ActiveCell.Offset(0, 1).Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Hoja1").Select
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Range("A1:A60").Select
Application.CutCopyMode = False
Selection.ClearContents
Selection.End(xlDown).Select
Wend
Sheets("Hoja1").Select
Range("A1").Select
End Sub
Sub CreaColumnas()
'
' Macro Crea Columnas
' Macro grabada el 16/06/2008 por Richard Chacón
Range("A1").Select
ActiveCell.Range("A1:A60").Select
Selection.Copy
Sheets("Hoja2").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Hoja1").Select
Range("A1").Select
ActiveCell.Range("A1:A60").Select
Application.CutCopyMode = False
Selection.ClearContents
Selection.End(xlDown).Select
ActiveCell.Range("A1:A60").Select
Selection.Copy
Sheets("Hoja2").Select
Range("A1").Select
ActiveCell.Offset(0, 1).Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Hoja1").Select
Range("A1").Select
Selection.End(xlDown).Select
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Range("A1:A60").Select
Application.CutCopyMode = False
Selection.ClearContents
Selection.End(xlDown).Select
While Selection <> ""
ActiveCell.Range("A1:A60").Select
Selection.Copy
Sheets("Hoja2").Select
Range("A1").Select
Selection.End(xlToRight).Select
ActiveCell.Offset(0, 1).Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Hoja1").Select
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Range("A1:A60").Select
Application.CutCopyMode = False
Selection.ClearContents
Selection.End(xlDown).Select
Wend
Sheets("Hoja1").Select
Range("A1").Select
End Sub
- Compartir respuesta
- Anónimo
ahora mismo