Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 7 Home Premium : Excel 2010)
CSVをエクセルに取り込みたいのですが
投稿日時: 17/03/16 19:34:18
投稿者: VBA12345

CSVファイルの行数が300万件あります。
もちろん全て1シートで入りませんので10万件毎にシートを分けてインポートしたいです。
 
    Set xlAPP = Application
    xlAPP.StatusBar = "読み込むファイル名を指定して下さい。"
    vntFileName = xlAPP.GetOpenFilename(FileFilter:=cnsFILTER, _
                                        Title:=cnsTITLE)
    MyFile = "text;" & vntFileName
    With ActiveSheet.QueryTables.Add(Connection:=MyFile, Destination:=Range("$A$1"), Sql:=m_sql)
       .Name = "link1"
       .TextFileCommaDelimiter = True
       .TextFileColumnDataTypes = Array(2, 1)
       .Refresh BackgroundQuery:=False
       .Delete
    End With
 
上記コードが一番早くインポートされるため、このコードを改良して
インポートできないですかね?
 
お手数をお掛けしますが宜しくお願い致します。

投稿日時: 17/03/16 19:39:11
投稿者: VBA12345

VBA12345 さんの引用:
CSVファイルの行数が300万件あります。
もちろん全て1シートで入りませんので10万件毎にシートを分けてインポートしたいです。
 
    Set xlAPP = Application
    xlAPP.StatusBar = "読み込むファイル名を指定して下さい。"
    vntFileName = xlAPP.GetOpenFilename(FileFilter:=cnsFILTER, _
                                        Title:=cnsTITLE)
    MyFile = "text;" & vntFileName
    With ActiveSheet.QueryTables.Add(Connection:=MyFile, Destination:=Range("$A$1"))
       .Name = "link1"
       .TextFileCommaDelimiter = True
       .TextFileColumnDataTypes = Array(2, 1)
       .Refresh BackgroundQuery:=False
       .Delete
    End With
 
 
上記コードが一番早くインポートされるため、このコードを改良して
インポートできないですかね?
 
お手数をお掛けしますが宜しくお願い致します。

回答
投稿日時: 17/03/16 20:51:51
投稿者: simple

# なぜ自己発言を引用されているのか、意味不明。
 
こんにちは。
 
それほど大きなデータを使ってどんなことをするのか不明ですが、
質問に載せられていた方法で行数をコントロールするのは無理でしょう。
 
過去発言で好評だったPowerPivotというアドインを紹介しておきます。
ろひさんというかたの発言です。
Excel2010ならMSのサイトから無償ダウンロードが可能です。
 
> Excelで200万行のCSVを操作したい場合、
> 私ならExcel2010でPowerPivotを使うことを検討します。
 
> 外部データソースにテキストファイルが選べますので、CSVはOKのはず。
> また、オンメモリで動作するので、Excelの行数制限以上の読み込みが可能です。

ネット上で検索すると、ダウンロード方法、使用方法の情報にヒットすると思います。
トライしてみてください。

回答
投稿日時: 17/03/17 23:10:40
投稿者: simple

> お手数をお掛けしますが宜しくお願い致します。
余り手数を掛けるつもりはないのですが、
ツールを使うのが気が進まないというなら、
たとえば以下のようなことが考えられるでしょう。
 
(1)行数ごとにファイルを分割します。
   それには、フリーソフトを使ってもよいですし、VBAで書くことも可能でしょう。
   読み込み用のファイルと、書き込み用のファイルを開いて、
   繰り返し処理をしてもよいでしょう。
(2)あなたが提示されたコードを使って、それらのファイルを順次、各シートに読み込めば
   よいでしょう。
どこまでトライされていますか?
詰まっているのは具体的にどこでしょうか。
お手数ですが、お知らせください。

回答
投稿日時: 17/03/19 07:11:42
投稿者: simple

こんにちは。
(1)
PowerPivotを使って300万行のCSVを読み込んでみました。(147MB)
一度に読み込めました。
それに対して、Pivotテーブルを適用して、
ワークシートに結果を書き込むことができました。
 
(2)
10万行ごとのテキストファイル30個に分解してみました。
以下で30秒ぐらい。
 

Sub test()
    Dim j&, k&
    Dim TextLine

    Open "元ファイル.csv" For Input As #1
    For k = 1 To 30
        Open "A" & Format(k, "00") & ".csv" For Output As #2
        For j = 1 To 100000
            Line Input #1, TextLine
            Print #2, TextLine
        Next
        Close #2
    Next
    Close #1
End Sub

(3)
あとは、これをQuaryTableで読み込むだけです。
トライしてみてください。
簡単な繰り返し処理ですから。
 
# 投稿を忘れてしまっているのでしょうか?

トピックに返信