Macro que busque coincidencia en columnas de diferentes hojas y copie y pegue una celda si la coincidencia se cumple

Estimados expertos/as espero puedan ayudare, en resumen quiero encontrar dos fechas iguales en dos hojas diferentes y copiar/pegar la fórmula que se encuentra en una celda de la hoja2 en las celdas en que las fechas coincidan, a continuación entrego más detalles:

1 Respuesta

Respuesta
1

No me olvidé, solo esperaba mayores aclaraciones.

Si no te hace falta la fórmula esta macro te servirá, sino me avisas.

Se recorre la col A de Hoja2 hasta su fin y completa la col VALor.

Sub buscaFechas()
'x Elsamatilde
'se recorre la col A de Hoja2
Hoja2.Select
For i = 3 To Range("A" & Rows.Count).End(xlUp).Row
    'busca la fecha en Hoja1
    Set busco = Hoja1.Range("A:A").Find(Range("A" & i), LookIn:=xlValues, lookat:=xlWhole)
    If Not busco Is Nothing Then
        'si lo encuentra realiza el cálculo dejando el resultado en col B
        filx = busco.Row
        Range("B" & i) = Application.WorksheetFunction.Sum(Hoja1.Range("B" & filx) + Hoja1.Range("C" & filx))
     Else
        Range("B" & i) = ""
    End If
Next i
End Sub

Estimada de antemano mil gracias¡ ... Funciona muy bien, sin embargo, en este caso, la macro debe detectar la celda con la palabra "VALOR" en la hoja2, copie y pegue la fórmula que existe una celda más abajo de la celda que contiene la palabra "VALOR" (B3) en las celdas en que las fechas de ambas hojas coinciden. Esto sin hacer referencia en la macro a la celda B3 ni a la columna B sino tomando como referencia la columna y la ubicación de la celda en que se encuentra la palabra "VALOR"

He logrado detectar la celda con la palabra "VALOR" en la hoja2, copie y pegue la fórmula que existe una celda más abajo de la celda que contiene la palabra "VALOR" (B3), sin embargo no puedo hacer que esta fórmula se pegue en las celdas donde las fechas coinciden.

Sub Macro()
Ref_Busca = Worksheets("Hoja2").Cells.Find(What:=Range("A1") _
, LookIn:=xlValues, MatchCase:=True).Address
If IsEmpty(Worksheets("Hoja2").Range("B3")) Then
Set Celda = Worksheets("Hoja2").Range("B3")
Set rango = Worksheets("Hoja2").Range(Celda, Celda)
Else
Set rango = Worksheets("Hoja2").Range("B3")
End If
Worksheets("Hoja2").Range(rango.Address).Copy
Worksheets("Hoja2").Range(Ref_Busca).Cells(2, 1).PasteSpecial
End Sub

NOTA: considere que en la celd A1 de la hoja1 se encontraba la palabra "VALOR"

De antemano muchas gracias por tu ayuda¡

Estimada acá adjunto un código que funciona como la macro que envié antes sin hacer referencias a celdas ni columnas

Sub Macro2()
Ref_Busca = Worksheets("Hoja2").Cells.Find(What:=Range("A1") _
, LookIn:=xlValues, MatchCase:=True).Address
Worksheets("Hoja2").Range(Ref_Busca).Cells(2, 1).Copy
Worksheets("Hoja2").Range(Ref_Busca).Cells(2, 1).PasteSpecial
End Sub

¿Dónde más puede encontrarse la palabra VALOR además de B2 como en tu imagen? ¿Podes dejar una imagen más real de cómo es tu hoja2?

Sdos!

Estimada en la celda A1 de la hoja1 se encuentra la palabra VALOR que debe ser buscada en la hoja2. Esta palabra siempre se encuentra en la fila2 de la hoja2.

Estoy trabajando con este libro de prueba, en la columna C de la hoja2, están las formulas a modo de ejemplo que debieran haberse copiado en las celdas contiguas de las columna B

Así queda entonces la macro, siguiendo con la idea de que solo se guarde el resultado no la fórmula:

Sub buscaFechas()
'x Elsamatilde
'se recorre la col A de Hoja2
Hoja2.Select
'se ubica el texto VALOR en fila 2
rgo = Range("B2", Range("B2").End(xlToRight)).Address
dato = Hoja1.[A1]
Set buscoV = Range(rgo).Find(dato, LookIn:=xlValues, lookat:=xlWhole)
If Not buscoV Is Nothing Then
    'se guarda la columna donde aparece VALOR
    colx = buscoV.Column
    For i = 3 To Range("A" & Rows.Count).End(xlUp).Row
        'busca la fecha en Hoja1
        Set busco = Hoja1.Range("A:A").Find(Range("A" & i), LookIn:=xlValues, lookat:=xlWhole)
        If Not busco Is Nothing Then
            'si lo encuentra realiza el cálculo dejando el resultado en col B
            filx = busco.Row
            Cells(i, colx) = Application.WorksheetFunction.Sum(Hoja1.Range("B" & filx) + Hoja1.Range("C" & filx))
         Else
            Cells(i, colx) = ""
        End If
    Next i
Else
    MsgBox "No se encuentra el texto VALOR en fila 2."
End If
End Sub

Si fuese con fórmulas, debieras utilizar ésta:

=SI.ERROR(BUSCARV(A3;Hoja1!A:C;2;FALSO)+BUSCARV(A3;Hoja1!A:C;3;FALSO);"")

Sdos!

Estimada Elsa Matilde, de antemano siempre muy agradecido por tu gran ayuda, sin embargo, aunque la macro ahora detecta la palabra valor y ejecuta la macro en la columna en que se encuentre la palabra VALOR (la verdad es que esta muy genial).

