Pegar datos en excel según condición en VBA

Quería consultar por un código que me permita hacer lo siguiente:

  • En una hoja "Hoja2", tengo un listado vertical de datos fijos ("J3:J2000").
  • En una hoja "hoja1", tengo un listado vertical de fórmulas ("Q5:Q98") que generan valores. (Cada uno de esos valores coinciden con uno y solo uno de los datos en "Hoja2" ("J3:J2000")).

Lo que necesito es hacer una macro por medio de la cual:

  1. Busque los valores generados en "hoja1" ("Q5:Q98")
  2. y cuando estos coincidan con alguno de los datos que esta en la columna "hoja2" ("J3:J2000"),
  3. peguen el rango de celdas (M:O) correspondientes al valor en "hoja1" ("Q5:Q98"), al lado de ese mismo valor para "Hoja2" (O sea, en el rango (K:M))

Ejemplo:

"hoja1"Q7 = "CACHO"

"hoja2"J247 = "CACHO"

Entonces la macro copia "hoja1"(M7:O7) y lo pega en "hoja2"(K247:M247).

VENTAJAS:

-Los valores son todos únicos. Por lo cual una vez que encontró uno de los valores en los datos, ya no sería necesario que siga buscando ese valor a lo largo de los datos.

-Los Valores en "hoja1" ("Q5:Q98") adquieren valor desde Q5 hacia abajo, sin que queden celdas sin relleno en el medio. (Lo que si hay, son formulas que dan "" como resultado, pero sólo después de la ultima celda con datos. Estaría bueno que ignore la celda cuando el valor de la celda sea "")

Respuesta
1

Te anexo la macro

Sub Buscar_Pegar()
'Por Dante Amor
'Pegar datos en excel según condición
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Hoja2")
    For i = 5 To 98
        If h1.Cells(i, "Q") <> "" Then
            Set b = h2.Range("J3:J2000").Find(h1.Cells(i, "Q").Value, lookat:=xlWhole)
            If Not b Is Nothing Then
                h2.Cells(b.Row, "K").Value = h1.Cells(i, "M").Value
                h2.Cells(b.Row, "L").Value = h1.Cells(i, "N").Value
                h2.Cells(b.Row, "M").Value = h1.Cells(i, "O").Value
            End If
        End If
    Next
    MsgBox "Fin"
End Sub

.

.

Hola Dante! Muchas gracias por la respuesta. La macro no funcionó. Los valores no se han pegado en el rango (K:M) de la hoja2. De todos modos, voy a seguir intentando ya que estoy un poco de autodidacta. Muchas gracias de todos modos.

La macro funcionó en mis pruebas.

Hay que revisar tus datos.

Enviame tu archivo con mi macro para revisar tus datos.

Mi correo [email protected]

Te agradezco, pero voy a buscarle a vuelta a esa macro a ver si la puedo hacer andar o darme cuenta que es lo que no funciona. Desde ya mil gracias por tu tiempo. 

La macro sí funciona. Te anexo mi archivo de pruebas.

https://www.dropbox.com/s/omumemwgf0wcj8n/pegar%20datos.xlsm?dl=0 

Revisa mis datos y haz pruebas con mi macro. No le cambies nada a la macro. Si tienes dudas avísame.

Hola Dante! Funciona perfecto. El problema que tenía, era que los datos en J hoja2 no estaban como datos, sino como resultados de una fórmula. Los copié y pegué como valores y funcionó. Si quisiera que funcione con los valores en J como resultados de fórmula, ¿habría qué modificar mucho en la macro? Porque ahora que lo veo mejor, si los dejo como fórmula, me permite más versatilidad al agregar nuevos renglones. Gracias!

Solamente hay que agregar el argumento LookIn a la macro, para buscar como valores resultado de una fórmula:

Sub Buscar_Pegar()
'Por Dante Amor
'Pegar datos en excel según condición
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Hoja2")
    For i = 5 To 98
        If h1.Cells(i, "Q") <> "" Then
            Set b = h2.Range("J3:J2000").Find(h1.Cells(i, "Q").Value, LookIn:=xlValues, lookat:=xlWhole)
            If Not b Is Nothing Then
                h2.Cells(b.Row, "K").Value = h1.Cells(i, "M").Value
                h2.Cells(b.Row, "L").Value = h1.Cells(i, "N").Value
                h2.Cells(b.Row, "M").Value = h1.Cells(i, "O").Value
            End If
        End If
    Next
    MsgBox "Fin"
End Sub

.

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas