【问题标题】:How to measure Excel Calculation times如何测量 Excel 计算时间
【发布时间】:2013-02-21 11:58:09
【问题描述】:

例如,我怎样才能找到更快的公式?

=SUMPRODUCT((Data!D:D="RC Corp")*(Data!AD:AD="Expected Allowances / Provisions"))

对比

=COUNTIFS(Data!D:D,"RC Corp",Data!AD:AD,"Expected Allowances / Provisions")

Vs 将 2 个字段连接到一个新列中并做

 Z1 = D1&AD1
=Countif(Data!Z:Z,"RC CorpExpected Allowances / Provisions")

Vs VBA

Dim i as integer
Dim Total as integer
Total = 0 
i=0
While i < 1000 
    IF Range("D"&i).Value = "RC Corp" AND Range("AD"&i).Value = "Expected Allowances / Provisions" Then
Total = Total + 1
End If 
Wend
Range("$A$1").Value = Total

【问题讨论】:

  • 我会做以下事情:使用here 和here 描述的方法来提高性能。测试公式性能:通过定时关闭自动重新计算、将字符串(或其他常量到单元格中,然后重新打开重新计算)的重复周期设置基准;对您的公式执行相同操作,即关闭重新计算、编写公式到单元格,并重新计算单元格或工作表。我自己没有尝试过,所以把它作为评论。

标签: performance excel excel-formula processing-efficiency array-formulas


【解决方案1】:

从 evocandy 的回答中醒来,我想出了这个基本代码。

time1 = Timer
Range("A1").Calculate ' Or the cell containing the Formula I want. OR use Sheets("Sheet1").Calculate for the calculation including concated columns
time2 = Timer

CalculationTime = Time2-Time1

为了使其工作,我必须将示例数据隔离到新的空工作表并禁用 Excel 中的自动刷新,以确保它不会为任何其他计算计时。

【讨论】:

    【解决方案2】:

    在 VBA 中,您可以使用 Timer。

    放

    time1 = Timer
    'Your code
    time2 = timer
    
    totaltime = time2-time1
    

    【讨论】:

    • 我了解如何为 VBA 代码执行此操作,但我将如何衡量在 VBA 之外的论坛中完成的计算?
    • Here 是另一个衡量公式性能的资源,来自一个很棒的网站,使用各种高级 Excel 技术。
    • chuff 你的两个链接似乎都严格用于 VBA
    • @user2140261 如果没有 VBA,您可以使用相同的公式填充大量单元格,并使用秒表计算计算时间。通常,如果不是数百万,您至少需要数万到数十万个细胞。
    猜你喜欢
    • 2013-07-12
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 2015-03-26
    • 2017-01-25
    • 2014-03-04
    • 1970-01-01
    • 2018-08-16
    相关资源
    最近更新 更多