Função do Excel que avalia uma string como se fosse uma fórmula?

26

Suponha que eu tenha uma sequência de texto como "11+5"ou mesmo "=11+5"armazenada em uma célula. Existe uma função no Excel que me permita realmente avaliar essa sequência como se fosse uma fórmula?

Isso seria útil para outro projeto em que eu gostaria de escrever fórmulas 'dinâmicas' no Excel.

drapkin11
fonte
3
O Excel tinha essa função EVALUATE () que faz exatamente isso. Isso foi há muito tempo, porém, e não tenho muita certeza sobre o novo excel. Vou bisbilhotar e ver se consigo encontrar algo equivalente.
precisa saber é
1
essa função parece familiar, mas certamente não consigo encontrá-la no Excel2007, que é o que estou usando atualmente.
precisa saber é o seguinte
Eu não consigo encontrá-lo = /
aCuria

Respostas:

26

EVALUATE está disponível no VBA em todas as versões atuais

Você pode incluí-lo no seu código VBA ou envolvê-lo em um UDF simples para disponibilizá-lo como uma função da planilha

Function ev(r As Range) As Variant
    ev = Evaluate(r.Value)
End Function

Basicamente, trata o valor do parâmetro passado como uma fórmula do Excel, o mesmo que se tivesse sido inserido em uma célula.

"11+5"e "=11+5"produzirá o mesmo resultado

Chris Neilsen
fonte
1
Esqueci tudo sobre funções definidas pelo usuário no Excel - obrigado.
precisa saber é o seguinte
Fiz uma pequena modificação alterando o parâmetro Range para String e funciona bem de mim. obrigada
Makah
17
=evaluate(put_reference[s]_here)

Esta é uma semifunction - pode unicamente ser utilizado em Nome Manager.

É assim que você pode usá-lo:

  • Aponte para uma célula e abra o Gerenciador de nomes (na guia FÓRMULAS ou clicando em CTRL + F3)

    Avaliar exemplo

  • Escreva =evaluate(e clique na célula que você deseja (melhor manter a referência relativa).

  • Termine a fórmula com )
  • Dê um NOME - (neste exemplo, eu vou chamá-lo eva).
  • Clique em OK .

Agora, vamos supor que você selecionou B1 e fez tudo isso se referir a A1. Em A1 você pode colocar " 1 + 1 " e em B1 você escreve =eva- depois de pressionar ENTER, o valor B1 será 2. Como a referência no Gerenciador de nomes era relativa, você pode usar =evapara obter a avaliação de qualquer célula que resta de uma célula de onde você deseja. (por exemplo, em B2, =evaretornará o resultado da célula A2)

Laurentiu Mirica
fonte
1
Muito bom - e bom saber. Ele funciona até mesmo para uma coluna da tabela: = avalia algo (Tablename [@ [coluna]]) você não pode encontrar em um maior Excel Ajuda- ou Tutorial avançado facilmente
Paschi
1
... e como de costume com fórmulas do Excel, se você usar uma compilação localizada, você precisa usar a função localizada - por exemplo, no Excel 2016 DE ele é chamado=auswerten(...)
kiwiwings
7

Há uma ressalva importante com a ótima resposta de @karel e @Laurentiu Mirica: a função de avaliação não será recalculada a menos que a célula referenciada seja alterada. Por exemplo, a célula C1 contém o texto "A1+B1"e D1 contém a função =eval. Se os valores em A1 ou B1 forem alterados, a célula D1 não será recalculada .

Demonstração do problema de avaliação

Isso pode ser corrigido através da introdução de uma função volátil na cadeia ou na célula de avaliação. Isso forçará um recálculo sempre que a planilha for recalculada. Por exemplo, a célula C1 pode ser substituída por =if(today(),"A1+B1",). Ou, D1 poderia ser substituído por =if(today(),eval,). Qualquer função volátil deve funcionar.

Uma terceira e talvez a solução mais simples é alterar a semi-função no gerenciador de nomes para =if(today(),evaluate(c1),)

jlear
fonte
Obrigado, eu tenho procurado por um truque como esse há algum tempo :)
Ben Personick 15/02
4
=indirect()

se você usar isso em uma célula (ao lado de concatenar), pode ser muito útil.

Por exemplo, esta fórmula exibirá o valor da célula B5 em outra planilha (cujo nome está armazenado na célula A2 nesta planilha):

=INDIRECT(CONCATENATE(A2,"!B5"))

Para fazer o INDIRECT funcionar, a planilha externa deve estar aberta.

user206351
fonte
Não funciona, retorna # REF
SIslam
10
INDIRECT pode executar funções e matemática, mas apenas como parte da criação de uma referência de célula. Não pode ser usado no sentido geral solicitado na pergunta.
Fixer1234