2010-12-17 15 views

Antwort

34

Eval könnte passen:

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

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

** Seien Sie vorsichtig, wenn Sie diesen Ansatz verwenden **: 'Evaluate()' wird standardmäßig * im Kontext des aktiven Blattes * arbeiten, so dass die Ausgabe von etwas wie 'Eval (" 0.4 * A1 ")' ändert sich abhängig davon, welches Arbeitsblatt aktiv ist. Sie können (zB) 'Application.ThisCell.Parent.Evaluate (Ref)' verwenden, um den Kontext auf das Blatt einzuschränken, das den Aufruf von 'Eval' enthält. –

+0

Funktioniert es noch in Excel 2013? –

10

Just for fun, fand ich ein interesting article here, eine irgendwie versteckt bewerten Funktion zu verwenden, die in Excel nicht vorhanden ist. Der Trick besteht darin, es einem Namen zuzuordnen und den Namen in Ihren Zellen zu verwenden, da EVALUATE() Ihnen eine Fehlermeldung geben würde, wenn Sie direkt in einer Zelle verwendet werden. Ich habe es versucht und es funktioniert! Sie können es mit einem relativen Namen verwenden, wenn Sie bei einem Blatt mehrere Zeilen kopieren möchten.

+0

Interessant, schien aber nicht für neuere Versionen von Excel zu gelten. Wenn ich es richtig gelesen habe, war es ein Trick, um das Excel-Verhalten von 1990 in das Excel-Jahr 2000 zu bekommen, aber veraltet in 2010, 2013, Office 365 usw.? –

+1

Arbeitete für mich in Excel 2010 ... – jimbobmcgee

+2

Nichts ist "veraltet", wenn es funktioniert! 4.0 Makro-Sprache bietet ein paar nette Tricks. –

9

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

EXCEL 2013: Das ist nicht ganz die gleiche, aber wenn es möglich ist 0,4 setzen in eine Zelle (zB B1) und der Textwert A1 in einer anderen Zelle (zB C1), in Zelle D1 können Sie = B1 * INDIREKT (C1) verwenden, was zur Berechnung des Wertes von 0.4 * A1 führt. Also, wenn A1 = 10, erhalten Sie 0,4 * 10 = 4 in Zelle D1. Ich werde wieder aktualisieren, wenn ich eine bessere 2013 Lösung finden kann, und 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 INDIREKT. Es nimmt eine Zeichenfolge als Argument und konvertiert sie in eine Zellreferenz.

Zum Beispiel, = 0,4 * INDIREKT ("A1") gibt den Wert von 0,4 * den Wert zurück, der in Zelle A1 dieses Arbeitsblattes ist.

Wenn Zelle A1, sagen ist, 10, dann = 0,4 * INDIREKT ("A1") zurückkehren würde 4.

+6

Es funktioniert nicht mit Excel 2007 !! –

+0

arbeitete mindestens einmal in XL 2010 – gordon

+0

für weitere Informationen und nützliche Beispiele siehe - http://www.contextures.com/xlFunctions05.html und http://www.cpearson.com/excel/indirect.htm – Frank

24

ich meine Formel als normal Verkettete aber am Anfang hatte ich '= statt =.

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

Seine ein paar Stufen, aber es vermeidet VBA.

Ich hoffe, das hilft,

Rob

+4

Dies ist ein Gewinner! Ich benutze @, weil 'war ein Zeichen in meinen Formeln – Xcheque

+5

Sie brauchen kein Ereignis Apostroph: es ist genug zu ersetzen '=' mit sich selbst –

+1

Brillant einfach!Ich fand, dass nur Suchen und Ersetzen das = Zeichen für mich gearbeitet, weil ich nicht die "Zeichen am Anfang hatte. – stuartm

2

I prefere die vba-Lösung für professionelle Lösungen.

Mit Teilen des Ersatz-Verfahren in Frage search and replace WHOLE WORDS ONLY, 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 

Verwendung des Verfahrens in einem Excel-Blatt wie folgt aussieht:

usage in excel-sheet

-1

Der beste Weg, dies nicht zu tun, ist die TEXT-Formel. Es nimmt eine Zeichenfolge als Argument und konvertiert es in einen Wert.

Zum Beispiel, = TEXT ("0.4 * A1", '##') wird den Wert von 0,4 * den Wert, der in Zelle A1 dieses Arbeitsblattes ist.

+0

Das funktioniert nicht, und die Formel ist falsch (“benötigte anstelle von 'um ##.) – wardw123

1

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) in der Zelle A1 1 eingeben, 2) in der Zelle A2 2 eingeben, 3) In Zelle A3 Geben Sie +, ein. 4) Erstellen Sie einen benannten Bereich mit "= Auswerten (A1 & A3 & A2)" im Feld Verweis auf, während Sie den benannten Bereich erstellen. Rufen wir diesen benannten Bereich "testEval", 5) In Zelle A4 geben Sie ein = testEval,

Zelle A4 sollte den Wert 3 darin haben.

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

+0

Das angegebene Beispiel nicht funktioniert hat, aber das Beispiel bei der Verbindung nicht funktioniert. Das ist genau das Richtige. Danke. – JayJay123

Verwandte Themen