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

Supposons que j'ai une chaîne de texte comme "11+5" ou même "=11+5" stocké dans une cellule. Y a-t-il une fonction dans Excel qui me permettra 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.

EVALUATE est disponible dans vba dans toutes les versions actuelles

Vous pouvez l'inclure dans votre code vba ou l'envelopper dans un simple udf 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 

Il traite essentiellement la valeur du paramètre passé comme une formule Excel, comme si elle était entrée dans une cellule

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

 =evaluate(put_reference[s]_here) 

Il s'agit d'une semi-fonction – il ne peut être utilisé que dans le Gestionnaire de Nom.

Voici comment vous pouvez l'utiliser:

  • Pointez sur une cellule et vous ouvrez le Gestionnaire de noms (à partir de l'onglet FORMULES ou en cliquant sur CTRL + F3)

    Évaluer l'exemple

  • Écrivez =evaluate( et cliquez sur la cellule que vous voulez (le mieux pour conserver une référence relative).

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

Maintenant, supposons que vous avez sélectionné B1 et fait tout cela se référer à A1. En A1, vous pouvez mettre " 1 + 1 " et, en B1, vous écrivez =eva – une fois que vous avez appuyé sur ENTER, la valeur B1 sera 2 . Comme la référence dans le Gestionnaire de Nom était relative, vous pouvez utiliser =eva pour obtenir l'évaluation de n'importe quelle cellule d'une cellule à partir de laquelle vous le souhaitez. (Par exemple, dans B2, =eva renverra le résultat de la cellule A2)

 =indirect() 

Si vous utilisez cela 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 sur cette feuille de calcul):

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

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