So verwandeln Sie eine Zeichenfolgenformel in eine „echte“ Formel


75

Ich habe 0,4*A1in einer Zelle (als String). Wie kann diese "Zeichenfolgenformel" in eine echte Formel umgewandelt und ihr Wert in einer anderen Zelle berechnet werden?



Könnten Sie es umgekehrt machen? Ab Excel 2013 zeigt FORMULATEXT () die Formel an, mit der das Ergebnis erstellt wurde. Aus Sicht des Endbenutzers sehen die Werte in beiden Zellen genauso aus, wie Sie es sich wünschen.
Cartbeforehorse

Antworten:


54

Evaluate könnte passen:

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

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

20
Seien Sie vorsichtig, wenn Sie diesen Ansatz verwenden : Evaluate()Standardmäßig wird im Kontext des aktivenEval("0.4*A1") Arbeitsblatts gearbeitet, sodass sich die Ausgabe von etwas Ähnlichem ändert, je nachdem, welches Arbeitsblatt aktiv ist. Sie können (z. B.) verwenden Application.ThisCell.Parent.Evaluate(Ref), um den Kontext auf das Blatt zu beschränken, das den Aufruf vonEval
Tim Williams vom

@PrzemyslawRemin ja, es funktioniert immer noch mindestens bis Excel 2016
phuclv

Dies funktioniert für mich, aber als die zu bewertende Zeichenfolge zu lang war, schlug sie #VALUE!
fehl.

44

Ich habe meine Formel wie gewohnt verkettet, aber am Anfang hatte ich '=statt =.

Dann kopiere ich und füge es als Text dort ein, wo ich es brauche. Dann markiere ich den als Text gespeicherten Abschnitt und drücke ctrl+ H, um zu suchen und zu ersetzen.
Ich ersetze '=durch =und alle meine Funktionen sind aktiv.

Es ist ein paar Stufen, aber es vermeidet VBA.

Ich hoffe das hilft,

rauben


4
Dies ist ein Gewinner! Ich habe @ verwendet, weil 'ein Zeichen in meinen Formeln war
Xcheque

9
Sie brauchen kein Apostroph: Es reicht aus, um es =durch sich selbst zu ersetzen
Roman Gudkov

1
Genial einfach! Ich fand, dass es für mich funktionierte, nur das = -Zeichen zu finden und zu ersetzen, weil ich am Anfang nicht den Charakter 'hatte.
stuartm

Sie können diese Methode auch verwenden, wenn Sie mithilfe der Find/ReplaceFunktion wiederholte, ähnliche Änderungen in mehreren Zellen vornehmen möchten . Deaktivieren Sie die =mit /= @=oder was auch immer Sie wollen vorübergehend deaktivieren Formel und lassen Sie Formel als Text zeigen. Dann suchen / ersetzen Sie, was Sie wirklich ändern möchten. Das endgültige Suchen / Ersetzen ändert sich /= @=usw. wieder auf "Just" =und es wird wieder eine selbstberechnende Formel. Keine Formatierungsänderungen.
Jon Grah

Das ist absolut GENIUS und hat mir gerade Stunden und Stunden Zeit gespart!
PeterH

12

Nur zum Spaß habe ich hier einen interessanten Artikel gefunden , um eine irgendwie versteckte Auswertungsfunktion zu verwenden, die in Excel existiert. Der Trick besteht darin, ihn einem Namen zuzuweisen und den Namen in Ihren Zellen zu verwenden, da EVALUATE () bei direkter Verwendung in einer Zelle eine Fehlermeldung ausgibt. Ich habe es versucht und es funktioniert! Sie können es mit einem relativen Namen verwenden, wenn Sie zeilenübergreifend ein Blatt kopieren möchten.


Interessant, schien aber nicht für neuere Versionen von Excel zu gelten. Wenn ich es richtig gelesen habe, war es ein Trick, auf unterdrücktes Excel-Verhalten der 90er Jahre in Excel der frühen 2000er Jahre zuzugreifen, aber in den Jahren 2010, 2013, Office 365 usw. veraltet?
Craig Celeste

2
Nichts ist "veraltet", wenn es funktioniert! 4.0 Die Makrosprache bietet ein paar nette Tricks.
Johny, warum

1
Leider gibt es in Excel 2013 keine Funktion = EVALUATE ().
wardw123

Es funktioniert immer noch in Excel für Mac 2011 - siehe [this] ( superuser.com/questions/253353/… )
Paschi

Es funktioniert immer noch mit Excel 2013. Ich habe es gerade getestet, aber Sie müssen den Nameim Link beschriebenen Trick durchgehen .
Patrick Honorez

11

UPDATE Dies funktionierte früher (2007, glaube ich), aber nicht in Excel 2013.

EXCEL 2013:

Dies ist nicht ganz dasselbe, aber wenn es möglich ist, 0,4 in eine Zelle (z. B. B1) und den Textwert A1 in eine andere Zelle (z. B. C1) in Zelle D1 zu setzen, können Sie = B1 * INDIRECT ( C1), was zur Berechnung des Wertes von 0,4 * A1 führt.

Wenn also A1 = 10 ist, gelangen Sie 0.4*10 = 4in Zelle D1. Ich werde erneut aktualisieren, wenn ich eine bessere Lösung für 2013 finden kann. Tut mir leid, dass Microsoft die ursprüngliche Funktionalität von INDIRECT zerstört hat!

