excel - 对于非常大的数组,循环遍历数组会减慢速度。我该怎么做才能加快速度?
问题描述
我有一个宏,它通过循环一个有时可以包含 30,000 行的二维数组来创建一个很长的字符串。可能需要半小时或更长时间。有没有办法加快这个速度。它将电子表格拉入一个数组,然后使用该信息创建另一个数组。这部分没有任何问题。
当循环通过第二个数组时,它会减慢速度,该数组会创建一个非常长的字符串,用于创建文本文件。
Agingarray = XLSbk.Sheets("Aging_Report").Range("A4").CurrentRegion
ReDim FirstArray(1 To UBound(Agingarray) * UBound(Agingarray, 2) * 31, 1 To 8)
i = 1
For x = 2 To UBound(Agingarray)
For y = 4 To LastCol
If Agingarray(x, y) > 50 Then
If Trim(Agingarray(x, 2)) = "" Then Exit For
MI = ""
If InStr(1, Agingarray(x, 2), ",") > 0 Then
Namestr = Split(Agingarray(x, 2), ",")
LastName = Trim(Namestr(0))
Fname = Split(Trim(Namestr(1)), " ")
If Trim(Namestr(1)) <> "" Then
NameFirst = Trim(Fname(0))
If UBound(Fname) = 1 Then
MI = Trim(Fname(1))
End If
Else
NameFirst = ""
End If
Else
LastName = Trim(Agingarray(x, 2))
NameFirst = ""
End If
Monthend = Application.WorksheetFunction.EoMonth(Agingarray(1, y), 0)
For j = Agingarray(1, y) To Monthend
FirstArray(i, 1) = LastName
FirstArray(i, 2) = NameFirst
FirstArray(i, 3) = MI
FirstArray(i, 4) = Agingarray(x, LastCol + 6)
FirstArray(i, 5) = Format(Agingarray(x, LastCol + 8), "000000000")
FirstArray(i, 6) = Agingarray(x, LastCol + 9)
FirstArray(i, 7) = Agingarray(x, LastCol + 10)
FirstArray(i, 8) = j
i = i + 1
Next j
End If
Next y
Next x
这是代码变慢的部分。
For x = LBound(FirstArray) To UBound(FirstArray)
If FirstArray(x, 1) = "" Then Exit For
Body = Body & "HL*" & h & "*1*21*1~" & PrvLine & "HL*" & i & "*" & j & "*22*0~" & _
"TRN*1*" & Format(Now, "hhmmss") & k & "*" & 9100000000# + k & "*00309417~" & _
"NM1*IL*1*" & FirstArray(x, 1) & "*" & FirstArray(x, 2) & "*" & FirstArray(x, 3) & "***"
If Trim(FirstArray(x, 4)) <> "" Then
Body = Body & "MI*" & Trim(FirstArray(x, 4)) & "~"
LineCount = LineCount + 8
Else
Body = Body & "*~REF*SY*" & Trim(Format(FirstArray(x, 5), "000000000")) & "~"
LineCount = LineCount + 9
End If
Body = Body & "DMG*D8*" & Trim(Format(FirstArray(x, 6), "yyyymmdd")) & "*" & Trim(FirstArray(x, 7)) & "~" & _
"DTP*291*D8*" & Format(FirstArray(x, 8), "yyyymmdd") & "~" & _
"EQ*30~"
h = h + 2
i = i + 2
j = j + 2
k = k + 1
Next x
解决方案
推荐阅读
- magento - 在 magento 1.9 中更改国家/地区时未显示运费
- python - 如何使用 ansible 正确升级 pip?
- java - 如何处理 RecyclerView 中的点击事件
- android - 有什么方法可以检查 WorkManager 是否正常工作?
- android - 如何在服务的主要活动中使用相同的对象
- c# - 如何将临时变量声明为 C# 表达式?
- java - 是否可以抑制 bean 注入?
- magento2 - 如何在我的自定义小部件中呈现产品列表
- c# - 获取名称包含某些字符串的 Json 属性
- javascript - 为什么 JavaScript 添加的按钮没有默认间距?