0

区切りテキスト ファイルから Excel シートにデータを挿入する必要があるジョブに取り組んでいます。コードは準備ができて機能していますが、セルごとにデータを挿入するため、プロセスが非常に遅くなります。一度に範囲全体にデータを挿入する方法を提案してください。これにより、操作が高速になります。

以下のコードスニペットを見つけてください。

    Open FName For Input Access Read As #1

While Not EOF(1)
    Line Input #1, WholeLine
    If Right(WholeLine, 1) <> Sep Then
        WholeLine = WholeLine & Sep
    End If
    ColNdx = SaveColNdx
    Pos = 1
    NextPos = InStr(Pos, WholeLine, Sep)
    While NextPos >= 1
        TempVal = Mid(WholeLine, Pos, NextPos - Pos)
        Cells(RowNdx, ColNdx).Value = TempVal
        Pos = NextPos + 1
        ColNdx = ColNdx + 1
        NextPos = InStr(Pos, WholeLine, Sep)
    Wend
    RowNdx = RowNdx + 1
Wend
4

3 に答える 3

1

Excelでそのままcsvファイル(またはバリアント)を開くことができないのはなぜですか

以下のコードは、各行をバリアント配列としてインポートしてから、行ごとにExcelにダンプします。Excelにデータを入力する前に、さらに一歩進んで各行配列を単一の結合配列にダンプする必要がありましたが、単一の全体的な入力を無視している理由がわからないため、この方法を使用しました

また、これらの行は、右端のセルに空白の「レコード」を追加するだけなので、冗長だと思います。

 If Right(WholeLine, 1) <> Sep Then    
 WholeLine = WholeLine & Sep   
 End If

メインコード

Sub Test()

Dim fName As String
Dim Sep As String
Dim WholeLine As String
Dim lngCnt As Long
Dim aRRSplit()

fName = "c:\test.csv"
Sep = ","

Open fName For Input Access Read As #1

While Not EOF(1)
    Line Input #1, WholeLine
    If Right$(WholeLine, 1) <> Sep Then
        WholeLine = WholeLine & Sep
    End If
    aRRSplit = Application.Transpose(Split(WholeLine, Sep))
    lngCnt = lngCnt + 1
    Cells(lngCnt, 1).Resize(1, UBound(aRRSplit)) = Application.Transpose(aRRSplit)
Wend
Close #1
End Sub
于 2012-05-17T07:15:36.403 に答える
1

Excel で区切られたファイルを csv/txt ファイルとして開いてみてください。これは高速です。
または、2 次元のバリアント配列を作成してセルごとに入力し、そのバリアント配列を Excel の範囲に割り当てることもできます。オブジェクト モデルのオーバーヘッドが最小限に抑えられるため、はるかに高速になります。

于 2012-05-17T07:09:35.493 に答える
0

これは、オンラインで見つけたコードで、すぐに機能します。

Function doFileQuery(fileName As String, outSheet As String) As Boolean

Dim rootDir As String

rootDir = "W:\Development"

Dim connectionName As String

connectionName = "TEXT;" + rootDir + "\" + fileName

With Worksheets(outSheet).QueryTables.Add(Connection:=connectionName, Destination:=Worksheets(outSheet).Range("A5"))

    .Name = fileName
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .RefreshStyle = xlOverwriteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .TextFilePromptOnRefresh = False
    .TextFilePlatform = 437
    .TextFileStartRow = 1
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = False
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = False
    .TextFileSpaceDelimiter = False
    .TextFileOtherDelimiter = "|"
    .Refresh BackgroundQuery:=False

End With
doFileQuery = True
End Function

お役に立てれば!

于 2012-06-06T14:31:51.830 に答える