Macro - Juntar dos columnas con espacios

A ver si me explico bien ahora, quería conseguir una macro que hiciese lo siguiente:
Cogiese la columna A de las hojas 1 y 2 del libro 1, y las juntase una seguida de la otra en la hoja1 del libro2. Parece sencillo pero cuando las columnas tienen celdas vacías da problemas y es que la nueva columna mantenga los espacios vacíos de las dos originales.
Por ejemplo (imaginemos que el ejemplo son columnas):
libro 1, hoja 1= 1," ", 2, 4
libro 1, hoja 2= 3, 5, 6
quiero conseguir esto: libro 2, hoja 1= 1, " ", 2, 4, 3, 5, 6
En vez de eso me sale esto: 1,3,5,6, osea me pega la segunda columna a partir del espacio

1 respuesta

Respuesta
1
Que pena que no dejaste tu rutina para ajustarla directamente. Seguramente estás equivocando en la manera en que estableces la última celda.
Te dejo un ejemplo solo para fila 1. En mi página de macros encontrarás otras instrucciones para establecer los límites de rangos.
Sub Copia_dos_hojas()
'x Elsamatilde
'seleccionamos la primer fila de Hoja1 hasta última col con datos
Range("A1", Range("IV1").End(xlToLeft)).Select
Selection.Copy
'copiamos en Libro2 a partir de A1
Windows("Libro2").Activate
Range("A1").Select
ActiveSheet.Paste
'vuelvo a Libro1, Hoja2 y copio hasta última col con datos
Windows("Libro1").Activate
Sheets("Hoja2").Select
Range("A1", Range("IV1").End(xlToLeft)).Select
Selection.Copy
'en Libro2 copio a partir de la última col con datos +1
Windows("Libro2").Activate
Range("IV1").End(xlToLeft).Offset(0, 1).Select
ActiveSheet.Paste
End Sub
Sdos. No dejes la consulta sin finalizar si el tema queda resuelto
Es eso exactamente lo que pretendía, te envío mi código a ver en lo que estaba fallando, con la aclaración que son las COLUMNAS las que pretendo copiar.
Sub MacroParaLibroA()
'col A Hoja 1
Windows("libro1.xlsx").Activate
Sheets("hoja1").Select
Range("A1").Select
filafin = ActiveSheet.Range("A65536").End(xlUp).Row
ActiveSheet.Range("A1:A" & filafin).Copy
Windows("libro2.xlsx").Activate
Range("A1").Select
If IsEmpty(ActiveCell) Then
ActiveSheet.Paste
ElseIf IsEmpty(ActiveCell.Offset(1, 0)) Then
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
Else
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
End If
'col A Hoja 2
Windows("libro1.xlsx").Activate
Sheets("hoja2").Select
Range("A1").Select
filafin = ActiveSheet.Range("A65536").End(xlUp).Row
ActiveSheet.Range("A1:A" & filafin).Copy
Windows("libro2.xlsx").Activate
Range("A1").Select
If IsEmpty(ActiveCell) Then
ActiveSheet.Paste
ElseIf IsEmpty(ActiveCell.Offset(1, 0)) Then
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
Else
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
End If
End Sub
Hola Elsa, ¿no quería abusar pero serías tan amable de decirme en que parte de mi código estaba fallando?, es que no consigo verlo.
Muchísimas gracias
Esperame un poco qua ya lo pruebo... no finalices aún
La expresión End(xlDown) busca desde la activa hacia abajo hasta encontrar una celda vacía... por eso empezaba a pegar desde allí.
Para agregar registros siempre tenés que utilizar la búsqueda desde abajo hacia arriba..
Si la col aún está vacía se parará en A1, pero si tiene datos debo moverme una hacia abajo con Offset.
Tu rutina debiera quedar así:
Sub MacroParaLibroA()
'x Elsamatilde
'col A Hoja 1
Windows("Libro1.xlsm").Activate
Sheets("hoja1").Select
Range("A1").Select
filafin = ActiveSheet.Range("A65536").End(xlUp).Row
ActiveSheet.Range("A1:A" & filafin).Copy
Windows("Libro2.xlsm").Activate
Range("A65536").End(xlUp).Select
'como se seleccionó la última celda con datos debo moverme 1 hacia abajo
If Not IsEmpty(ActiveCell) Then ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
'col A Hoja 2
Windows("Libro1.xlsm").Activate
Sheets("hoja2").Select
Range("A1").Select
filafin = ActiveSheet.Range("A65536").End(xlUp).Row
ActiveSheet.Range("A1:A" & filafin).Copy
Windows("Libro2.xlsm").Activate
Range("A65536").End(xlUp).Select
If Not IsEmpty(ActiveCell) Then ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
End Sub
PD) Últimos días para aprovechar la promo del mes en manuales.
Sdos
Elsa
http://aplicaexcel.galeon.com/manuales.htm
Hola Elsa, ante todo agradecerte esta inapreciable ayuda que me estás dando. Ahora bien respecto al último código que me pones falla en una situación.
Los datos que quiero copiar están a partir de la fila 10, osea en la fila 9 hay un titulo y a partir de ahí empiezan los datos. Hasta aquí todo bien porque bastaría sustituir "A1" por "A10" en el código que me modificaste. Pero:
Si la hoja2 del libro1 (origen) está vacía, es decir, sólo contiene el titulo, irá a copiar debajo de los datos de la hoja1 el titulo (fila9) en el libro2 (destino).
Ej:
fila___hoja1___hoja2
_______A_______A
1
...
9____titulo1___titulo2
10_____2_____(vacio)
11_____4_____(vacio)
12_____1_____(vacio)
13_____5_____(vacio)
En este caso en el libro 2 únicamente me deberían aparecer los datos de la hoja 1, pero en vez de eso aparecen los datos de la hoja 1 seguidos de "titulo2", tal que así:
2
4
1
5
titulo2
Resumiendo, si la hoja2 del libro1 esta vacía se pegaría en el libro2 el titulo que va antes de los datos de dicha hoja.
Tu rutina empezaba en A1 y copiaba en A1...
Es importante (y esto va para todos los usuarios) que envíen las consultas CON PRECISIÓN, para que ambos no perdamos tiempo.
Ahora esperame por favor que tengo que continuar con otras tareas... mañana te lo resolveré,
Sdos
Elsa
Te pido disculpas Elsa, precisamente planteé el problema desde la A1 para no hacerte perder el tiempo pensando que podría después yo adaptarlo, vuelvo a pedirte inmensas disculpas de nuevo, no volverá a pasar, la próxima consulta será absolutamente precisa.
Saludos y muchas gracias por tu inestimable ayuda
Con este ajuste no pasa ningún titulo, tampoco de la Hoja1 (ya que mencionaste que empezarás a copiar desde la fila 10)
Sub MacroParaLibroA()
'x Elsamatilde
'col A Hoja 1
'Windows("Libro1.xls").Activate
Sheets("hoja1").Select
Range("A1").Select
filafin = ActiveSheet.Range("A65536").End(xlUp).Row
If filafin >= 10 Then
ActiveSheet.Range("A10:A" & filafin).Copy
Windows("Libro2.xls").Activate
Range("A65536").End(xlUp).Select
'como se seleccionó la última celda con datos debo moverme 1 hacia abajo
If Not IsEmpty(ActiveCell) Then ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
End If
'col A Hoja 2
Windows("Libro1.xls").Activate
Sheets("hoja2").Select
Range("A1").Select
filafin = ActiveSheet.Range("A65536").End(xlUp).Row
If filafin >= 10 Then
ActiveSheet.Range("A10:A" & filafin).Copy
Windows("Libro2.xls").Activate
Range("A65536").End(xlUp).Select
If Not IsEmpty(ActiveCell) Then ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
End If
End Sub
Sdos
Elsa

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas