Supposons que j'ai une chaîne de texte comme "11+5"
ou même "=11+5"
stockée dans une cellule. Existe-t-il une fonction dans Excel qui me permettra d'évaluer réellement cette chaîne comme s'il s'agissait d'une formule?
Cela serait utile pour un autre projet où j'aimerais pouvoir écrire des formules «dynamiques» dans Excel.
microsoft-excel
worksheet-function
drapkin11
la source
la source
Réponses:
EVALUATE
est disponible en VBA dans toutes les versions actuellesVous pouvez l'inclure dans votre code VBA ou l'envelopper dans un UDF simple pour le rendre disponible en tant que fonction de feuille de calcul
Il traite essentiellement la valeur du paramètre passé comme une formule Excel, comme s'il était entré dans une cellule
"11+5"
et"=11+5"
produira le même résultatla source
Il s'agit d'une semi-fonction - elle ne peut être utilisée que dans le gestionnaire de noms.
Voici comment vous pouvez l'utiliser:
Pointez sur une cellule et ouvrez le Gestionnaire de noms (à partir de l'onglet FORMULES ou en cliquant sur CTRL + F3)
Écrivez
=evaluate(
et cliquez sur la cellule souhaitée (il est préférable de conserver une référence relative).)
eva
).Supposons maintenant que vous avez sélectionné B1 et que tout cela se réfère à A1. En A1, vous pouvez mettre " 1 + 1 " et en B1 vous écrivez
=eva
- une fois que vous avez appuyé sur ENTRÉE, la valeur B1 sera2
. Comme la référence dans le gestionnaire de noms était relative, vous pouvez utiliser=eva
pour obtenir l'évaluation d'une cellule à gauche de l'endroit où vous le souhaitez. (par exemple en B2,=eva
renverra le résultat de la cellule A2)la source
=auswerten(...)
Il y a une mise en garde importante avec la grande réponse de @karel et @Laurentiu Mirica: la fonction d'évaluation ne recalculera que si la cellule référencée change. Par exemple, la cellule C1 contient le texte
"A1+B1"
et D1 contient la fonction=eval
. Si les valeurs dans A1 ou B1 changent, la cellule D1 n'est pas recalculée .Cela peut être corrigé en introduisant une fonction volatile dans la chaîne ou la cellule eval. Cela forcera un recalcul chaque fois que la feuille de calcul est recalculée. Par exemple, la cellule C1 pourrait être remplacée par
=if(today(),"A1+B1",)
. Ou, D1 pourrait être remplacé par=if(today(),eval,)
. Toute fonction volatile devrait faire l'affaire.Une troisième solution, et peut-être la plus simple, consiste à remplacer la semi-fonction du gestionnaire de noms par
=if(today(),evaluate(c1),)
la source
si vous l'utilisez dans une cellule (avec concaténation), cela peut être très utile.
Par exemple, cette formule affichera la valeur de la cellule B5 sur une autre feuille de calcul (dont le nom est stocké dans la cellule A2 de cette feuille de calcul):
Pour que INDIRECT fonctionne, la feuille de calcul externe doit être ouverte.
la source