0

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

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

数据1;数据2;数据3; ..... ;数据N\r

N可以大到600。

目前我正在打开文件并遍历每一行,用“;”分隔 和储蓄。

我需要的是一个例子:

avarSplit = Split(sBuf, ";")

Range("C" & i).Value = CDbl(avarSplit(meter))

这往往非常慢,我已经有了,

Application.Calculation = xlCalculationManual

4

2 回答 2

1

我建议让 VBA 将文件作为分隔文本文件打开(相当于 File->Open, select ,然后在打开文本文件向导中选择 'delimited' 和 ';')。如果您需要查看如何在 VBA 中执行此操作,请录制一个宏,然后手动打开它。然后,您将拆分值放在临时工作簿中,并可以像以前一样将它们复制到工作表中。

于 2013-02-27T18:07:17.603 回答
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
于 2013-02-27T19:41:35.910 回答