Como copiar uma fórmula ou valor em outra fórmula

0

Eu quero saber como copiar uma fórmula para outra, mantendo os valores originais. Por exemplo, tenho no intervalo A1:A5 cinco valores (uma mistura de constantes e / ou fórmulas) e preciso (nesse mesmo intervalo - não em uma nova coluna) incluir a função =Round("original value or formula",2) (ou qualquer outra fórmula; isto é apenas um exemplo)

Por exemplo:

  • A1 valor original 50.64635
  • A2 fórmula original =3*F1 (que pode ser exibida como 54.25875 se F1 contiver 18.08625 )
  • A3 fórmula original =SQRT(2) (que será exibido como 1.4142136 )

Resultado que eu quero é:

  • A1 novo conteúdo (fórmula) =round(50.64635,2)
  • A2 novo conteúdo (fórmula) =round(3*F1,2)
  • A3 novo conteúdo (fórmula) =round(SQRT(2),2)

Observe que não quero que A1 seja alterado para 50.65 , e não quero que A2 seja alterado para 54.26 ou mesmo =ROUND(54.25875,2) , etc. Eu sei como fazer coisas semelhantes com operações simples ( copy/paste special – Formula – add, substract, multiply, divide ) e manter valores originais ou fórmulas. Mas eu não sei como envolver uma função em torno de um valor existente ou construa uma fórmula usando uma fórmula existente como componente.

A outra ideia seria reproduzir meus valores / fórmulas originais em texto, usar a função localizar / substituir, concatenar ou alguma mistura estranha e eu chegaria ao resultado desejado, mas gostaria de saber se há algum caminho mais curto;)

    
por Arom79 10.09.2015 / 10:35

1 resposta

0

O recurso "Localizar e substituir" do Excel não parece ser poderoso o suficiente fazer o que quiser. No entanto, é bastante fácil no VBA.

Primeiro, faça uma cópia do seu arquivo, caso algo dê errado.

Em seguida, crie a seguinte sub-rotina VBA:

Sub Arom79Sub()

    On Error Resume Next
    For Each c In Range("A1:A5")
        If c.HasFormula And Left(c.Formula, 1) = "=" Then
            temp = Right(c.Formula, Len(c.Formula) - 1)
        Else
            temp = c.Value
        End If
        If temp <> "" Then
            c.Formula = "=ROUND(" & temp & ", 2)"
        End If
    Next c
    On Error GoTo 0

End Sub

Veja Como adiciono o VBA no MS Office? para obter informações gerais sobre como usar o VBA no Excel e os outros aplicativos do Microsoft Office. Arom79Sub é apenas um nome de sub-rotina arbitrário; use o nome que quiser.

  • On Error Resume Next diz que, se ocorrer um erro, basta ir ao próximo extrato e continuar correndo. (Por exemplo, se uma célula contiver um valor constante que não seja um número (isto é, um valor de string / texto), o código acima causará um erro.)
  • For Each c ... Next c é um loop que olha para cada célula no intervalo A1:A5 , definindo c para se referir a cada célula em sequência.
  • c.HasFormula é um booleano que informa se a célula c contém uma fórmula. Em seguida, também verificamos se o primeiro caractere da "fórmula" é = . Isso é provavelmente redundante. Se é definitivamente uma fórmula, defina temp para a fórmula real; isto é, tudo à direita do = (por exemplo, 3*F1 , no seu exemplo para A2 ).
  • Caso contrário, defina temp como o valor na célula (por exemplo, 50.64635 , no seu exemplo para A1 ).
  • Se o valor (ou fórmula) não estiver em branco, defina a fórmula da célula como sendo =ROUND(previous_contents, 2) .
  • Execute On Error GoTo 0 para restaurar o tratamento normal de erros.

Em seguida, execute a sub-rotina.

Obviamente, você pode alterar o intervalo ou a nova fórmula.

    
por 11.09.2015 / 00:49