Macro en excel que copie un valor de una hoja a otra con criterios coincidentes en ambas

No he conseguido localizar ninguna respuesta que se adecue a mi operativa exactamente y es muy sencilla pero como no manejo muy bien el VB me he lanzado a los expertos a plantear la cuestión.

Necesito traspasar desde una hoja1 a una hoja 2 una celda numérica que esta formulada y situar dicho importe como valor numérico a la derecha de un código coincidente en ambas hojas.

En la hoja1 tengo en la celda A1 con un código de identificación con formato texto (pc-X) que voy cambiando a medida que lo necesito y en la celda C1 con formato numérico una fórmula que me trae un número de otro parte de la hoja.

En la hoja 2 en la columna F, tengo la relación completa de los códigos de identificación que empiezan por pc- y luego un número (pc-1/pc-2/....) que van desde la línea 2 hasta la 6500. Estos códigos no están configurados como texto sino como fórmulas, ya que concatena varias columnas para dar la numeración que me interesa. Lo comento a modo de que puede afectar a la programación.

Lo que necesito es una macro que al identificar en la hoja 2 en la columna F el mismo código que estoy usando en la hoja 1 en la celda A1 me copie en la columna E de esta hoja 2 el importe que hay en la celda C1 de la hoja 1 pero como valor numérico

De esta forma en la columna F tendré la relación de los códigos de identificación y en su columna de al lado a la derecha sus importes correspondientes.

Lo que pretendo es tener un registro de los importes asociados a cada código de identificación una vez tengo los calculo hechos.

Preciso que se ejecute este proceso con un botón

Puede darse el caso que se olvide de ejecutar la macro y se quede sin rellenar el valor de la columna E pero la operativa debe cointinuar como si nada.

2 Respuestas

Respuesta
1

Entiendo que en la hoja1, en la celda A1 tienes el dato "PC-1". En la celda C1 tienes un número por ejemplo: 723

Entonces en la hoja2, en la celda F2 tienes "PC1", quieres poner en la celda E2 el dato 723

Si es correcto lo anterior.

Pon en un botón la siguiente macro

Sub Macro3()
'Por.Dante Amor
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Hoja2")
    u = h2.Range("F" & Rows.Count).End(xlUp).Row
    With h2.Range("E2:E" & u)
        .FormulaR1C1 = "=IFERROR(VLOOKUP(RC[1]," & h1.Name & "!C[-4]:C[-2],3,0),"""")"
        .Value = .Value
    End With
    MsgBox "Fin"
End Sub

Avísame cualquier duda.

.

.

Muchas gracias por tu ayuda.

Cuando ejecuto la macro en la hoja 2 no me copia los importes y me sale los siguiente

Te paso tambien la hoja 1 como esta definida, como veras en la celda C1 se trae el dato del importe total y es ese importe el que como valores debe situarse en la columna E de la hoja 2 cuando encuentra en esta hoja 2 el mismo código situado en la celda A1 de la hoja 1.

Según voy cambiando en la hoja 1 los codigos y los importes vuelva a buscar y a copiar como valores en la columna E de la hoja 2.

Espero que con esto te resulte más clarificadora la operativia que quiero.

Muchas gracias de nuevo

Qué versión de excel tienes. Al parecer no reconoce la función Si. Error( )

Intenta de esta forma:

Sub Macro3()
'Por.Dante Amor
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Hoja2")
    u = h2.Range("F" & Rows.Count).End(xlUp).Row
    With h2.Range("E2:E" & u)
        .FormulaR1C1 = "=VLOOKUP(RC[1]," & h1.Name & "!C[-4]:C[-2],3,0)"
        .Value = .Value
    End With
    MsgBox "Fin"
End Sub

Prueba y me comentas.

Si aún tienes problemas envíame tu archivo.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “Begoña Jimenez Rodriguez

Te cambio la macro

Sub Macro3()
'Por.Dante Amor
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Hoja2")
    Set b = h2.Columns("F").Find(h1.Range("F11").Value, lookat:=xlWhole, LookIn:=xlValues)
    If Not b Is Nothing Then
        h2.Cells(b.Row, "E").Value = h1.Range("G22").Value
    Else
        u = h2.Range("F" & h2.Rows.Count).End(xlUp).Row
        If u = 1 Then
            num = 1
            fila = u
        Else
            num = h2.Range("D" & u).Value + 1
            fila = u + 1
        End If
        h2.Cells(fila, "D").Value = num
        h2.Cells(fila, "E").Value = h1.Range("G22").Value
        h2.Cells(fila, "F").Value = h1.Range("F11").Value
    End If
    MsgBox "Pedido guardado"
End Sub

.

.

¡Gracias! ¡Gracias!

Funciona a la perfección. Gracias por compartir tu sabiduría

Cuando quieras.

Solamente un detalle.

Cambia en la macro esta línea

fila = u

Por esta:

fila = u + 1

sal u dos

Respuesta

Prueba esta macro, solo añade un botón formulario a la hoja y le asignas el nombre de esta macro.

Sub copiar_fila()
Set h1 = Worksheets("hoja1")
Set h2 = Worksheets("hoja2")
Set datos = h1.Range("a1").CurrentRegion
With h2.Range("f2")
    filas = .CurrentRegion.Rows.Count
    Set pc = .Resize(filas, 1)
End With
With pc
    For i = 1 To filas
        valor = .Cells(i, 1)
        fila = WorksheetFunction.Match(valor, datos.Columns(1), 0)
        .Cells(i, 0) = datos.Cells(fila, 3)
    Next i
End With
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas