Macro que vea si se cumple una condición y copie otra celda de la fila, si no que baje y re-evalúe

Necesito ayuda para crear una macro que evalué si una celda (HOJA 1, Celda L2) cumple una condición.

Si la condición 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 condición no se cumple (<> “Cobro”), que baje una fila y evalúe nuevamente la condición en la nueva celda (HOJA 1, Celda L3). Si la condición se cumple que repita el procedimiento de copiar y pegar; si no se cumple, que siga bajando y evaluando hasta que encuentre una celda vacía 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
dirección = 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(dirección).Select
ActiveCell.Offset(1, 0).Select
End If
End If
Next
End Sub

Ojalá que me puedan ayudar a corregirlo o darme otra opción.

2 respuestas

Respuesta
6

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 número 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”, dónde lo va a copiar: en A6 (que es la siguiente línea 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 línea
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.

Hola,

Muchas gracias por tu ayuda. Esto es justo lo que necesitaba. Sólo tengo la siguiente duda, ¿cómo cambio la celda en que quiero que empiece a pegarse la información?

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

Reemplaza esta línea

k = 5

Por esta

K = 7

Reemplaza esta línea
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

Respuesta
2

Que significa la letra K

Yo quiero jalar información de una hoja que busque en la celda Wk1 y si es verdadero que copie toda la columna a otra hoja y que siga con la siguiente y si WK2 que la mande a otra hoja llamada Wk2 y así sucesivamente crees que puedas ayudarme.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas