Search VBA:程序优化

Search VBA:程序优化,search,vba,timer,Search,Vba,Timer,所以这个问题分为两部分。首先是看看是否有一个快速简单的代码,我可以纳入到我目前的子检查有多快的子运行。我只需要精确到几秒钟,甚至几分钟 第二个问题是我目前正在尝试优化sub的运行时间。这是一个搜索功能,允许用户指定要搜索的变量,并在下面的工作表上显示结果。我已经上网了,我已经做了以下的一般应用程序来加速我的程序 在我的sub开始时禁用屏幕更新 尽可能避免复制并粘贴到剪贴板 但是,每次用户运行搜索时,我的程序仍然需要大约5到10秒的时间来运行。我想尽量减少这一时间 我意识到不看我的代码就很难给出具

所以这个问题分为两部分。首先是看看是否有一个快速简单的代码,我可以纳入到我目前的子检查有多快的子运行。我只需要精确到几秒钟,甚至几分钟

第二个问题是我目前正在尝试优化sub的运行时间。这是一个搜索功能,允许用户指定要搜索的变量,并在下面的工作表上显示结果。我已经上网了,我已经做了以下的一般应用程序来加速我的程序

  • 在我的sub开始时禁用屏幕更新
  • 尽可能避免复制并粘贴到剪贴板
  • 但是,每次用户运行搜索时,我的程序仍然需要大约5到10秒的时间来运行。我想尽量减少这一时间

    我意识到不看我的代码就很难给出具体的建议,但我目前只是在寻找一般性的建议。如果在实现了一般原则之后仍然很慢,我将在这里发布我的代码


    我的搜索程序是一个线性搜索程序,将值存储到数组中。我的搜索函数最多可以容纳4个搜索变量,我将每个搜索存储到一个数组中,最后将数组合并到最终结果数组中

    我通常使用GetTickCount API函数。只要你不打算测量数周或数月的时间,它就应该是准确的。下面是一个示例,它显示了正在计时的不同循环措施。1滴答=1毫秒

    Private Declare Function GetTickCount Lib "kernel32" () As Long 
    
    Sub test() 
    Dim nTime 
    
    nTime = GetTickCount 
    Set load_array = Range("a5:z65000") 
    array_index = WorksheetFunction.Match("Test 15", WorksheetFunction.Index(load_array, 0, 1), 0) 
    
    rngtimer = GetTickCount - nTime 
    
    
    nTime = GetTickCount 
    load_array = Range("a5:z65000").Value 
    array_index = WorksheetFunction.Match("Test 15", WorksheetFunction.Index(load_array, 0, 1), 0) 
    
    arraytimer = GetTickCount - nTime 
    
    
    nTime = GetTickCount 
    load_array = Range("a5:z65000").Value 
    For a = LBound(load_array) To UBound(load_array) 
    If load_array(a, 1) = "Test 15" Then 
    array_index = a 
    End If 
    Next 
    
    arraylooptimer = GetTickCount - nTime 
    
    nTime = GetTickCount 
    
    For a = 1 To 65000 
    If Range("a5").Offset(a, 0) = "Test 15" Then 
    array_index = a 
    End If 
    Next 
    
    excelooptimer = GetTickCount - nTime 
    
    MsgBox ("Range Search: " & rngtimer & vbCrLf & _ 
    "Array Search: " & arraytimer & vbCrLf & _ 
    "ArrayLoop Search: " & arraylooptimer & vbCrLf & _ 
    "ExcelLoop Search: " & excelooptimer) 
    End Sub 
    

    您的搜索是如何实现的?线性的二进制的是否使用缓存/查找表或其他优化?有时将数据写入excel隐藏工作表并使用通配符条件进行搜索会更快。我不使用查找表,也不确定缓存是什么意思。我是VBA的初学者,所以我仍在不断学习。你是在问如何预测运行时,还是如何测量它们?你说“潜艇要跑多快”。。。除了禁用屏幕更新,您还可以研究将计算从自动设置为手动(完成后别忘了将其设置回)。您说您只是在寻找一般性的建议,但通常情况下,最有效的优化可能取决于您的代码执行任务的方式,因此如果您可以添加一些细节,人们可能会有其他建议。