在最近的一个项目中,我需要从包含大约5K行的文件中读取。
每一行都有不同的字段,我需要将其中的一些收集到excel中的特定单元格中。一行示例:
DATA1; DATA2; DATA3; .....; dataN \ r
N
可以大到600。
目前我打开文件并循环遍历每一行,按“;”拆分并保存。
我需要的是一个例子:
avarSplit = Split(sBuf, ";")
Range("C" & i).Value = CDbl(avarSplit(meter))
这往往非常慢,我已经有了,
Application.Calculation = xlCalculationManual
答案 0 :(得分:1)
我建议让VBA将文件打开为分隔文本文件(相当于File-> Open,select,然后在打开文本文件向导中选择'delimited'和';')。如果您需要在VBA中查看如何执行此操作,请记录宏,然后手动打开它。然后,您将拆分值放在临时工作簿中,并可以像以前一样将它们复制到工作表中。
答案 1 :(得分:1)
5k行,即使有600列,也不应该花那么长时间。保持可能是将值写入单元格。最好填充双暗输出数组,并将值一次性写入电子表格。这是一个例子。
Sub ReadTextFile()
Dim sFile As String
Dim lFile As Long
Dim vaLines As Variant, vaSplit As Variant
Dim aOutput() As String
Dim i As Long
Dim sInput As String
sFile = MyDocs & "Book4.csv"
lFile = FreeFile
'Read in data
Open sFile For Input As lFile
sInput = Input$(LOF(lFile), lFile)
'Split on new line
vaLines = Split(sInput, vbNewLine)
'Set up output array - split is zero based
'but you want 1-based to write to cells
ReDim aOutput(1 To UBound(vaLines, 1) + 1, 1 To 1)
'loop through lines
For i = LBound(vaLines) To UBound(vaLines)
If Len(vaLines(i)) > 0 Then
'split on delimiter
vaSplit = Split(vaLines(i), ";")
'store want you want in the output array
aOutput(i + 1, 1) = vaSplit(15)
End If
Next i
'write the output array to a range
Sheet1.Range("A2").Resize(UBound(aOutput, 1), UBound(aOutput, 2)).Value = aOutput
End Sub