0

最近のプロジェクトでは、約 5K 行を含むファイルから読み取る必要があります。

各行には異なるフィールドがあり、それらのいくつかを Excel の特定のセルに収集する必要があります。1 行の例:

データ1;データ2;データ3; ..... ;dataN\r

N600 まで大きくすることができます。

現在、ファイルを開いて各行をループし、「;」で分割しています。そして節約。

私が必要とするのは例です:

avarSplit = Split(sBuf, ";")

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

これは非常に遅くなる傾向があり、私はすでに持っています。

Application.Calculation = xlCalculationManual

4

2 に答える 2

1

ファイルを区切りテキスト ファイルとして開くように VBA に依頼することをお勧めします ([ファイル] -> [開く] を選択し、テキスト ファイルを開くウィザードで [区切り] と [;] を選択するのと同じです)。VBA でそれを行う方法を確認する必要がある場合は、マクロを記録してから手動で開きます。次に、一時的なワークブックに分割された値があり、以前と同じようにそれらをワークシートにコピーできます。

于 2013-02-27T18:07:17.603 に答える
1

5,000 行、600 列でもそれほど長くはかからないはずです。ホールドアップがセルに値を書き込んでいる可能性があります。2 次元の出力配列を入力し、値を一度にスプレッドシートに書き込む方がよいでしょう。これが例です。

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 に答える