如何提高缓慢读取文件的VBAmacros

在最近的一个项目中,我需要从包含大约5K行的文件中读取。

每行都有不同的字段,我需要将其中的一些收集到Excel中的特定单元格中。 一行的例子:

DATA1; DATA2; DATA3; …..; dataN \ r

N可以达到600。

目前我正在打开文件,并通过每一行循环,分裂“;” 并保存。

我需要的是一个例子:

 avarSplit = Split(sBuf, ";") Range("C" & i).Value = CDbl(avarSplit(meter)) 

这往往是非常缓慢的,我已经有了,

Application.Calculation = xlCalculationManual

我build议让VBA打开文件作为分隔文本文件(相当于文件 – >打开,select,然后在打开的文本文件向导中select'分隔'和';')。 如果您需要了解如何在VBA中执行此操作,请logging一个macros,然后手动打开它。 然后,将临时工作簿中的拆分值复制到工作表中,就像以前一样。

5千行,即使有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