excel与相对单元格的返回公式

我在我的Excel中有两个工作表,第一个工作表允许我从下拉列表中select一个计算方法,并input计算的variables(以绿色单元格显示,蓝色列显示一些常数)。 结果项将从我的第二个工作表(数据库)中search相应的计算公式,然后将公式粘贴到工作表1中,我需要公式来使用工作表1中的单元格而不是数据库中的单元格进行计算。

在这里输入图像说明在这里输入图像说明

目前我创build了一个名为Eval的用户定义函数,如下所示:

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

通过将Eval与vlookup :=Eval(VLOOKUP(A3,Database!A2:E10,5,FALSE))我会得到计算公式使用我的数据库中的单元格的结果,我怎样才能达到公式在计算过程中将单元格放在表单1中

一个简单的方法是使用一个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()公式的表)被用作main-ref。

编辑
请记住,您的“行”在公式中是静态的。 去“计算4”将使用第5行(而不是从第一张你的公式的行)。 为此,您可以使用如下所示的内容:

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

尽pipe所有的行号都应该改成## (或者你喜欢的任何唯一的标识符)。 然后“计算1”将看起来像: =B##*C##*D##

如果你还有任何问题,只要问:)