0

行のキーセル値に対する値に関するデータを取得したい。問題は、ファイルが非常に大きいことです。約 54000 行と 14 列の .txt ファイルがあるため、テキスト ファイル自体は 20 MB であり、それに対して D 列の値を取得する必要があります。 F列の値。列 F の値は一意です。

これまで、.txt ファイルからデータを取得してシートにコピーし、ループを実行して添付値を取得するという直接的なアプローチを試みてきました。

しかし、コードは 15 分間待っても .txt ファイルからデータを取得できません。

  Do While bContinue = True
  outRow = 1

  sInputFile = Application.GetOpenFilename("Text Files (*.txt), *.txt")
  If sInputFile = "False" Then
     bContinue = False
     Reset 'close any opened text file
     Exit Sub

  Else
     outCol = outCol + 2

     'process text file
     fNum = FreeFile
     Open sInputFile For Input As #fNum

     Do While Not EOF(fNum)
        outRow = outRow + 1
        Line Input #fNum, sInputRecord
        Sheets("Sheet1").Cells(outRow, outCol).Value = sInputRecord
     Loop
     Close #fNum

  End If
  Loop

  errHandler:
  Reset 
  End Sub

しばらく時間がかかると思っていましたが、このコードを実行するのに永遠に時間がかかり、マクロを使用する目的が失われます。誰かがこの問題を解決するためのより良い方法を持っているかどうかを尋ねます.

4

2 に答える 2

1

これを試して、フィードバックしてください。

Sub TryMe()

Dim cN As ADODB.Connection '* Connection String
Dim RS As ADODB.Recordset '* Record Set
Dim sQuery As String '* Query String
On Error GoTo ADO_ERROR

cN = New ADODB.Connection
cN.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\temp\;Extended Properties=""text;HDR=Yes;FMT=Delimited(,)"";Persist Security Info=False"
cN.ConnectionTimeout = cN.Open()

RS = New ADODB.Recordset
sQuery = "Select * From VBA.csv ORDER BY ID"
RS.ActiveConnection = cN
RS.Source = sQueryRS.Open()
If RS.EOF <> True Then
    While RS.EOF = False
    Open "c:\temp\vba_sorted.csv" For Append As 1
    Print #1, RS.Fields(0) & "," & RS.Fields(1); RS.MoveNext()
    Close #1
End If
If Not RS Is Nothing Then RS = Nothing
If Not cN Is Nothing Then cN = Nothing

ADO_ERROR:
If Err <> 0 Then
Debug.Assert (Err = 0)

MsgBox (Err.Description)
Resume Next
End If
End Sub
于 2019-06-15T03:49:14.527 に答える