我将有关每日货币汇率的信息从外部网站导入到 Excel 中。
我每天都会在某些公式中使用汇率。问题是,第二天汇率发生变化时,所有公式都会改变,而我希望它们只针对与当前日期相关的行中的公式进行更改。对于昨天,我想保留昨天的汇率。
如果满足条件,是否有办法阻止公式更新?本例中的条件是公式所涉及的日期小于 TODAY()。
答案1
是的,您无需 VBA 甚至无需采取极端措施即可实现此结果。
然而,不是你想象的那样。我确信你的想法就是这样的,而且你并不拘泥于任何特定的步骤或条件。所以...
一种方法是添加(或利用(如果已有))一列数据,其中包含获取数据的日期。一旦您有了这个,您可以做两件事中的一件,甚至更多,尽管我将重点介绍这两件事。
一个是使用汇率值单元格的简单IF()
公式。例如,如果日期列为 A 列,计算列为 B 列,每日变化汇率为单元格 $M$1,则公式可能如下所示:
=IF(A1<TODAY(),B1,IF(A1>TODAY(),"",2000*$M$1))
在 A 列中的日期,工作公式会计算。在随后的几天,它不会计算。随着与今天匹配的日期在列中越来越靠后,没有显示任何内容的新单元格 ( ""
) 将正确计算,然后加入它们上方不会随着日期的推移而重新计算的其他单元格。
但是,如果您通过 等方式进入单元格,然后F2-Edit
按 Enter 强制该单元格重新计算,该单元格将重新计算并失败,结果为“0”,如果由于循环引用而无法计算公式,Excel 就会得出这个结果。如果您不小心这样做了,UNDO
( Ctrl-Z
) 将让您恢复正常。如果在按 Enter 之前注意到这一点,只需按 ESC 即可保留所有内容。格式更改不会引起问题。
所以,只要小心一点,它就有可能奏效。谁想要那样呢?好吧,没有更好方法的人。
第二种方法更好。如果创建一个表格,将每日日期放在第 1 列,将每个日期的汇率放在第 2 列,这样会更容易操作和管理。因此,随着新汇率的增加,表格会每天扩大。或者,也可以将许多未来日期放在第 1 列,只需每天添加新汇率即可。
然后,公式会在第 1 列中查找您选择的今天的日期 ( TODAY()
),在第 2 列中找到当前汇率。
易于移植,放置在某个隐藏的辅助页面上。这样您的公式就不需要奇怪的技巧了。他们可以引用日期列日期进行查找,并始终找到该日期的汇率,即使是几年后。不用担心与循环交互。
这种技术对于表格也很方便。表格的一个优点是随着每行的添加,公式会向下填充。然而,表格的一个弱点是随着每行的添加,公式会向下填充……
如果您需要更改公式,在当前行中保留其旧形式,但在添加数据行时向下使用新形式,那么您会遇到问题。表格无法做到这一点。更改您想要的所有公式,但新公式仍会使用旧公式。
是的,从技术上讲,这种更改是可以实现的,但上述所有方法都无法正常工作。例如,据说如果连续更改四行,那么它就会变成新公式。根据我的经验,我从未见过更改少于六行的公式,通常需要更改 10-30 行,Excel 才会放弃并使用新公式。这些都可以做到,但是……不,实际上它根本行不通。另一种方法是更改为范围,然后再改回表格。这会产生问题,尽管这些问题大多很小,但它将公式的第一行作为主公式,而新公式不太可能是主公式,因此……
但是,许多公式可以编写为允许在表格之外更改其工作方式。例如,您的汇率。在表格中,只有对某个值的引用,可能是命名范围,也可能是公式块。该命名范围或块可以引用保存变化汇率的数据范围(或表格)。因此,可以使用新汇率而无需更改使用它的表格公式。无需更改表格公式。需要记住的事情。
但它也显示了如何频繁地设置一个人的数据,特别是改变数据和添加数据,以预测这些事情可以使各个位易于更改和使用。