'H'栏是年份数据栏,'I'栏是月份数据栏,'D'栏是我们要计算10年期国债收益率的月度波动率。 这是这个问题的另一个改进的代码,请帮助我。 返回仍然是#NAME。 感谢@Comintern的回答。 根据@Comintern的build议,我修改了代码。 在名称pipe理器中,“年”是指年份(H3:H3696),“M”是指月份的列(I3:I3696),“C_10”是指中国10年的原始收益数据国债。 现在,我想要得到收益率的每月波动。 Function Volatility(n As Variant) As Variant 'this function uses to calculate volatility of a bond yield '"n" is the number of data/date we need to calculate 'please manage the data name in the name manager of formulas Dim i As Integer, dnum As Integer, mnum As Integer, vectornum […]
我注意到,我删除单元格时,我的UDF重新计算。 这会在删除整个列时造成大量延迟,因为UDF会针对所使用的每个单元格进行调用。因此,如果您使用的是1000个UDFS,那么删除列或单元格将调用它1000次。 举个例子,把下面的UDF放到一个模块中,然后用工作表调用一堆= HelloWorld() Function HelloWorld() HelloWorld = "HelloWorld" Debug.Print Now() End Function 然后删除一行。 如果你的经验和我的一样,你会看到每调用一次就会调用一次。 任何人有任何想法,这种行为是否可以停止? 我也有兴趣为什么它应该被调用。 看起来像Excel的依赖树中的一个缺陷给我,但可能有一个很好的理由。 编辑:经过实验,我发现了更多触发UDFS的操作: 对ListObject(即Excel表)跨越大小(但不包括行)的列数进行的任何更改。 即使UDF本身不在相关的ListObject中,或者实际上也不在任何 ListObject中。 在工作表中的任何位置添加新的单元格或列(但不包括行)。 请注意,手动计算模式不是几个方面的选项。 首先,鉴于这是一个应用程序级别的设置,它只是performance出太大的风险,即有人会使用任何一个电子表格的输出,而没有意识到他们处于手动计算模式。 其次,我实际上并没有devise特定的电子表格,而是写了一本关于非开发人员如何使用良好编写的现成代码(如UDF)来做本来不可能的事情的书。 例子包括dynamic连接或分割文本,或Charles Williams在https://fastexcel.wordpress.com/2011/07/22/developing-faster-lookups-part-2-how-to- build-a-faster-vba-lookup / (是的,我给了他们很多警告,通常一个基于本地公式的解决scheme将胜过UDF,但正如你从上面提到的线程中看到的那样,可以performance良好)。 我不知道用户如何使用这些。 在没有编程解决scheme的情况下,看起来我只需在本书中指出,如果用户使用资源密集型UDFS,添加或删除单元格或调整ListObjects的大小时,用户可能会遇到显着的延迟。 即使这些UDF被有效地写入。