it-swarm.com.de

So wandeln Sie eine Zeichenfolgenformel in eine "echte" Formel um

Ich habe 0,4*A1 in einer Zelle (als Zeichenfolge). Wie kann man diese "Zeichenkettenformel" in eine echte Formel umwandeln und ihren Wert in einer anderen Zelle berechnen?

63
Cloaky

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
49
Fionnuala

Ich habe meine Formel wie gewohnt verkettet, aber zu Beginn hatte ich '= anstatt =.

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 zu finden und zu ersetzen.
Ich ersetze '= mit = und alle meine Funktionen sind aktiv.

Es ist ein paar Stufen, aber es vermeidet VBA.

Ich hoffe das hilft,

Rauben

34
Robbie

Aus Spaß habe ich einen interessanten Artikel hier gefunden, um eine irgendwie versteckte Auswertungsfunktion zu verwenden, die es in Excel gibt. Der Trick besteht darin, es einem Namen zuzuweisen und den Namen in Ihren Zellen zu verwenden, da EVALUATE () eine Fehlermeldung ausgeben würde, wenn es direkt in einer Zelle verwendet würde. Ich habe es versucht und es funktioniert! Sie können es mit einem relativen Namen verwenden, wenn Sie zeilenübergreifend auf ein Blatt kopieren möchten.

12
Patrick Honorez

UPDATE Früher funktionierte das (glaube ich 2007), 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 schreiben, können Sie = B1 * INDIRECT ( C1), wodurch der Wert von 0,4 * A1 berechnet wird.

Wenn also A1 = 10 ist, wird in Zelle D1 0.4*10 = 4 Angezeigt. 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 Formel INDIRECT. Es nimmt einen String als Argument und konvertiert ihn in einen Zellverweis.

Beispielsweise gibt =0.4*INDIRECT("A1") den Wert 0,4 * des Werts in Zelle A1 dieses Arbeitsblatts zurück.

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

10
wardw123

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

Mit dem Ersetzungsprozedur-Teil in der Frage suche und ersetze NUR GANZE WÖRTER verwende ich die folgende VBA-Prozedur:

''
' 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 der Prozedur in einer Excel-Tabelle sieht folgendermaßen aus:

usage in Excel-sheet

4
DrMarbuse

Meiner Meinung nach ist die beste Lösung in diesem Link: http://www.myonlinetraininghub.com/Excel-factor-12-secret-evaluate-function

Hier ist eine Zusammenfassung: 1) Geben Sie in Zelle A1 1, 2) Geben Sie in Zelle A2 2, 3) Geben Sie in Zelle A3 + ein, 4) Erstellen Sie einen benannten Bereich mit "= Evaluate (A1 & A3 & A2)" im verweist auf das Feld, während der benannte Bereich erstellt wird. Nennen wir diesen benannten Bereich "testEval". 5) Geben Sie in Zelle A4 = testEval ein.

Zelle A4 sollte den Wert 3 enthalten.

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

2
mountainclimber