从主表抓取一个公式

我正在制作一个电子表格,里面有很多类似的工作表和很多公式。

我需要的是一个单元格从“主”表中获取一个公式,并在其自己的工作表中进行计算。

所以如果我在母表中更改公式,它会在公式已经使用的所有400个位置上发生变化。

例如:在主表格中,单元格C1的公式=A1+B1在表格“January”中,我将数据放入A1和B1中,然后从主表单元格C1中取出公式并计算。 在“二月”表中也是如此。 你明白了。

OOPS,这是错误的! 公式应该是=A1-B1 。 (当时,是什么错误)我现在改变母表中的公式,单元格C1,修正反映在1月份2月 ……

这可能吗? (没有VBA,macros等)

怎么样?

编辑:漫长的故事:谢谢你的帮助JNevill,但我认为这个UDF必须改变。 有些奇怪的错误,我想我已经find了问题。 对于那些在讨论中无法find正面或反面的人来说,这里有一个回顾。 我有6张。 其中4本是原版手册,2本是testing手册。 我已经删除了4张表中的所有“评估”和表格间参考。 现在工作表1“公式”包含要使用的公式的shitload。 工作表2包含了一堆要使用的费率。 第3页和第4页是“2014年4月”和“2014年5月”现在在表中有公式,未被引用。 这4张表中没有提到任何表格。

然后,我有“母亲”表,单元格C1中只有'= A1 + B1','B1'中有2个A1,B1中有3个,C1中的= Eval(Mother!C1)。 如果我站在“一月”和“现在计算”(工作簿),C1的结果是5.如果我站在“母亲”,计算工作簿,“一月”C3的结果变为0,(记住“母亲”A1和B1是空的)如果我去“2014年4月”或“2014年5月”并点击计算,结果在“1月”C1变为2014年(在这两张A1是2014和B1是空的)如果我去“公式“或”费率“计算,”一月“C1的结果变为!VALUE。 (在这两张表A1是一些文字,而B1是空的)

如果我转到“一月”,同样的事情发生,计算(结果是5)转到“母亲”保存closures,电子表格在“母亲”打开,结果为0。

因此:“一月”C1中的“Eval”公式是在我刚才站在的表中引用A1和B1,而不是“January”A1和B1

这是不可取的行为。 🙂

(难怪,我很困惑)

这使用一些VBA,但没有什么重大的…我保证。 就像……认真地说,这是一个包含两行代码的单个UDF。

你可以使用这个名为“Eval”的自定义UDF ,它应该被微软真正的烘焙成一个真正的公式,但是…也许在Excel 2040中。

无论如何…这可以让你把一个string变成一个真正的生活公式。 从第一个答案抓住那个函数,并将其粘贴到一个新的VBA模块中。

在你的“母亲”表中,单元格C1在那里粘贴'=A1+B1 (注意公式之前的单引号…你希望这是一个string)

现在在你的一个内置的表单中使用公式:

 '=Eval(Mother!C1)' 

现在这个东西会从Mother!C1获取单元格的值,这是我们公式的文本/string值。 这个公式将在我们的VBA中被Eval()函数处理,它将…评估这个事物,就像它是一个公式一样,吐出A1+B1在工作表上的任何东西。

更新

因此,看起来eval() UDF有一些问题,其中如果工作簿在不同的选项卡上计算,而eval()函数存在于eval()函数上,则eval()函数将使用活动工作表的值进行计算。 哪个不好。

这里有一个方法,它使事情变得更加复杂一点,但我认为它不在合理范围之内,而且不再增加VBA,这是对这个问题的一个补充。

Mother!C1单元格中,将公式更改为'='sheet'!A1+'sheet'!B1 ; 记住公式开头的多余的单引号,所以它被当作一个string。 这可能看起来很奇怪,因为您没有一个名为sheet的选项卡,但是我们将把sheet作为一个令牌在其他工作表中replace。

在其他工作表中,在C1input公式: =Eval(SUBSTITUTE(Mother!C1,"sheet",CELL("filename",A1)))您会注意到这样会变得相当复杂一些, ( CELL("Filename",A1)实际上带来了工作簿的完整文件path以及工作表/选项卡名称,但是对于此工作正常) 。 因此,传递给Eval()的公式将如下所示='C:\Your\File\Path\[Workbook name.xlsm]Sheet2!A1 + C:\Your\File\Path\[Workbook name.xlsm]Sheet2!B1' ,这是相当详细的,但Excel不关心,它会很快处理。

现在你会发现,因为Eval()正在计算一个公式,该公式将工作表名称作为单元格参考的一部分,用于传递Eval()请求的任何表,该公式将返回预期的结果。


如果我必须为自己的工作簿做这个,我可能会更多地依靠VBA。 我会在Mother上做一个Worksheet_Change()事件,然后触发工作簿中所有其他选项卡上公式的更新。 如果你对VBA不熟悉,或者不得不编写它并且debugging它的想法是压倒性的,我认为Eval() UDF仍然是一条非常稳固的路线。