我正在构建一个包含大量类似工作表的电子表格, 还有很多公式。
我需要的是1个单元格从“主”表格中获取公式,并在其自己的表格中计算。
因此,如果我更改主表单中的公式,它会在使用公式的所有400个位置发生变化。
实施例
在主表中,单元格C1具有公式=A1+B1
在工作表“January”中,我在A1和B1中输入了数据
C1然后从主表单,单元格C1中获取公式并计算。
在表格“二月”中也会发生同样的情况。
你明白了。
OOPS,这是错误的!
该公式应为=A1-B1
。 (当,这是一个错误)
我现在更改主表单中的公式,单元格C1,并在 1月, 2月中对镜像进行镜像,......
这可能吗? (没有VBA,宏等)
如何?
编辑: 长篇故事: 感谢你对JNevill的所有帮助,但我认为这个UDF必须改变。 有些奇怪的错误,我想我已经找到了问题。 对于那些在讨论中找不到头脑或尾巴的人来说,这是一个回顾。 我有6张。其中4个是原始工作簿,2个用于测试。 我已经删除了4张中的所有“Eval”和页间参考。 现在,第1页“公式”包含要使用的公式。 表2包含一堆使用的费率。 表3和表4是“2014年4月”,“2014年5月”现在在表格中有公式,没有参考。 这4张纸中没有任何纸张参考。
然后我有“母亲”表,单元格C1中只有'= A1 + B1,A1中有2表示“1月”,B1中有3表,C1中有= Eval(母亲!C1)。 如果我站在“1月”和“立即计算”(工作簿),则C1中的结果为5。 如果我站在“母亲”并计算工作簿,“1月”C3中的结果将变为0,(记住“母亲”A1和B1为空) 如果我转到“2014年4月”或“2014年5月”并点击计算,则“1月”C1的结果将更改为2014年(两张表格A1均为2014年,B1为空) 如果我选择“公式”或“费率”并计算,“1月”C1中的结果将变为!VALUE。 (在两张纸A1中都是一些文字,而B1是空的)
如果我转到“1月”,计算(结果是5)goto“母亲”保存并关闭,电子表格在“母亲”打开,结果为0,也会发生同样的事情。
所以: “1月”C1中的“Eval”公式引用了我恰好站在的表格中的A1和B1,而不是“1月”A1和B1
这不是理想的行为。 :)
(难怪,我很困惑)
答案 0 :(得分:1)
这使用了一些VBA,但没什么大不了......我保证。就像......认真一样,它是一个包含2行代码的单一UDF。
你可以使用this custom UDF called "Eval",它应该被微软真正的公式所覆盖,但是......可能在Excel 2040中。
无论如何......这可以让你把一个字符串变成一个真实的公式。从第一个答案中获取该功能并将其粘贴到新的VBA模块中。
在你的母亲"表格,单元格C1
粘贴'=A1+B1
在那里(请注意公式前的单引号...您希望这是一个字符串)
现在,您可以使用以下公式之一使用公式:
'=Eval(Mother!C1)'
现在该东西将从Mother!C1
获取单元格值,这是我们的公式的文本/字符串值。该公式将由我们在VBA中的Eval()函数处理,它将...评估该事物,就好像它是一个公式,吐出该工作表上的A1+B1
。
所以看起来eval()
UDF有一些问题,如果工作簿在另一个选项卡上计算,那么eval()
函数存在的那个,eval()
函数将使用活动工作表的值进行计算。这很糟糕。
这就是解决这个问题的方法,它让事情变得更加复杂,但我并不认为它超出了合理范围......而且它并没有...再加上VBA,这是这个问题的一个加分。
在Mother!C1
单元格中,将公式更改为'='sheet'!A1+'sheet'!B1
;记住公式开头的额外单引号,因此将其视为字符串。这可能看起来很奇怪,因为您没有名为sheet
的标签,但我们会将sheet
视为要在其他工作表中替换的标记。
在其他工作表中,在C1
中输入公式:=Eval(SUBSTITUTE(Mother!C1,"sheet",CELL("filename",A1)))
您会注意到这一点要复杂得多,但我们在这里所做的只是替换令牌{{1来自sheet
的工作表名称(Mother!C1
实际上带来了工作簿的完整文件路径以及工作表/选项卡名称,但它可以正常工作)。所以现在传递给CELL("Filename",A1)
的公式看起来像Eval()
,这非常详细,但excel并不关心,它会很快处理它。
您现在可以找到,因为='C:\Your\File\Path\[Workbook name.xlsm]Sheet2!A1 + C:\Your\File\Path\[Workbook name.xlsm]Sheet2!B1'
正在评估一个公式,该公式将工作表名称作为传递Eval()
请求的任何工作表的单元格引用的一部分,该公式将返回预期的结果。
如果我必须为自己的工作簿做这个,我可能会更多地依赖VBA。我会在Eval()
上执行Worksheet_Change()
事件,然后触发更新工作簿中所有其他选项卡上的公式。如果您不熟悉VBA,或者想要编写并调试它是压倒性的,我认为Mother
UDF仍然是一条非常可靠的路径。