Ich habe 0,4*A1
in einer Zelle (als String). Wie kann diese "Zeichenfolgenformel" in eine echte Formel umgewandelt und ihr Wert in einer anderen Zelle berechnet werden?
Ich habe 0,4*A1
in einer Zelle (als String). Wie kann diese "Zeichenfolgenformel" in eine echte Formel umgewandelt und ihr Wert in einer anderen Zelle berechnet werden?
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
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
#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
=
durch sich selbst zu ersetzen
Find/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.
Name
im Link beschriebenen Trick durchgehen .
UPDATE Dies funktionierte früher (2007, glaube ich), aber nicht in 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!
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.
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:
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.
Angenommen, wir haben eine Spalte, E
die mit Formeln gefüllt ist, die eine Zeichenfolge zurückgeben, wie:
= " = " & D7
Wenn die D7
Zelle 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 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
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.