【发布时间】:2017-07-10 10:53:11
【问题描述】:
我必须遍历大循环并使用 Case Select 结构。我首先遍历请求的参数(通常大约 10 个),然后对于每个匹配项,我遍历文件列表(大约 10k)。该代码具有以下结构,但包含更多案例。
For i = 1 To dNumColumns Step 1
Debug.Print(CStr(Now() & " Column: " & UCase(vInHeaders(1,i))))
Select Case UCase(Cols(1,i))
Case "NAME":
row = 1
For Each t In vT
vTestsValues(row, i) = t.Name : row += 1
Next
Case "DATE":
row = 1
For Each t In vT
vTestsValues(row, i) = t.Date : row += 1
Next
Case "PATH":
row = 1
For Each t In vT
vTestsValues(row, i) = t.Path : row += 1
Next
Case "RIGHTS":
row = 1
For Each t In vT
vTestsValues(row, i) = t.Rights : row += 1
Next
Case "AUTHOR":
row = 1
For Each t In vT
vTestsValues(row, i) = t.Author : row += 1
Next
Case "TYPE":
row = 1
For Each t In vT
vTestsValues(row, i) = t.Type : row += 1
Next
Case "VERSION":
row = 1
For Each t In vT
vTestsValues(row, i) = t.Version : row += 1
Next
Case Else
row = 1
For Each t In vT
vTestsValues(row, i) = "ERR"
row += 1
Next
End Select
dNumColumns is a Variant Array, containing Strings;
vT is a Variant Array containing a Document Object
将这些结果添加到 vTestsValues 的最有效方法是什么?已经尝试使用“For Each t In vT”(通常有 10k 个项目)并在其中嵌套“For i = 1 To dNumColumns”循环以选择案例并获得稍慢的性能。任何提示表示赞赏。
【问题讨论】:
-
数据排序了吗?因为如果是这样,您可以进行二分搜索。
-
不知道每个变量的声明和内容很难说。对于 10000 行和 10 列,它应该在不到 100 毫秒内执行。确保所有值都加载到数组中,并使用
For To而不是For Each in循环遍历行。 -
Debug.Print会减慢速度...
标签: vba loops for-loop select optimization