Angenommen, ich habe eine Textzeichenfolge wie "11+5"
oder sogar "=11+5"
in einer Zelle gespeichert. Gibt es eine Funktion in Excel, mit der ich diese Zeichenfolge tatsächlich wie eine Formel auswerten kann?
Dies wäre hilfreich für ein anderes Projekt, in dem ich dynamische Formeln in Excel schreiben möchte.
microsoft-excel
worksheet-function
drapkin11
quelle
quelle
Antworten:
EVALUATE
ist in VBA in allen aktuellen Versionen verfügbarSie können es in Ihren VBA-Code einfügen oder in eine einfache UDF einbinden, um es als Arbeitsblattfunktion verfügbar zu machen
Grundsätzlich wird der Wert des übergebenen Parameters als Excel-Formel behandelt, so als ob er in eine Zelle eingegeben worden wäre
"11+5"
und"=11+5"
wird das gleiche Ergebnis produzierenquelle
Dies ist eine Semifunktion, die nur in Name Manager verwendet werden kann.
So können Sie es verwenden:
Zeigen Sie auf eine Zelle, und öffnen Sie den Namensmanager (auf der Registerkarte FORMELN oder durch Klicken auf STRG + F3).
Schreiben Sie
=evaluate(
und klicken Sie auf die Zelle, die Sie möchten (am besten, um die relative Referenz beizubehalten).)
eva
).Nehmen wir nun an, Sie haben B1 ausgewählt und all dies auf A1 bezogen. In A1 können Sie " 1 + 1 "
=eva
eingeben und in B1 schreiben - sobald Sie die EINGABETASTE gedrückt haben, ist der B1-Wert2
. Da die Referenz in Name Manager relativ war, können Sie=eva
die Auswertung jeder Zelle verwenden, von der eine Zelle an der gewünschten Stelle verbleibt. (zB in B2=eva
wird das Ergebnis von Zelle A2 zurückgegeben)quelle
=auswerten(...)
Mit der großartigen Antwort von @karel und @Laurentiu Mirica gibt es eine wichtige Einschränkung: Die Auswertungsfunktion wird nicht neu berechnet, es sei denn, die Zelle, auf die verwiesen wird, ändert sich. Beispielsweise enthält Zelle C1 den Text
"A1+B1"
und D1 enthält die Funktion=eval
. Wenn sich die Werte in A1 oder B1 ändern, wird die Zelle D1 nicht neu berechnet .Dies kann korrigiert werden, indem eine flüchtige Funktion entweder in den String oder in die Eval-Zelle eingefügt wird. Dadurch wird bei jeder Neuberechnung des Arbeitsblatts eine Neuberechnung erzwungen. Zum Beispiel könnte Zelle C1 durch ersetzt werden
=if(today(),"A1+B1",)
. Oder D1 könnte durch ersetzt werden=if(today(),eval,)
. Jede flüchtige Funktion sollte ausreichen.Eine dritte und vielleicht einfachste Lösung besteht darin, die Semi-Funktion im Namensmanager zu ändern
=if(today(),evaluate(c1),)
quelle
Wenn Sie dies in einer Zelle (neben der Verkettung) verwenden, kann dies sehr nützlich sein.
In dieser Formel wird beispielsweise der Wert von Zelle B5 in einem anderen Arbeitsblatt angezeigt (dessen Name in Zelle A2 in diesem Arbeitsblatt gespeichert ist):
Damit INDIRECT funktioniert, muss das externe Arbeitsblatt geöffnet sein.
quelle