Creo que no me he explicado del todo bien; En la hoja2 debajo de la palabra VALOR, la celda contiene la formula =SUMA(Hoja1!B3+Hoja1!C3) (lo señalado en C3), lo que me gustaría, si es posible, es conocer alguna forma en que la macro copie esta formula (o el contenido) de la celda bajo la palabra VALOR (en este caso B2) y lo pegue en la celda donde las fechas coincidan. Considerando lo anterior las celdas donde hay coincidencia de fechas quedarían:

B3=SUMA(Hoja1!B3+Hoja1!C3)

B5=SUMA(Hoja1!B5+Hoja1!C5)

B6=SUMA(Hoja1!B6+Hoja1!C6)

B8=SUMA(Hoja1!B8+Hoja1!C8)

B9=SUMA(Hoja1!B9+Hoja1!C9)

Espero puedas ayudarme en esta inquietud, de antemano, reitero mi gran gratitud por tu gran ayuda.

La fórmula que no se puede escribir manualmente tampoco se puede con macro... por eso entendí que buscabas el resultado.

Tu fórmula de SUMA no puede identificar la fila donde se encuentra la fecha que en hoja2 está por ejemplo en fila 5.

Entonces en la siguiente macro utilicé otra que podés colocar en cualquier columna y observar el resultado:

Sub buscaFechas()
'x Elsamatilde
'se recorre la col A de Hoja2
Hoja2.Select
'se ubica el texto VALOR en fila 2
rgo = Range("B2", Range("B2").End(xlToRight)).Address
dato = Hoja1.[A1]
Set buscoV = Range(rgo).Find(dato, LookIn:=xlValues, lookat:=xlWhole)
If Not buscoV Is Nothing Then
    'se guarda la columna donde aparece VALOR
    colx = buscoV.Column
    For i = 3 To Range("A" & Rows.Count).End(xlUp).Row
        'busca la fecha en Hoja1
        Set busco = Hoja1.Range("A:A").Find(Range("A" & i), LookIn:=xlValues, lookat:=xlWhole)
        If Not busco Is Nothing Then
            'si lo encuentra realiza el cálculo dejando el resultado en col B
            filx = busco.Row
            Cells(i, colx).FormulaR1C1 = _
        "=IFERROR(VLOOKUP(RC1,Hoja1!C1:C3,2,FALSE)+VLOOKUP(RC1,Hoja1!C1:C3,3,FALSE),"""")"
            'Cells(i, colx) = Application.WorksheetFunction.Sum(Hoja1.Range("B" & filx) + Hoja1.Range("C" & filx))
         Else
            Cells(i, colx) = ""
        End If
    Next i
Else
    MsgBox "No se encuentra el texto VALOR en fila 2."
End If
End Sub

Sdos!

Muchas gracias Elsa Matilde por tu gran ayuda¡ Y responderme

¿Existe alguna forma de que en la hoja2 copie la fórmula bajo la palabra valor (B3) (sin que la fórmula sea ingresada en la macro) y se ejecute donde se encuentren coincidencias de fechas?. De esta forma puedo cambiar la fórmula en la celda y ejecutar la macro para calcular con diferentes fórmulas.

Si se puede siempre y cuando sea una fórmula correcta para todos.

En la macro dejo un comentario por si en cada col va una fórmula distinta. Ahora siempre la toma de B3. Y quedó esta fórmula con referencia absoluta para los rangos y semi absoluta para la celda de la col A, por eso solo va el signo $ en A y la fila es relativa:

=SI.ERROR(BUSCARV($A3;Hoja1!$A:$C;2;FALSO)+BUSCARV($A3;Hoja1!$A:$C;3;FALSO);"")

Sub buscaFechas()
'x Elsamatilde
'se recorre la col A de Hoja2
Hoja2.Select
'se ubica el texto VALOR en fila 2
rgo = Range("B2", Range("B2").End(xlToRight)).Address
dato = Hoja1.[A1]
Set buscoV = Range(rgo).Find(dato, LookIn:=xlValues, lookat:=xlWhole)
If Not buscoV Is Nothing Then
    'se guarda la columna donde aparece VALOR
    colx = buscoV.Column
    For i = 3 To Range("A" & Rows.Count).End(xlUp).Row
        'busca la fecha en Hoja1
        Set busco = Hoja1.Range("A:A").Find(Range("A" & i), LookIn:=xlValues, lookat:=xlWhole)
        If Not busco Is Nothing Then
            'si lo encuentra copia la fórmula de la fila 3
            filx = busco.Row
            Range("B3").Copy
                    'si la formula debe tomarse de la misma col será Cells(3, colx).Copy
            Cells(i, colx).PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
                SkipBlanks:=False, Transpose:=False
            Application.CutCopyMode = False
            'Cells(i, colx).FormulaR1C1 = _
        "=IFERROR(VLOOKUP(RC1,Hoja1!C1:C3,2,FALSE)+VLOOKUP(RC1,Hoja1!C1:C3,3,FALSE),"""")"
            'Cells(i, colx) = Application.WorksheetFunction.Sum(Hoja1.Range("B" & filx) + Hoja1.Range("C" & filx))
         Else
            Cells(i, colx) = ""
        End If
    Next i
Else
    MsgBox "No se encuentra el texto VALOR en fila 2."
End If
End Sub

Terminamos?

Sdos!

Funciona perfecto, de verdad lo intente...aun sigo estudiando macros y he aprendido mucho gracias a tu ayuda, de verdad te agradezco tu paciencia y ayuda. Estoy feliz. Gracias Infinitas.

Que toda la ayuda y buena onda con que no ayudas se multiplique a tu favor con grandes éxitos y felicidad.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas