2016-08-15 51 views
0

我在我的Excel中有2個工作表,第一個表格允許我從下拉列表中選擇一個計算方法並輸入變量進行計算(以綠色單元格顯示,藍色列顯示一些常數)。結果條目將從我的第二個工作表(數據庫)中搜索相應的計算公式,然後將公式粘貼到工作表1中,我需要公式來使用工作表1中的單元格而不是數據庫中的單元格進行計算。通過評估和演示用VLOOKUP :=Eval(VLOOKUP(A3,Database!A2:E10,5,FALSE))組合我將得到的結果的計算式採用細胞從excel返回公式與相對單元格

Function Eval(ref As String) 
    Eval = Application.Evaluate(ref) 
End Function 

enter image description here enter image description here

目前我創建稱爲評估和演示的用戶定義的函數,如下我的數據庫,如何在計算過程中如何實現公式在表單1中獲取單元格的結果?

回答

2

一個簡單的方法是使用一個CHOOSE這樣內所有的公式:

=IFERROR(CHOOSE(SUMPRODUCT(MATCH(A2,"Calculation "&ROW($1:$9),0)),B2*C2*D2,B2*C2-D2,B2+C2-D2,B2^2-C2+D2,B2*D2-C2^2,B2+C2*D2,B2*C2-C2*D2,B2-D2-C2*D2,C2-D2*B2),"") 

另一個辦法是使用Application.Caller,如:

Public Function eval(ref As String) 
    eval = Application.Caller.Parent.Evaluate(ref) 
End Function 

這確保了使用調用者的父母(具有公式eval()的表格)作爲主參考。

編輯
請記住,你的「行」是在公式靜態的。去「計算4」將使用第5行(而不是第一張表格中的公式行)。雖然所有的行號應改爲##(或任何唯一的標識符你喜歡)

=Eval(SUBSTITUTE(VLOOKUP(A3,Database!A2:E10,5,FALSE),"##",ROW())) 

:爲此,您可以使用類似。那麼,「運算1」看起來像:=B##*C##*D##

如果您還有任何問題,只是問:)

+0

嗨德克,非常感謝你,我張貼的問題只是一個簡化版本。在這種情況下,我可能會考慮超過50個方程式,因此選擇公式會很長。但在第二種情況下,由於某種原因,如果我將UDF直接複製到模塊中,它將與我以前的Eval函數一樣。你能否爲我提供一些有關該UDF的額外幫助? –

+0

@LiuRoye'Evaluate'函數是從表單執行的,而不是從應用程序執行的。如果像'Sheets(「Sheet1」)。評估(...)'那麼它總是使用「Sheet1」。如果直接用作'Application.Evaluate(...)',那麼它將使用'ActiveSheet'。如果使用幾張紙,Application.Evaluate(...)'可能會失敗。在Sheet2 A1'A2'和A2中進行。在Sheet1中,A2放入'1'。現在在Sheet1中使用'Sheet2!A1',它將顯示'1'。但是如果你轉到sheet2並重新進入'A1'然後回到sheet1,那麼你的公式將會顯示'2'(我的代碼應該仍然顯示1) –

+0

@LiuRoye避免所有問題的最好方法是使用像「Sheet1!B2 * Sheet1!C2 * Sheet1!D2」這樣的全參考。這樣它就應該按照你想要的方式做,不管是什麼;) –

相關問題