it-swarm.com.de

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

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.

25
drapkin11

EVALUATE ist in allen aktuellen Versionen in VBA 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" führen zu demselben Ergebnis

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

Dies ist eine Semifunktion - sie kann nur in Name Manager verwendet werden.

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

    Evaluate Example

  • Schreiben Sie =evaluate( und klicken Sie auf die gewünschte Zelle (am besten, um die relative Referenz beizubehalten).

  • Beende die Formel mit )
  • Geben Sie ihm einen NAMEN (in diesem Beispiel nenne ich es 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 setzen "1 + 1"und in B1 schreiben Sie =eva - sobald Sie die EINGABETASTE gedrückt haben, ist der B1-Wert 2. Da der Verweis in Name Manager relativ war, können Sie =eva verwenden, um die Auswertung einer Zelle zu erhalten, von der eine Zelle übrig ist, von der aus Sie es möchten (zB in B2 gibt =eva das Ergebnis von Zelle A2 zurück)

16

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 of eval problem

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 =if(today(),"A1+B1",) ersetzt werden. Oder D1 könnte durch =if(today(),eval,) ersetzt werden. Jede flüchtige Funktion sollte ausreichen.

Eine dritte und vielleicht einfachste Lösung besteht darin, die Semi-Funktion im Namensmanager in =if(today(),evaluate(c1),) zu ändern.

5
jlear
=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.

2
user206351