2010-11-28 10 views
1

関数を作成、この値:他の細胞においてエクセル:細胞を解析し、例えば、私は、いくつかの細胞を有する

5 * A-2 * B-4 * C

私はA、B、Cの値を入れます。値を数えるセルを追加したいと思います。したがって、例として、Aの値が2、Bの値が3、Cの値が1であると書かれているセルがある場合は、計算して値0を入れるセルを追加したいと思います。 5 * 2-2 * 3-4 * 1の結果)。可能な変数はA、B、およびCですが、すべてのセルに含まれる必要はありません(たとえば、一部のセルはわずか5 * A-3 * C)。

これは可能ですか?誰もその関数を書く方法を知っていますか?

P.S.何百ものセルがあるので、別のセルで手作業で値を分割することはできません。

ありがとうございました。

+0

あなただけのセルに合計を置くことができ、 '= 5 * A-2 * B-4 * C'のようになります。 –

答えて

0

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 

例えばもしあなた発現はA2であり、A、B、Cの値はC2である:E2

=ev(A2,C2,D2,E2) 

戻る計算値

任意の数の変数を許可するには、変数値の代わりにA、B、Cの代わりにParamArrayを使用します。

Aもう少し完全版:

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 

は使用方法:

上記と同じデータプラスC1内の変数名:E1

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

Saladin Akaraからのコメントは、あなたの最も簡単な解決方法を示しています。 A、B、およびCの名前付き数式を定義します(Excelのヘルプトピック「名前の操作」を参照)。他のセルには、これらの名前付き値を使用する数式を含めることができます。

セルで数式を実際に表示して編集し、別のセルで数式の値を計算するなど、十分でない場合は、Excelの組み込みエバリュエーターを解析せずに使用できますあなた自身の式。これを行う最も簡単な方法は、ApplicationオブジェクトのEvaluateメソッドを使用する方法です。 (ここでも、ヘルプを参照してください)チャールズ・ウィリアムズはここにExcelの式を評価し、彼のウェブサイト上のコード例があります。それにとどまらずhttp://www.decisionmodels.com/calcsecretsh.htm

を、あなたは任意の名前を定義せずに(スカラ)パラメータを使用して式を評価するためにApplication.Evaluateを使用することができ、かつ基本的な文字列の置換を行うことで、実際に式を解析することなく、そこウェブ上のいくつかの例がありますが、ダグ・ジェンキンスから非常に良いものはここにある:http://newtonexcelbach.wordpress.com/2008/04/22/evaluate-function/これは、VBA関数EVALUTE

簡単な例で行うことができます

関連する問題