Search VBA:程序优化
所以这个问题分为两部分。首先是看看是否有一个快速简单的代码,我可以纳入到我目前的子检查有多快的子运行。我只需要精确到几秒钟,甚至几分钟 第二个问题是我目前正在尝试优化sub的运行时间。这是一个搜索功能,允许用户指定要搜索的变量,并在下面的工作表上显示结果。我已经上网了,我已经做了以下的一般应用程序来加速我的程序Search VBA:程序优化,search,vba,timer,Search,Vba,Timer,所以这个问题分为两部分。首先是看看是否有一个快速简单的代码,我可以纳入到我目前的子检查有多快的子运行。我只需要精确到几秒钟,甚至几分钟 第二个问题是我目前正在尝试优化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的初学者,所以我仍在不断学习。你是在问如何预测运行时,还是如何测量它们?你说“潜艇要跑多快”。。。除了禁用屏幕更新,您还可以研究将计算从自动设置为手动(完成后别忘了将其设置回)。您说您只是在寻找一般性的建议,但通常情况下,最有效的优化可能取决于您的代码执行任务的方式,因此如果您可以添加一些细节,人们可能会有其他建议。