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.
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.
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 ().
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.
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.
''' Evaluate Formula-Text in Excel'Function wm_Eval(myFormula AsString, ParamArray variablesAndValues() As Variant) As Variant
Dim i AsLong'' replace strings by values'For i = LBound(variablesAndValues) To UBound(variablesAndValues) Step2
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)
EndFunction''' 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 replacedPublicFunction RegExpReplaceWord(ByVal strSource AsString, _
ByVal strFind AsString, _
ByVal strReplace AsString) AsString' early binding requires reference to Microsoft VBScript' Regular Expressions:' with late binding, no reference needed:Dim re AsObjectSet 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:
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 :
[Angenommen, alle beteiligten Spalten haben das Format "Allgemein".]
Öffnen Sie Notepad ++
Wählen Sie die gesamte Spalte aus D
Strg + C.
Strg + V im KKW
Strg + A im KKW
Wählen Sie die Zelle in der ersten Zeile der gewünschten Spalte aus G1
Antworten:
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
quelle
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.) verwendenApplication.ThisCell.Parent.Evaluate(Ref)
, um den Kontext auf das Blatt zu beschränken, das den Aufruf vonEval
#VALUE!
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
quelle
=
durch sich selbst zu ersetzenFind/Replace
Funktion 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.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.
quelle
Name
im Link beschriebenen Trick durchgehen .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 = 4
in 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
INDIRECT
Formel. 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.quelle
indirect
Funktion 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.=0.4*INDIRECT(A1)
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:
quelle
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.
quelle
Angenommen, wir haben eine Spalte,
E
die mit Formeln gefüllt ist, die eine Zeichenfolge zurückgeben, wie:Wenn die
D7
Zelle aus einer komplizierteren Formel besteht, die das gewünschte Endergebnis ergibt, sagen wir: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
G
und 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 :
D
G1
quelle
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.
quelle