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
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