You are on page 1of 4

Inicio >

Tecnologa e Internet > Software y aplicaciones > Microsoft Excel


Macro que vea si se cumple una condicin y
copie otra celda de la fila, si no que baje y re-
evale

Respuesta de
aprendemos
a
MonicaRQ
28/11/2012
Usuario
Hola,
Necesito ayuda para crear una macro que evalu si una celda (HOJA 1, Celda L2) cumple una condicin.
Si la condicin se cumple (="Cobro"), que copie el contenido de una segunda celda de la misma fila (HOJA 1, Celda B2) y lo pegue en
una tercer celda ubicada en otra hoja del mismo archivo (HOJA 2, celda A5)
Si la condicin no se cumple (<> Cobro), que baje una fila y evale nuevamente la condicin en la nueva celda (HOJA 1, Celda L3).
Si la condicin se cumple que repita el procedimiento de copiar y pegar; si no se cumple, que siga bajando y evaluando hasta que
encuentre una celda vaca en la columna L.

Intent hacer mi macro siguiendo un caso similar en el foro pero no me sali:

Sub copiar()
Sheets("HOJA1").Range("L2").Select
If (ActiveCell.Value = Cobro) Then
'si se cumple bajamos una celda
ActiveCell.Offset(1, 0).Select
Else
If (ActiveCell.Value <> Cobro) Then
direccin = ActiveCell.address
ActiveCell("B2").copy
Sheets("WU to HOJA2").Select
Range("A5").Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Select
Loop
ActiveSheet.Paste
Sheets("DTSHOJA1").Select
Range(direccin).Select
ActiveCell.Offset(1, 0).Select
End If
End If
Next
End Sub

Ojal que me puedan ayudar a corregirlo o darme otra opcin.
Muchas gracias!




Experto
Hola:
Te anexo una macro

Sub cobro()
'busca "cobro" copia y pega
'Por.Dam

Sheets("hoja1").Select
'obtiene la ltima fila con datos de la columna L
ufila = Range("L" & Rows.Count).End(xlUp).Row

'obtiene el nmero de columna que representa la letra L
col = Range("L2").Column
k = 5
For i = 2 To ufila ' recorre toda la columna hasta la ltima celda con datos
If Cells(i, col) = "Cobro" Then
'copia a la hoja2 columna A el contenido de la hoja1 columna B
Sheets("hoja2").Range("A" & i + 3) = Sheets("hoja1").Range("B" & i)
k = k + 1
End If
Next 'va al siguiente registro

Sheets("hoja2").Select
End Sub

Cambia en la macro los nombres hoja1 y hoja2 por los nombres reales de tus hojas.

La duda que me queda es, si en L2 encuentra Cobro que copie B2 a A5, para la siguiente vez que encuentre
Cobro, por ejemplo, si en L6 encuentra Cobro, dnde lo va a copiar: en A6 (que es la siguiente lnea que le sigue
a A5), o lo va a copiar en A9.
La macro que te envi es para copiar en A9, si quieres que se copie en A6

Cambia esta lnea
Sheets("hoja2").Range("A" & i + 3) = Sheets("hoja1").Range("B" & i)

Por esta
Sheets("hoja2").Range("A" & k) = Sheets("hoja1").Range("B" & i)



Saludos.Dam
Si es lo que necesitas, por favor, podras finalizar la pregunta.Gracias


Usuario
Hola,

Muchas gracias por tu ayuda. Esto es justo lo que necesitaba. Slo tengo la siguiente duda, cmo cambio la celda
en que quiero que empiece a pegarse la informacin?

Es decir, s quiero que se pegue en la hoja 2, pero en lugar de que sea A5, que empiece A7 y luego le siga en el A8
y as sucesivamente.

Muchas gracias

Experto
Hola:
Reemplaza esta lnea
k = 5
Por esta
K = 7

Reemplaza esta lnea
Sheets("hoja2").Range("A" & i + 3) = Sheets("hoja1").Range("B" & i)
Por esta
Sheets("hoja2").Range("A" & k) = Sheets("hoja1").Range("B" & i)

Saludos.Dam
Usuario
Muchas gracias por tu ayuda, funcion tal y como lo necesitaba.
Saludos!

You might also like