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.
microsoft-excel
worksheet-function
drapkin11
fonte
fonte
Respostas:
EVALUATE
está disponível no VBA em todas as versões atuaisVocê pode incluí-lo no seu código VBA ou envolvê-lo em um UDF simples para disponibilizá-lo como uma função da planilha
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 resultadofonte
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)
Escreva
=evaluate(
e clique na célula que você deseja (melhor manter a referência relativa).)
eva
).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=eva
para obter a avaliação de qualquer célula que resta de uma célula de onde você deseja. (por exemplo, em B2,=eva
retornará o resultado da célula A2)fonte
=auswerten(...)
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 .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),)
fonte
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):
Para fazer o INDIRECT funcionar, a planilha externa deve estar aberta.
fonte