Macro para buscar un valor y copiar y pegar

Necesitaría buscar una macro para buscar un valor de una celda dentro de un rango y cuando lo encuentre copiar la celda que ha encontrado más las dos celdas de la derecha y pegarlas en la misma línea de la celda que ha buscado

Pongo un ejemplo

Tres columnas A, B, C Hoja3

Tres columnas D, E, F Hoja2

La celda A1 hay que buscarla dentro de la columna D1, cuando la encuentre dentro de la columna copiar el valor más las dos celdas de la misma fila (E, F) y pegar en G, H, I de la fila 1

Luego en la columna J pondré la diferencia entre las celdas C1 y I1

Cuando no encuentre el valor pasara a la siguiente fila y dejara vacía esa fila

2 Respuestas

Respuesta
2

Te anexo la macro

Sub macro()
    Set h1 = Sheets("Hoja3")
    Set h2 = Sheets("Hoja2")
    With h1.Range("G1:G" & h1.Range("A" & Rows.Count).End(xlUp).Row)
        .FormulaR1C1 = "=VLOOKUP(RC[-6],Hoja2!C[-3]:C[-2],2,0)"
        .Value = .Value
    End With
    With h1.Range("H1:H" & h1.Range("A" & Rows.Count).End(xlUp).Row)
        .FormulaR1C1 = "=VLOOKUP(RC[-7],Hoja2!C[-4]:C[-2],3,0)"
        .Value = .Value
    End With
End Sub

[Si te ayudó la información, no olvides valorar la respuesta.

Hola, no me he explicado bien, lo intento de nuevo

Hoja1 tres columnas A, B, C

Hoja2 tres columnas D, E, F

Hoja3 vacía

Necesito que compare los datos de la columna A de la hoja1 con los datos de la columna D de la hoja2

Y los coloque en la hoja3 a partir de B2 pero en la misma fila y cuando no haya coincidencia entre ellos los pase al final de la lista

Como se puede ver D4 queda vacía porque no encontró coincidencia

A su vez A5 también quedo vacía

Las columnas B y C van asociadas a A y las columnas E y F van asociadas a D

Pero no pusiste las imágenes de la hoja1 y hoja2

Podrías poner 3 imágenes una por cada hoja; y en base a las imágenes explicas qué se debe hacer

Lo intento, solo he colocado cuatro códigos pero tengo casi 800 en cada hoja

HOJA1

Hoja2

Es que tus imágenes no corresponden con tu explicación.

Por ejemplo, dices:

Necesito que compare los datos de la columna A de la hoja1 con los datos de la columna D de la hoja2

¿Ves? Quieres comparar la columna A con la D, pero en tu imagen de la Hoja2 no está la columna D.


Tienes que intentarlo de nuevo.

Poner 3 imágenes y EXPLICAR lo que necesitas.

Hoja3

Como se puede ver el código A2 de la Hoja1coincide con D2 de la hoja2

EL código A4 no de la hoja1 no encontró en la hoja2

El código D13 de la Hoja2 no le encontró en la Hoja1

Cuando los códigos no este en las dos hojas quedara en blanco. A su vez los códigos están colocados de menor a mayor

No sé como pedirte 3 imágenes. Solamente estás poniendo UNA.

Revisa bien tus ejemplos

Esta es tu hoja2, NO TIENE COLUMNA D

Hoja2

Tienes Razón Dante 

Los datos de la hoja2 también están en las columnas A,B,C

Hoja1

Hoja2

Hoja3

Así deberían ser tus explicaciones, con esas 3 imágenes, incluso no es necesaria la explicación.

Te anexo la macro

Sub Buscar_Valores()
'Por Dante Amor
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Hoja2")
    Set h3 = Sheets("Hoja3")
    '
    h3.Cells.ClearContents
    j = 2
    'Busca hoja1 en hoja2
    For i = 2 To h1.Range("A" & Rows.Count).End(xlUp).Row
        Set b = h2.Columns("A").Find(h1.Cells(i, "A").Value, lookat:=xlWhole)
        h3.Range("A" & j & ":C" & j).Value = h1.Range("A" & i & ":C" & i).Value
        If Not b Is Nothing Then
            h3.Range("D" & j & ":F" & j).Value = h2.Range("A" & b.Row & ":C" & b.Row).Value
        End If
        j = j + 1
    Next
    'Busca hoja2 en hoja1
    For i = 2 To h2.Range("A" & Rows.Count).End(xlUp).Row
        Set b = h1.Columns("A").Find(h2.Cells(i, "A").Value, lookat:=xlWhole)
        If b Is Nothing Then
            h3.Range("D" & j & ":F" & j).Value = h2.Range("A" & i & ":C" & i).Value
            j = j + 1
        End If
    Next
    MsgBox "Fin"
End Sub

[sal u dos

Costo trabajo entender lo que buscabas, prueba y me comentas.

No olvides valorar la respuesta.

Sigue pendiente la valoración!

Respuesta

No se entiende muy bien tu pregunta

  • Tienes las columnas "A","B","C" de la HOJA3
  • Tienes las columnas "D","E","¿F" de la HOJA2

Y quieres hacer? ¿Buscar el dato que esta en "A1" de la HOJA3 en la columna "D" de la HOJA2? Y si lo encuentra que pegue el valor que este en "D","E","F" de la HOJA2 en "G","H","¿I" en la HOJA3? Y en caso que no lo encuentre que borre lo que este en esas celdas de las columnas "D, E, ¿F" de la HOJA2?

¿Podrias explicar un pomo mas detallado o subir alguna imagen para que quede mas claro?

Hoja1 columnas ABC

Hoja2 columnas ABC

Hoja3 en blanco

Los datos de la Hoja1 columna A los compara con los datos Hoja2 columna A

Los traslada a la hoja3, colocando de menor a mayor y cuando no encuentre coincidencia quedaría en blanco 

Jajaj que dilema tienes con Dante, yo creo que eh entendido .. déjame intentar xD jeje

¿Tu quieres comparar los datos de la columna A de la Hoja 1 con los datos de la columna D de la Hoja 2 fila por fila estoy en lo correcto?

Si son iguales que se el dato en la columna B de la hoja 3 debajo de la última fila con datos tu dime si estoy en lo correcto

De ser así lo podrías hacer con 2 "for each", uno sobre A hoja1 y otro sobre D hoja 2

Confírmame que es eso lo que quieres hacer para hacer la macro jeje

Agarro tu respuesta

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas