Mejorar una macro (esta deja celdas en blanco)

Hola, hace rato que estoy intentando programar un marcro, pero no doy pie con bola. Tengo 2 planillas A y B. Necesito copiar las columnas a, b, c, j, l, m, n de A a B, pero solo me interesan copiar las filas, en las cuales la celda en la columna H se encuentre vacía. Gracias

1 respuesta

Respuesta
1
Vamos a ver si te he entendido copias las celdas de A a B y la celda de la columna H de A debe estar vacía, la macro quedaría así:
Sub Copiar_Pegar()
Dim cel1, cel2, cel3, valor, cel4, cel5, cel6, cel7 As String
Sheets("Hoja1").Select 'Suponiendo que sea tu planilla A esta hoja
Range("A1").Select
Do While ActiveCell <> ""
celda = ActiveCell.Address
cel1 = ActiveCell.Value ' Col A
cel2 = ActiveCell.Offset(0, 1).Value 'Col B
cel3 = ActiveCell.Offset(0, 2).Value 'Col C
valor = ActiveCell.Offset(0, 7).Value 'Col H la que debe estar vacía
cel4 = ActiveCell.Offset(0, 9).Value 'Col J
cel5 = ActiveCell.Offset(0, 11).Value 'Col L
cel6 = ActiveCell.Offset(0, 12).Value 'Col M
cel7 = ActiveCell.Offset(0, 13).Value 'Col N
If valor = "" Then
Sheets("Hoja2").Select  'Suponiendo que tu planilla B sea esta hoja
Range("A1").Select
celda1 = ActiveCell.Address
ActiveCell.Value = cel1
ActiveCell.Offset(0, 1).Value = cel2
ActiveCell.Offset(0, 2).Value = cel3
ActiveCell.Offset(0, 9).Value = cel4
ActiveCell.Offset(0, 11).Value = cel5
ActiveCell.Offset(0, 12).Value = cel6
ActiveCell.Offset(0, 13).Value = cel7
End If
Range(celda1).Select
ActiveCell.Offset(1, 0).Select
Sheets("Hoja1").Select
ActiveCell.Offset(1, 0).Select
Loop
End Sub
La macro se sitúa en la primera celda de la Hoja 1 y va bajando copiando siempre el mismo rango de celdas y llevándolo a la Hoja 2 en el mismo rango de celdas, si la Col H la encuentra con dato se la saltará y seguirá comprobando hasta que en la Col A se encuentre con una celda vacía, entonces se parará de jecutar código.
Si te sirve, puntúa y finaliza la consulta. Si necesitas cambiar algo me lo dices. Gracias
>Un saludo
>Julio
Hola Julio, gracias por la respuesta. No me funciona, me da un error 1008 en esta línea: Range(celda1). Select y tengo una duda. Cada vez que entra al IF en la hoja2, para copiar los datos, ¿no selecciona siempre la misma celda A1? No entiendo bien como avanza, al salir del IF hace el salto a la siguiente fila, ¿pero cuándo vuelve a entrar no selecciona la A1? Gracias
Ya te he explicado, me sitúo en la celda A1 de la Hoja1 compruebo si la celda de esa fila de la Col H esta vacía si es así copia los valores de las celdas que pusiste va a la hoja2 y los pega en la fila 1 de esa hoja (que imagino está vacía) pero ahora me doy cuenta que puse el cierre dos lineas antes, en la hoja2 tiene que quedar así:
Sub Copiar_Pegar()
Dim cel1, cel2, cel3, valor, cel4, cel5, cel6, cel7 As String
Sheets("Hoja1").Select 'Suponiendo que sea tu planilla A esta hoja
Range("A1").Select
Do While ActiveCell <> ""
celda = ActiveCell.Address
cel1 = ActiveCell.Value ' Col A
cel2 = ActiveCell.Offset(0, 1).Value 'Col B
cel3 = ActiveCell.Offset(0, 2).Value 'Col C
valor = ActiveCell.Offset(0, 7).Value 'Col H la que debe estar vacía
cel4 = ActiveCell.Offset(0, 9).Value 'Col J
cel5 = ActiveCell.Offset(0, 11).Value 'Col L
cel6 = ActiveCell.Offset(0, 12).Value 'Col M
cel7 = ActiveCell.Offset(0, 13).Value 'Col N
If valor = "" Then
Sheets("Hoja2").Select  'Suponiendo que tu planilla B sea esta hoja
Range("A1").Select
celda1 = ActiveCell.Address
ActiveCell.Value = cel1
ActiveCell.Offset(0, 1).Value = cel2
ActiveCell.Offset(0, 2).Value = cel3
ActiveCell.Offset(0, 9).Value = cel4
ActiveCell.Offset(0, 11).Value = cel5
ActiveCell.Offset(0, 12).Value = cel6
ActiveCell.Offset(0, 13).Value = cel7
Range(celda1).Select
ActiveCell.Offset(1, 0).Select
celda1=ActiveCell.Address
End If
Sheets("Hoja1").Select
Range(celda).Select
ActiveCell.Offset(1, 0).Select
Loop
End Sub
La macro ira comprobando fila a fila si la Col H está vacía y te la llevará a la Hoja2 en la primera fila libre.
Comprueba y me dices.
>Un saludo
>Julio
Probé el macro y no dio error. Pero como te decía copio siempre en la celda A1 de la hoja2. Nunca se movió a la siguiente fila. Cambié un poquito y quedó así:
Sub Copiar_Pegar()
Dim cel1, cel2, cel3, valor, cel4, cel5, cel6, cel7 As String
Sheets("ENE-2000-1").Select 'Suponiendo que sea tu planilla A esta hoja
Range("A1").Select
Dim cont As Integer
cont = 0
Do While ActiveCell <> ""
celda = ActiveCell.Address
cel1 = ActiveCell.Value ' Col A
cel2 = ActiveCell.Offset(0, 1).Value 'Col B
cel3 = ActiveCell.Offset(0, 2).Value 'Col C
valor = ActiveCell.Offset(0, 7).Value 'Col H la que debe estar vacía
cel4 = ActiveCell.Offset(0, 9).Value 'Col J
cel5 = ActiveCell.Offset(0, 11).Value 'Col L
cel6 = ActiveCell.Offset(0, 12).Value 'Col M
cel7 = ActiveCell.Offset(0, 13).Value 'Col N
If valor = "" Then
Sheets("Hoja2").Select  'Suponiendo que tu planilla B sea esta hoja
Range("A1").Select
celda1 = ActiveCell.Address
'ActiveCell.Value = cel1
ActiveCell.Offset(cont, 0).Value = cel1
ActiveCell.Offset(cont, 1).Value = cel2
ActiveCell.Offset(cont, 2).Value = cel3
ActiveCell.Offset(cont, 3).Value = cel4
ActiveCell.Offset(cont, 4).Value = cel5
ActiveCell.Offset(cont, 5).Value = cel6
ActiveCell.Offset(cont, 6).Value = cel7
Range(celda1).Select
cont = cont + 1
ActiveCell.Offset(cont, 0).Select
celda1 = ActiveCell.Address
End If
Sheets("ENE-2000-1").Select
Range(celda).Select
ActiveCell.Offset(1, 0).Select
Loop
End Sub
Solo no lo terminaba, gracias
Esta bien si lo has solucionado, pero no quiero quedar como que no he hecho lo que necesitabas, en que parte de tu consulta o aclaraciones pones que siempre querías que las celdas copiadas de A fuesen siempre a la fila 1 de la Hoja B.
Si al final te ha servido puntúa y finaliza la consulta.
>Un saludo
>Julio
No quería que las celdas de A se copiaran siempre a la fila 1 de la hojaB, quizás me expresé mal en la consulta. De todas formas el código que me proporcionaste me vino bien y lo terminé solo, que es lo fundamental.
Gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas