web-dev-qa-db-fra.com

Comment transformer une formule de chaîne en une "vraie" formule

J'ai 0,4*A1 dans une cellule (sous forme de chaîne). Comment convertir cette "formule de chaîne" en une formule réelle et calculer sa valeur dans une autre cellule?

63
Cloaky

Evaluate pourrait convenir:

http://www.mrexcel.com/forum/showthread.php?t=62067

Function Eval(Ref As String)
    Application.Volatile
    Eval = Evaluate(Ref)
End Function
49
Fionnuala

J'ai concaténé ma formule comme d'habitude, mais au début j'avais '= au lieu de =.

Ensuite, je copie et colle en tant que texte là où j'en ai besoin. Puis je surligne la section enregistrée en tant que texte et appuie sur ctrl + H trouver et remplacer.
Je remplace '= avec = et toutes mes fonctions sont actives.

Ses quelques étapes mais il évite VBA.

J'espère que ça aide,

Rob

34
Robbie

Juste pour le plaisir, j'ai trouvé un article intéressant ici , pour utiliser une fonction d'évaluation en quelque sorte cachée qui existe dans Excel. L'astuce consiste à l'attribuer à un nom et à utiliser le nom dans vos cellules, car EVALUATE () vous donnerait un message d'erreur s'il était utilisé directement dans une cellule. J'ai essayé et ça marche! Vous pouvez l'utiliser avec un nom relatif si vous souhaitez copier des lignes dans une feuille.

12
Patrick Honorez

UPDATE Cela fonctionnait (en 2007, je crois), mais pas dans Excel 2013.

Excel 2013:

Ce n’est pas tout à fait la même chose, mais s’il est possible de mettre 0,4 dans une cellule (B1, par exemple) et la valeur textuelle A1 dans une autre cellule (C1, par exemple), dans la cellule D1, vous pouvez utiliser = B1 * INDIRECT ( C1), qui aboutit au calcul de 0,4 * valeur de A1.

Donc, si A1 = 10, vous obtiendrez 0.4*10 = 4 Dans la cellule D1. Je mettrai à jour à nouveau si je peux trouver une meilleure solution pour 2013, et désolé, Microsoft a détruit la fonctionnalité d'origine d'INDIRECT!

Version Excel 2007:

Pour une solution non-VBA, utilisez la formule INDIRECT. Il prend une chaîne en tant qu'argument et la convertit en une référence de cellule.

Par exemple, =0.4*INDIRECT("A1") renverra la valeur 0.4 * la valeur figurant dans la cellule A1 de cette feuille de calcul.

Si la cellule A1 avait la valeur 10, par exemple, alors =0.4*INDIRECT("A1") renverrait 4.

10
wardw123

Je préfère la solution VBA pour des solutions professionnelles.

Avec la partie procédure de remplacement dans la question rechercher et remplacer ENTIERS MOTS UNIQUEMENT , j'utilise la procédure VBA suivante:

''
' Evaluate Formula-Text in Excel
'
Function wm_Eval(myFormula As String, ParamArray variablesAndValues() As Variant) As Variant
    Dim i As Long

    '
    ' replace strings by values
    '
    For i = LBound(variablesAndValues) To UBound(variablesAndValues) Step 2
        myFormula = RegExpReplaceWord(myFormula, variablesAndValues(i), variablesAndValues(i + 1))
    Next

    '
    ' internationalisation
    '
    myFormula = Replace(myFormula, Application.ThousandsSeparator, "")
    myFormula = Replace(myFormula, Application.DecimalSeparator, ".")
    myFormula = Replace(myFormula, Application.International(xlListSeparator), ",")

    '
    ' return value
    '
    wm_Eval = Application.Evaluate(myFormula)
End Function


''
' Replace Whole Word
'
' Purpose   : replace [strFind] with [strReplace] in [strSource]
' Comment   : [strFind] can be plain text or a regexp pattern;
'             all occurences of [strFind] are replaced
Public Function RegExpReplaceWord(ByVal strSource As String, _
ByVal strFind As String, _
ByVal strReplace As String) As String

    ' early binding requires reference to Microsoft VBScript
    ' Regular Expressions:
    ' with late binding, no reference needed:
    Dim re As Object
    Set re = CreateObject("VBScript.RegExp")

    re.Global = True
    're.IgnoreCase = True ' <-- case insensitve
    re.Pattern = "\b" & strFind & "\b"
    RegExpReplaceWord = re.Replace(strSource, strReplace)
    Set re = Nothing
End Function

L'utilisation de la procédure dans une feuille Excel ressemble à ceci:

usage in Excel-sheet

4
DrMarbuse

A mon avis, les meilleures solutions sont dans ce lien: http://www.myonlinetraininghub.com/Excel-factor-12-secret-evaluate-function

Voici un résumé: 1) Dans la cellule A1, entrez 1, 2) Dans la cellule A2, entrez 2, 3) Dans la cellule A3, entrez +, 4) Créez une plage nommée avec "= Évaluer (A1, A3 et A2)" dans le champ fait référence à un champ lors de la création de la plage nommée. Appelons cette plage nommée "testEval", 5) Dans la cellule A4, entrez = testEval,

La cellule A4 doit avoir la valeur 3.

Remarques: a) Ne nécessite aucune programmation/vba. b) Je l'ai fait dans Excel 2013 et cela fonctionne.

2
mountainclimber