Macro Buscar Determinadas celdas con cierta fórmula y pegar el resultado de las mismas

Por internet he conseguido el siguiente código:

On Error Resume Next
For Each Hoja In Sheets
For Fila = 1 To _
Hoja.Cells.Find("]Portada'!", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
For Columna = 1 To _
Hoja.Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
Hoja.Cells(Fila, Columna) = Hoja.Cells(Fila, Columna)
Next
Next
Next

End Sub

Lo que hace esta macro es buscar en todo un libro (En todas las Hojas), todas las celdas que contengan en la fórmula la palabra "]Portada'!", esta palabra porque viene de una referencia a otro libro, apenas la macro encuentra este nombre convierte en valores su respectivo resultado, pero... Aquí viene mi pregunta el libro que tengo donde se ejecuta esta macro consta de aprox de 9 hojas, pero esta macro cuando se ejecuta es muy muy muy demorada aprox 25 minutos, entonces no se porque, realmente en unas hojas esta palabra que debe buscar empieza desde la misma fila uno y en una hoja específicamente esta búsqueda aparece aprox desde la fila 400, entonces no se si por eso se demora, si recorre uno a uno celdas hasta llegar a la 400 y hay si empieza a reemplazar. ¿Señores ustedes creen que hay otra forma de hacer más rápido este trabajo?

1 Respuesta

Respuesta
1

La macro hace otra cosa de lo que comentas. La macro busca la última palabra "]Portada'!" y cuando la encuentra obtiene el número de fila en donde encontró la palabra; luego busca la última columna con datos. Por ejemplo, si tu palabra está en la fila 400 y tu última columna con datos es la 80, la última celda será "CB400". Entonces la macro reemplaza todas tus fórmulas, desde la celda "A1" hasta la celda "CB400", por el valor, es decir, que si tienes una fórmula que no tiene una referencia también te la cambia por valor.

Lo que hace la macro lo puedes hacer con esto:

Sub pegarvalores()
'Por.DAM
    For Each h In Sheets
        h.Cells.Copy
        h.Range("A1").PasteSpecial Paste:=xlValues
    Next
End Sub

Ahora si quieres que solamente te cambie las fórmulas que tienen referencia a la palabra "]Portada'!" hay que hacer otra macro.

Espero tus comentarios.

Saludos. Dante Amor

Si es lo que necesitas no olvides valorar la respuesta.

:( Estimado dante si es lo que tu dices, es una macro que todas las fórmulas que contienen la palabra portada, en todo el libro pegue su resultado como valor gracias

La macro que tenías iba reemplazando celda por celda desde la celda "A1" hasta la última celda con datos, por eso es muy lenta.

Utiliza esta macro para cambiar solamente las fórmulas que contengan la palabra. Si en una hoja tienes 3 palabras solamente cambia 3 celdas.

Sub valores()
'Por.DAM
    For Each h In Sheets
        Set b = h.Cells.Find("]Portada'!")
        If Not b Is Nothing Then
            celda = b.Address
            Do: Set b = h.Cells.FindNext(b)
                If Not b Is Nothing Then
                    h.Range(b.Address) = h.Range(b.Address)
                End If
            Loop While Not b Is Nothing And b.Address <> celda
        End If
    Next
    MsgBox "Fórmulas cambiadas por valores", vbInformation
End Sub

Saludos.DAM

No olvides valorar la respuesta.

:O Dam que genialidad es exacto tu macro hace exactamente lo que requería, muchas muchas muchas gracias! Por tu tiempo y tu buen trabajo, ¿una ultima pregunta sabes porque no funciona con las celdas que están combinadas?

A mi sí me funciona con celdas combinadas, pero prueba con esta:

Sub valores()
'Por.DAM
    For Each h In Sheets
        Set b = h.Cells.Find("]Portada'!", LookIn:=xlFormulas, LookAt:=xlPart)
        If Not b Is Nothing Then
            celda = b.Address
            Do: Set b = h.Cells.FindNext(b)
                If Not b Is Nothing Then
                    h.Range(b.Address) = h.Range(b.Address)
                End If
            Loop While Not b Is Nothing And b.Address <> celda
        End If
    Next
    MsgBox "Fórmulas cambiadas por valores", vbInformation
End Sub

Muchísimas gracias! Es exactamente lo que necesitaba de nuevo Mil gracias por tu tiempo, y tu buen trabajo.

Saludos!

Puedes valorar la respuesta

Añade tu respuesta

Haz clic para o