我必须将多个文本文件导入excel并将每个文本文件添加到新表中。某些文件上的行数超过350,000。循环要花很长时间,以至于它不是真正的用户友好。我试图用它来快速读取数据
Dim arrLines() As String
Dim lineValue As String
lineValue = ts.ReadAll
DoEvents
arrLines() = Split(lineValue, vbCrLf)
Dim Destination As Range
Set Destination = Worksheets(WorksheetName).Range("A2")
Set Destination = Destination.Resize(UBound(arrLines), 1)
Destination.Value = Application.Transpose(arrLines)
但这导致行41243之后的每个值仅具有“#N / A”值。我当时正在考虑使用Application.Index将数组拆分为较小的数组,但是您需要为index函数提供一个要组成新数组的行数组,这将意味着创建一个循环以遍历整个数组。数字1-41000,然后是41001-82000,依此类推。在这一点上,我正在做一个循环来创建数组,这并不是真的快。同样,逐行循环文件也太慢。在如此众多的行中进行读取而又不会导致缺少值的好方法是什么?
Mathieu Guindon正是我所希望的解决方案。消除移调已解决了#N / A值的问题。谢谢!
编辑:
该代码只是将数组中的数据第二次循环到二维数组中,然后将其发布到该范围内而没有转置效果。它比以前的方法要慢一些(大约需要两分钟或更长的时间),但是仍然相当快,并且可以产生我想要的结果。代码如下:
lineValue = ts.ReadAll
DoEvents
arrLines() = Split(lineValue, vbCrLf)
Dim arrBetween() As Variant
ReDim arrBetween(UBound(arrLines), 0)
LoopLength = UBound(arrLines) - 1
For i = 0 To LoopLength
arrBetween(i, 0) = arrLines(i)
DoEvents
If i Mod 2500 = 0 Or i = LoopLength Then
Application.StatusBar = "Importing " & WorksheetName & " " & (i) & " ."
End If
Next i
Dim Destination As Range
Set Destination = Worksheets(WorksheetName).Range("A2:A" & UBound(arrLines))
Destination.Value = arrBetween
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句