我有两个excel文件。VBA Excel大数据处理永远需要
第一个excel文件包含Person Name和Total Days Present列 Ex。
PersonName TotalDays
xyz
abcd
另一个excel文件包含人名,日期和状态(存在/不存在)。
PersonName Date Status
xyz 1/1/2011 Present
xyz 1/1/2011 Present
我需要将相似的日期状态分组为一个,并计数它们以在第一个excel文件中更新。
我在第一个文件中有大约100行,其中第二个文件需要检查20000行。所以为了让它更快,我将第二个文件中的所有行加载到数组中,并读取它们以计算每个正确工作的条目。
问题是,它需要大量的内存,所以在Windows中这么多应用程序会自动打开并且系统几乎挂起。
是否有任何替代方案来实现这个没有内存问题和快速处理。我遇到了Scripting.Dictionary,但不确定它是否会占用较少的内存。
编辑 我尝试使用redim保留和20,000个大小的静态数组,在这两种情况下都会发生同样的问题。
EDIT
lblStatus.Caption = "Loading to memory"
Dim ArrAuditData() As AData
Dim TotalLookUpCount As Integer
For J = 1 To 50000
If lookUpRange.Cells(J, cmbChoice.ListIndex) = "Fail" Then
ReDim Preserve ArrAuditData(J) As AData
ArrAuditData(TotalLookUpCount).AuditType = lookUpRange.Cells(J, cmdAudit2.ListIndex)
ArrAuditData(TotalLookUpCount).TransTime = lookUpRange.Cells(J, cmbChoice.ListIndex - 1)
ArrAuditData(TotalLookUpCount).AuditValue = lookUpRange.Cells(J, cmbChoice.ListIndex)
ArrAuditData(TotalLookUpCount).Slno = lookUpRange.Cells(J, 0)
TotalLookUpCount = TotalLookUpCount + 1
ElseIf lookUpRange.Cells(J, cmbChoice.ListIndex) = "" And J > 4 Then Exit For
End If
DoEvents
Next
你可以在你认为问题发生的地方粘贴一段代码吗?仅凭描述就很难弄清楚你所做的事情。 – jonsca 2011-05-26 05:43:36
另外,你有'Application.ScreenUpdating = False'?这应该可以为您节省一些计算负担。 – jonsca 2011-05-26 05:45:20
@jonsca:真的?屏幕上没有任何内容正在改变。在这种情况下'.ScreenUpdating = False'仍然可以节省计算负担吗? – 2011-05-26 13:26:49