EXCEL 2007 Version:

Verwenden Sie für eine Nicht-VBA-Lösung die INDIRECTFormel. Es nimmt eine Zeichenfolge als Argument und konvertiert sie in eine Zellreferenz.

Gibt beispielsweise =0.4*INDIRECT("A1")den Wert 0,4 * zurück, den Wert in Zelle A1 dieses Arbeitsblatts.

Wenn Zelle A1 beispielsweise 10 wäre, =0.4*INDIRECT("A1")würde 4 zurückgegeben.


Weitere Informationen und nützliche Beispiele finden Sie unter - contextures.com/xlFunctions05.html und cpearson.com/excel/indirect.htm
Frank

10
Ich bin fasziniert von den 16 Up-Votes - soweit ich die indirectFunktion verstehe, wird dies niemals funktionieren. Ich kann sehen, wie Sie so etwas wie =INDIRECT("A"&(0.4*5))Mathematik verwenden können, um die Referenz der Zelle zu berechnen, aber ich bin mir ziemlich sicher, dass indirekt nichts anderes als eine Referenz berechnet.
Stripybadger

3
Dieser Ansatz funktioniert nicht - wie können wir diese Antwort korrigieren?
Tim Williams

3
Der Grund, warum es nicht funktioniert, ist, dass die Formel falsch verwendet wird. Die richtige Formel lautet=0.4*INDIRECT(A1)
LPChip

@ Brunox13 - die genehmigte Bearbeitung rückgängig gemacht. Wirklich, diese Antwort sollte einfach gelöscht werden. Es gibt einen Grund, warum es zum Zeitpunkt des Schreibens dieses Kommentars 26 Abstimmungen gibt.
BigBen

4

Ich bevorzuge die VBA-Lösung für professionelle Lösungen.

Mit dem Teil "Ersetzungsverfahren" in der Fragensuche und NUR GANZE WÖRTER ersetzen verwende ich das folgende VBA-Verfahren:

''
' 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

Die Verwendung des Verfahrens in einem Excel-Blatt sieht folgendermaßen aus:

Verwendung in Excel-Sheet


3

Meiner Meinung nach finden Sie die besten Lösungen in diesem Link: http://www.myonlinetraininghub.com/excel-factor-12-secret-evaluate-function

Hier eine Zusammenfassung: 1) Geben Sie in Zelle A1 1 ein, 2) Geben Sie in Zelle A2 2 ein, 3) Geben Sie in Zelle A3 + ein, 4) Erstellen Sie einen benannten Bereich mit "= Auswerten (A1 & A3 & A2)" im Feld bezieht sich auf das Feld beim Erstellen des benannten Bereichs. Nennen wir diesen benannten Bereich "testEval". 5) Geben Sie in Zelle A4 = testEval,

Zelle A4 sollte den Wert 3 enthalten.

Hinweise: a) Erfordert keine Programmierung / vba. b) Ich habe dies in Excel 2013 gemacht und es funktioniert.


Das angegebene Beispiel hat nicht funktioniert, aber das Beispiel unter dem Link hat funktioniert. Das passte zur Rechnung. Vielen Dank.
JayJay123

Perfekte Lösung für einen Excel-Benutzer
Suhail Abdul Rehman Chougule

0

Angenommen, wir haben eine Spalte, Edie mit Formeln gefüllt ist, die eine Zeichenfolge zurückgeben, wie:

= " = " & D7

Wenn die D7Zelle aus einer komplizierteren Formel besteht, die das gewünschte Endergebnis ergibt, sagen wir:

= 3.02 * 1024 * 1024 * 1024

Und so in allen riesigen Mengen von Reihen, die sind.

Wenn die Zeilen etwas klein sind, reicht es gerade aus, die gewünschten Zellen als Werte (nach RMB)
in die nächste Spalte zu kopieren Gund F2 mit der folgenden Eingabetaste in jede der Zeilen zu drücken .
Bei einer großen Anzahl von Zeilen ist dies jedoch unmöglich ...

Also kein VBA. Keine zusätzlichen Formeln. Kein F & R.

Keine Fehler, kein Tippfehler, sondern nur dumme mechanische Aktionen,

Wie auf einem Ford-Förderband. Und das in nur wenigen Sekunden :

  1. [Angenommen, alle beteiligten Spalten haben das Format "Allgemein".]
  2. Öffnen Sie Notepad ++
  3. Wählen Sie die gesamte Spalte aus D
  4. Strg + C.
  5. Strg + V im KKW
  6. Strg + A im KKW
  7. Wählen Sie die Zelle in der ersten Zeile der gewünschten Spalte aus G1
  8. Strg + V.
  9. Genießen :) .

-3

Der beste Weg, dies ohne VBA zu tun, ist die Verwendung der TEXT-Formel. Es nimmt eine Zeichenfolge als Argument und konvertiert sie in einen Wert.

Beispiel: = TEXT ("0.4 * A1", '##') gibt den Wert 0.4 * zurück, den Wert, der sich in Zelle A1 dieses Arbeitsblatts befindet.


1
Dies funktioniert nicht und die Formel ist falsch ("benötigt anstelle von 'um
##
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.