web-dev-qa-db-fra.com

Fonction Excel qui évalue une chaîne comme s'il s'agissait d'une formule?

Supposons que j'ai une chaîne de texte telle que "11+5" ou même "=11+5" stockée dans une cellule. Existe-t-il une fonction dans Excel qui me permette d’évaluer 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.

25
drapkin11

EVALUATE est disponible en VBA dans toutes les versions actuelles

Vous pouvez l'inclure dans votre code VBA ou l'envelopper dans une UDF simple pour le rendre disponible en tant que fonction de feuille de calcul.

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

En gros, la valeur du paramètre passé est traitée comme une formule Excel, comme si elle était entrée dans une cellule.

"11+5" et "=11+5" produiront le même résultat

25
chris neilsen
=evaluate(put_reference[s]_here)

Ceci est une demi-fonction - il ne peut que être utilisé 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).

    Evaluate Example

  • Écrivez =evaluate( et cliquez sur la cellule souhaitée (conservez la référence relative).

  • Terminez la formule avec )
  • Donnez-lui un NOM - (dans cet exemple, je l'appellerai simplement eva).
  • Cliquez sur OK.

Supposons maintenant que vous avez sélectionné B1 et que tout cela est référé à A1. En A1 vous pouvez mettre "1 + 1"et dans B1 vous écrivez =eva - une fois que vous avez appuyé sur ENTREE, la valeur B1 sera 2. Comme la référence dans le gestionnaire de noms était relative, vous pouvez utiliser =eva pour obtenir l'évaluation de toute cellule dont il reste une cellule à partir de l'endroit souhaité. (par exemple, dans B2, =eva renverra le résultat de la cellule A2)

16
Laurentiu Mirica

@Karel et @Laurentiu Mirica ont une mise en garde importante: la fonction d'évaluation ne recalculera pas à moins que la cellule référencée ne soit modifiée. 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 .

Demonstration of eval problem

Cela peut être corrigé en introduisant une fonction volatile dans la chaîne ou dans la cellule eval. Cela forcera un recalcul chaque fois que la feuille de calcul est recalculée. Par exemple, la cellule C1 peut être remplacée par =if(today(),"A1+B1",). Ou bien, D1 pourrait être remplacé par =if(today(),eval,). Toute fonction volatile devrait faire l'affaire.

Une troisième solution, peut-être la plus simple, consiste à remplacer la fonction semi-function dans le gestionnaire de noms par =if(today(),evaluate(c1),)

5
jlear
=indirect()

si vous utilisez ceci dans une cellule (à côté de concaténer), 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):

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

Pour que INDIRECT fonctionne, la feuille de calcul externe doit être ouverte.

2
user206351