2010-11-28 8 views
1

Ich habe einige Zellen mit, zum Beispiel, ist dieser Wert:Excel: Zelle Parsen und eine Funktion zu schaffen

5 * A-2 * B-4 * C

in anderen Zellen Ich würde die Werte für A, B und C setzen. Ich möchte eine zusätzliche Zelle machen, die den Wert zählt. Also, für ein Beispiel, wenn in einigen Zellen geschrieben wird, dass der Wert von A 2 ist, der Wert von B ist 3 und der Wert von C ist 1, möchte ich eine zusätzliche Zelle, die berechnen würde und den Wert 0 (das ist die Ergebnis von 5 * 2-2 * 3-4 * 1). Mögliche Variablen sind A, B und C, aber sie müssen nicht in jeder Zelle enthalten sein (z. B. kann eine Zelle nur 5 * A-3 * C sein).

Ist das möglich? Weiß jemand, wie man diese Funktion schreibt?

P.S. Ich kann manuelle Werte in verschiedenen Zellen nicht aufteilen, weil es Hunderte von ihnen gibt.

Danke.

+0

Sie nur die Summe in die Zelle setzen könnte, wie '= 5 * A-2 * B-4 * C'. –

Antwort

0

Dies kann mit der VBA-Funktion evalute

einfaches Beispiel geschehen:

Function ev(f As Variant, A As Range, B As Range, C As Range) As Variant 
    Dim s As String 
    s = f 
    s = Replace(s, "A", "~A~") 
    s = Replace(s, "B", "~B~") 
    s = Replace(s, "C", "~C~") 

    s = Replace(s, "~A~", A.Address) 
    s = Replace(s, "~B~", B.Address) 
    s = Replace(s, "~C~", B.Address) 

    ev = Evaluate(s) 
End Function 

zB wenn Ihr Expression in A2, und die Werte von A, B, C sind in C2: E2

=ev(A2,C2,D2,E2) 

kehrt der berechnete Wert

Sie möchten ein ParamArray anstelle von A, B, C die Variablenwerte verwenden, um eine beliebige Anzahl von Variablen zu ermöglichen.

Eine etwas vollständige Version:

Function ev(expr As Variant, VarNames As Range, varValues As Range) As Variant 
    Dim s As String 
    Dim i As Long 

    s = expr 
    For i = 1 To VarNames.Columns.Count 
     s = Replace(s, VarNames.Cells(1, i), "~" & VarNames.Cells(1, i) & "~") 
    Next 
    For i = 1 To VarNames.Columns.Count 
     s = Replace(s, "~" & VarNames.Cells(1, i) & "~", varValues.Cells(1, i).Address) 
    Next 

    ev = Evaluate(s) 
End Function 

Verbrauch:

Gleiche Daten wie oben plus Variablennamen in C1: E1

=ev(A2,C1:E1,C2:E2) 
1

Der Kommentar von Saladin Akara weist den Weg zu Ihrer einfachsten Lösung. Definieren Sie einige benannte Formeln (siehe Excel-Hilfethema "Arbeiten mit Namen") für A, B und C. Dann können alle anderen Zellen Formeln enthalten, die diese benannten Werte verwenden. Wenn das nicht ausreicht, beispielsweise wenn Sie die Formel in einer Zelle wirklich sehen und bearbeiten und dann den Wert der Formel in einer anderen Zelle berechnen möchten, können Sie das integrierte Auswerteprogramm von Excel verwenden, ohne es analysieren zu müssen die Formel selbst. Der einfachste Weg dazu ist über die Evaluate Methode des Application Objekts. (Auch hier finden Sie in der Hilfe.) Charles Williams hat Beispielcode auf seiner Website, dass hier eine Excel-Ausdruck ergibt: http://www.decisionmodels.com/calcsecretsh.htm

darüber hinausgehende, können Sie Application.Evaluate verwenden Ausdrücke mit (Skalar) Parameter zu bewerten, ohne Namen zu definieren, und immer noch, ohne die Formel tatsächlich zu analysieren, indem ein rudimentärer String-Ersatz durchgeführt wird. Es gibt mehrere Beispiele auf dem Netz, aber ein sehr gutes von Doug Jenkins ist hier: http://newtonexcelbach.wordpress.com/2008/04/22/evaluate-function/

Verwandte Themen