Excel-Funktion, die einen String wie eine Formel auswertet?

26

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.

drapkin11
quelle
3
Excel hatte diese EVALUATE () - Funktion, die genau dies tut. Das ist allerdings schon lange her und ich bin mir nicht sicher, was das neue Excel angeht. Will stöbern und sehen, ob ich etwas Äquivalentes finden kann.
aCuria
1
Diese Funktion kommt mir bekannt vor, aber ich kann sie in Excel 2007 nicht finden, was ich derzeit verwende.
drapkin11
Ich kann es auch nicht finden = /
aCuria

Antworten:

26

EVALUATE ist in VBA in allen aktuellen Versionen verfügbar

Sie können es in Ihren VBA-Code einfügen oder in eine einfache UDF einbinden, um es als Arbeitsblattfunktion verfügbar zu machen

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

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 produzieren

chris neilsen
quelle
1
Ich habe alles über benutzerdefinierte Funktionen in Excel vergessen - danke.
drapkin11
Ich habe eine kleine Änderung vorgenommen, bei der der Range-Parameter in String geändert wurde, und es funktioniert gut für mich. Danke
Makah
17
=evaluate(put_reference[s]_here)

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).

    Beispiel auswerten

  • Schreiben Sie =evaluate(und klicken Sie auf die Zelle, die Sie möchten (am besten, um die relative Referenz beizubehalten).

  • Beenden Sie die Formel mit )
  • Geben Sie ihm einen NAMEN (in diesem Beispiel nenne ich ihn einfach eva).
  • Klicken Sie auf OK .

Nehmen wir nun an, Sie haben B1 ausgewählt und all dies auf A1 bezogen. In A1 können Sie " 1 + 1 " =evaeingeben und in B1 schreiben - sobald Sie die EINGABETASTE gedrückt haben, ist der B1-Wert 2. Da die Referenz in Name Manager relativ war, können Sie =evadie Auswertung jeder Zelle verwenden, von der eine Zelle an der gewünschten Stelle verbleibt. (zB in B2 =evawird das Ergebnis von Zelle A2 zurückgegeben)

Laurentiu Mirica
quelle
1
Sehr gut - und gut zu wissen. Es funktioniert sogar für eine Tabellenspalte: = EVALUATE (Tabellenname [@ [Spalte]]) Etwas, das Sie in den meisten Excel-Hilfs- oder erweiterten Lernprogrammen nicht leicht finden können
Paschi,
1
... und wie bei Excel-Formeln üblich, wenn Sie einen lokalisierten Build verwenden, müssen Sie die lokalisierte Funktion verwenden - z. B. in Excel 2016 DE heißt sie=auswerten(...)
kiwiwings
6

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 .

Demonstration des Bewertungsproblems

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),)

jlear
quelle
Vielen Dank Ich habe seit einiger Zeit nach einem Trick wie diesem gesucht :)
Ben Personick
4
=indirect()

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):

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

Damit INDIRECT funktioniert, muss das externe Arbeitsblatt geöffnet sein.

user206351
quelle
Funktioniert nicht, gibt #REF
SIslam
9
INDIRECT kann Mathematik und Funktionen ausführen, jedoch nur als Teil der Erstellung einer Zellreferenz. Es kann nicht im allgemeinen Sinne verwendet werden, wie es in der Frage gestellt wird.
Fixer1234