EXCELVBAを用いて、ADODB.CONNECTIONによりデータを取得しようと思い、ネットで調べた
プログラムを使ってみたのですが、途中のレコードまでしか取得できませんでした。
ちなみに、データを取得しようと思っているもとのCSVファイルのサイズは10GB超、レコード数は
800万行程度あります。
これが、数十MB程度のファイルだと問題なかったのですが、レコード数などに制限はあるのでしょうか。
ご教示いただけますと幸いです。
用いたマクロの構文は以下のとおりです。
Dim con As New ADODB.Connection
Dim connectionString As String
Dim csvFilePath As String
Dim rs As ADODB.Recordset
Dim colNo As Long
Dim fileNumber As Long
Dim Buffer As String
'CSVファイルが置かれているフォルダ
csvFilePath = E:\
connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=" & csvFilePath & ";" _
& "Extended Properties=""Text;HDR=NO;FMT=Delimited"""
'コネクションオープン
con.Open connectionString
'ここでSQL文によりレコードを取得します。
Set rs = con.Execute("SELECT COUNT(*) FROM XXX.CSV")
fileNumber = FreeFile
Open OutputFolder & Application.PathSeparator & OutputFile For Output As #fileNumber
Buffer = ""
’ヘッダーの出力
For colNo = 0 To rs.Fields.Count - 1
If Buffer <> "" Then
Buffer = Buffer & ","
End If
Buffer = Buffer & rs.Fields(colNo).Name
Next
Print #fileNumber, Buffer
’データの出力
Do While rs.EOF = False
Buffer = ""
For colNo = 0 To rs.Fields.Count - 1
If Buffer <> "" Then
Buffer = Buffer & ","
End If
Buffer = Buffer & rs.Fields(colNo).Value
Next
Print #fileNumber, Buffer
'次のレコード
rs.MoveNext
Loop
Close #fileNumber
'クローズ
con.Close
Set rs = Nothing
Set con = Nothing
End Sub
No.3ベストアンサー
- 回答日時:
> CSVファイルのサイズは10GB超
これをメモリ上に展開するのは32bit Windowsの制限で無理だし、64bitだとMicrosoft.Jet.OLEDBが動かない。
いずれにしろADOでは無理。
SQLでCSVを検索したいのなら、LogParserとか。
http://www.atmarkit.co.jp/fwin2k/operation/logpa …
ご回答ありがとうございます。
集計にあたり、丸ごと展開してくれなくても良いのですが、
そういうわけにもいかないのですかね?詳しくなくてすみません。
最初の回答者にお教えいただいたとおり、Line Inputであれば、
いくら大きいファイルでもあつかえますし。
LogParserについて調べてみます。ありがとうございます。
No.4
- 回答日時:
> レコード数などに制限はあるのでしょうか。
停止したときのアクセスのファイルサイズは確認できますか?
バージョン記載がないけど、2003までならMDB、2007以降ならACCDBファイル。
たぶん最大サイズ2GBの上限値に達していると思います。
この回答への補足
Accessは用いておりません。10数GBあるcsvファイルからそのまま、記載したマクロを
用いてデータを抽出しようと考えてました。
いずれにせよ2GBが上限なんでしょうかね。
No.2
- 回答日時:
テキストファイルで、しかも容量があるなら、
ADOで読み込む理由は無いと思いますよ。
★レコード数を知りたい場合
Dim レコード数 As Long
Dim ファイル番号 As Long
Dim データ As String
'空いているファイル番号を取得する
ファイル番号 = FreeFile
'ファイルを開く
Open "~\xxx.csv" For Input As ファイル番号
'EOFになるまで行単位で読み込む
Do Until EOF(ファイル番号)
Line Input #ファイル番号, データ
レコード数 = レコード数 + 1
Loop
'ファイルを閉じる
Close ファイル番号
★データをカンマで区切る
Dim 項目配列 As Variant
Dim 個別要素 As Variant
項目配列 = Split(データ, ",")
For Each 個別要素 In 項目配列
Debug.Print 個別要素
Next
この回答への補足
ご回答ありがとうございます。
テキストファイルからデータの取得を行いたいと思っており、できればSQLなどを用いて、
条件にあったデータの取得や、データのグループ化などが行えればと思っています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Access(アクセス) DoCmd.SearchForRecord が動かない時の解決方法 3 2022/07/22 15:31
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Access(アクセス) docmd.gotorecordを起動するには 5 2022/06/17 15:20
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) VBA 請求書自動作成 3 2022/04/24 01:58
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたい 6 2023/01/23 12:00
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでCSVファイルの特定行を書...
-
ExcelをCSV書き出す場合のシー...
-
VBAでCSVファイルを途中行まで...
-
openした後、closeしないでプロ...
-
エクセルVBA コードが同じでも...
-
ReadLineでの読み出し行を指定する
-
perlで、後ろの行を読んで、前...
-
2つのCSVファイルをマッチング
-
プログラミング(流れ図とコー...
-
JavaでCSVファイルを高速に読む...
-
ファイルからある文字列の個数...
-
形態素解析の解析内容を各品詞...
-
C#でCSVファイルを逐一更新したい
-
ファイル処理について
-
拡張子 ”log” と ” dat” の違い
-
テキストデータから指定した1...
-
他のサーバーにあるファイルの...
-
空白文字 \\f と\\v の違いに...
-
FindFirstFileとFindNextFileで...
-
バッチファイルの作り方(CSV→...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでCSVファイルを途中行まで...
-
VBAでCSVファイルの特定行を書...
-
openした後、closeしないでプロ...
-
ExcelをCSV書き出す場合のシー...
-
エクセルVBA コードが同じでも...
-
VBAで巨大なファイルの途中から...
-
ReadLineでの読み出し行を指定する
-
perlで、後ろの行を読んで、前...
-
JavaでCSVファイルを高速に読む...
-
MATLAB グローバル変数の宣言
-
perlにて2つのファイル比較
-
C言語でのファイルのデータ更...
-
拡張子 ”log” と ” dat” の違い
-
ADOによるCSVファイルからのデ...
-
VB6.0でDB接続する際に切断時の...
-
2つのCSVファイルをマッチング
-
Perlの変数に文字数制限(容量...
-
perlで容量の大きいCSVファイル...
-
データファイルをプロットする(...
-
Perl Vlookupみたいに
おすすめ情報