0

大きな .csv ファイルを Excel にインポートしようとしていました。このファイルには 400 万行近く、329 列があり、Excel の1M 行制限である65536をはるかに超えています。テキスト ファイルを Excel にインポートする VB スクリプトをオンラインで見つけました。このスクリプトでは、行の制限を超えると、すべてのワークシートの行の合計が元のテキスト ファイルの行の合計と等しくなるまで新しいワークシートが作成されます。

Sub ImportLargeFile()
'Imports text file into Excel workbook using ADO.
'If the number of records exceeds 65536 then it splits it over more than one sheet.

Dim strFilePath As String, strFilename As String, strFullPath As String
Dim lngCounter As Long
Dim oConn As Object, oRS As Object, oFSObj As Object

'Get a text file name
strFullPath = Application.GetOpenFilename("Text Files (*.csv),*.csv", , "Please select text file...")

If strFullPath = "False" Then Exit Sub  'User pressed Cancel on the open file dialogue

'This gives us a full path name e.g. C:\temp\folder\file.txt
'We need to split this into path and file name
Set oFSObj = CreateObject("SCRIPTING.FILESYSTEMOBJECT")

strFilePath = oFSObj.GetFile(strFullPath).ParentFolder.Path
strFilename = oFSObj.GetFile(strFullPath).Name


'Open an ADO connection to the folder specified
Set oConn = CreateObject("ADODB.CONNECTION")
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
           "Data Source=" & strFilePath & ";" & _
           "Extended Properties=""text;HDR=Yes;FMT=Delimited"""

Set oRS = CreateObject("ADODB.RECORDSET")

'Now actually open the text file and import into Excel
oRS.Open "SELECT * FROM " & strFilename, oConn, 3, 1, 1
While Not oRS.EOF
    Sheets.Add
    ActiveSheet.Range("A1").CopyFromRecordset oRS, 65536
Wend

oRS.Close
oConn.Close

End Sub

ただし、Excel 2007 で実行すると、次のエラーが発生します。

Run-time error '-2147217900 (80040e14)':

Syntax error in FROM clause.

デバッグをクリックすると、この行を指します

    oRS.Open "SELECT * FROM " & strFilename, oConn, 3, 1, 1

私は存在しない VB スキルを持っているので、ここで助けていただければ幸いです。

ありがとう!

編集: http://support.microsoft.com/kb/193514を見つけましたが、この場合は機能しません。実際、角括弧をどこに配置すればよいかさえわかりません。その行に括弧を入れると、Excel は実行オプションを拒否します。

編集2:これを別のマシンで実行してみましたが、メモリが問題にならないように、より多くのジュースが含まれています。このコンピューターには Office 2013 もあります (ただし、Office 365 はありません)。その上で同じマクロを実行したところ、次のエラーが発生しました。

Run-time error '3706':
Provider cannot be found. It may not be properly installed.

[デバッグ] をクリックすると、この行がポイントされます

oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
       "Data Source=" & strFilePath & ";" & _
->     "Extended Properties=""text;HDR=Yes;FMT=Delimited"""
4

2 に答える 2

1

PowerPivot を調べましたか? Microsoft が提供する無料のアドインです。これにより、元のデータ ソースに接続したり、CSV 全体を使用したり、数百万行 (セルの制限を超えて) をロードしたりできます。ピボット テーブルでデータを要約したり、データに関数を適用したりできます。PowerPivot は、お客様のような状況に合わせてカスタマイズされました。

ダウンロード

于 2013-05-14T18:47:59.057 に答える