2

いくつかの計算を実行するために、VBA (私は Excel 2010 を使用しています) を介して Excel ファイルからアクセスする必要がある非常に大きな csv ファイル (約 800MB) があります。今、私はExcelがそれを達成するためにイオンを必要とするためにファイルを直接開くことを避けたいと思います。

したがって、この投稿(stackoverflow でも)で説明されているように、ADO レコードセットとして開くことにしました。 残念ながら、列の数は 255 に制限されているようAdoRecordset.Fields.countです。

ここでスタックオーバーフローでいくつかの解決済みの投稿を検索してみましたが、次のことがわかりました。

  1. csv ファイルから 255 を超えるレコードを転送してアクセスすることはできません
  2. Microsoft Jet OLEDB を使用した CSV の列制限

最初の質問にはまだ誰も答えていません。2 番目の投稿で説明されている以外の解決策があるのではないかと考えていました。可能であれば追加のソフトウェアをインストールしたくありません。

私の質問は次のとおりです。

  1. 255 を超える使用可能なフィールド/列を持つ ADO レコードセットとして csv ファイルを開く方法はありますか? 約 3000 列と 10000 行が必要です。
  2. そうでない場合、csv ファイルを実際に開かずに読み取る他の方法はありますか (ファイルが巨大な場合、これには何年もかかります)。

csv ファイルは必須ではなく、実際にデータを必要な形式に変換できます。3000 列と 10000 行があり、MS Access は 3000 列を処理できません。おそらく、より簡単かつ迅速に処理できるファイルの種類はありますか? (ExcelVBAで開いて読むという意味では)

これは頻繁に発生する問題であるに違いありません。なぜ Web 上に解決策が見つからないのか不思議に思っています。

4

1 に答える 1

2

3000 は大きいように見えますが、コツがあります。

Dim FileNum As Integer
Dim DataLine As String
Dim SplitData()


FileNum = FreeFile()
Open "Filename" For Input As #FileNum

While Not EOF(FileNum)
    Line Input #Filename, DataLine ' read in data 1 record at a time
    SplitData = Split(DataLine, ",")
    'Process big array
Wend

データの各行の読み取りは、フィールド 1SplitData(0)からフィールド 3000SplitData(2999) (ゼロ ベースの配列)になります。

于 2012-06-25T16:21:53.077 に答える