Necesito una Macro que busque una condición en una celda y que copie un rango de la misma fila donde encontró la condición

La macro que necesito debe buscar la palabra "cerrado" en la columna H, cuando la encuentre debe seleccionar un rango de la misma fila donde encontró la palabra cerrado y pegarlo en otra hoja.

Esto se realizara a diario, por lo tanto cuando quiera pegar en la hoja2 debe buscar y pegar en la siguiente fila vacía.

2 Respuestas

Respuesta
1

Algo así te servirá:

Sub marcro()
Dim argh As Range
Dim vil As String
'vamoa a seleccionar la hoja en la que tenemos los datos de origen, en el ejemplo la hoja1, nos moveremos entre la hoja1 y la hoja llamada Resumen
ActiveWorkbook.Sheets("hoja1").Activate
'iteramos desde la fila (B) 1 hasta la que queramos, en este caso 10000
For b = 1 To 10000
    ActiveWorkbook.Sheets("hoja1").Activate
    vil = Cells(b, 8).Value
    'si el valor de la celda de la fila B, columna 8 (H) empieza por la cadena de texto "cerrado" (los asteriscos quieren decir que cualquier cosa, en el ejemplo por tanto la cadena "cerrado123" cumpliría la condición, etc)
    If vil Like "cerrado*" Then
        ActiveWorkbook.Sheets("hoja1").Activate
        'entonces lo que hacemos es copiar los valores de la fila B que queramos (en el ejemplo los de las columnas J y K y el rango M:P), en tu caso deberás adaptar esta parte
        vp = Cells(b, 10).Value
        vp2 = Cells(b, 11).Value
        Range(Cells(b, 13), Cells(b, 16)).Select
        Selection.Copy
        'a continuación vamos a encontrar la primera celda vacía de la columna "A" de la hoja Resumen, nos guardamos el el número de fila en la variable ultimo
        ActiveWorkbook.Sheets("Resumen").Activate
        ActiveWorkbook.Sheets("Resumen").Cells(1, 1).Select
        Do While ActiveCell <> Empty
            ActiveCell.Offset(1, 0).Select
            ultimo = ActiveCell.Row
        Loop
        'ahora vamos a pegar lo que hemos copiado antes donde queramos de la fila ultimo, de nuevo tendrás que adaptar esta parte de código
        ActiveWorkbook.Sheets("Resumen").Cells(ultimo, 1).Value = vil
        ActiveWorkbook.Sheets("Resumen").Cells(ultimo, 3).Value = vp
        ActiveWorkbook.Sheets("Resumen").Cells(ultimo, 6).PasteSpecial Paste:=xlValues
    Else
    End If
Next
End Sub

y ya lo terminas de adaptar a tu caso.

Víctor,

No funciona como necesito

Bueno Juan, entonces es que algo no has explicado bien o yo no he entendido.. Si me explicas mejor o si me quieres mandar el archivo directamente iremos mejor.

De todos modos Adriel ya te ha respondido correctamente

Respuesta
1

H o l a 

¿Pero cuál es el rango a seleccionar? Puedes mostrar unos ejemplos

Hola Adriel,

Gracias por leer mi pregunta.

Si la palabra cerrado la encuentra en la celda H17, necesito que seleccione y corte el rango B17:Q17 y pegarlo en la hoja2

En la tabla no veo la palabra cerrado, tampoco las columnas de la tabla

H o l a:

te paso la macro 

Sub CopiarDatos()
'Adriel ortiz
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Hoja2")
    j = h2.Range("H" & Rows.Count).End(xlUp).Row + 1
    For i = 3 To h1.Range("H" & Rows.Count).End(xlUp).Row
        If h1.Cells(i, "H") = "cerrado" Then
             h1.Rows(i).Copy: h2.Range("A" & j).PasteSpecial xlValues
            j = j + 1
    End If
    Next
    Application.CutCopyMode = False
     MsgBox "Copia Finalizada"
End Sub

Valora la respuestapara finalizar como Excelente o bueno saludos!

Hola Adriel,

Funciona excelente, solo quisiera cambiar una cosa. Es posible que corte la línea donde encuentra la palabra Cerrado, al mismo tiempo elimine la fila que queda en blanco y que lo cortado se pegue en la hoja 2

Lo que podemos hacer es copiar y luego eliminar

Pero valora esta respuesta Excelente o bueno y crea una nueva pregunta para eliminar y te apoyo saludos! Esteré pendiente

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas