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ファイルの特定行を書...
-
ReadLineでの読み出し行を指定する
-
VBAで巨大なファイルの途中から...
-
ExcelをCSV書き出す場合のシー...
-
VBAでCSVファイルを途中行まで...
-
エクセルVBA コードが同じでも...
-
openした後、closeしないでプロ...
-
ADOによるCSVファイルからのデ...
-
拡張子 ”log” と ” dat” の違い
-
perlにて2つのファイル比較
-
MATLAB グローバル変数の宣言
-
VB6.0でDB接続する際に切断時の...
-
アクセスカウンターでデータが...
-
window.open でのファイル指定方法
-
awkスクリプトでダブルクォーテ...
-
htaccessで特定のディレクトリ...
-
fopenでディレクトリ内の全ファ...
-
ファイル出力の改行コードをLFに
-
エクセルVBAで素数だけを出力す...
-
fgets で値が取得できない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでCSVファイルを途中行まで...
-
VBAで巨大なファイルの途中から...
-
ExcelをCSV書き出す場合のシー...
-
VBAでCSVファイルの特定行を書...
-
openした後、closeしないでプロ...
-
ReadLineでの読み出し行を指定する
-
エクセルVBA コードが同じでも...
-
csvファイル改行コードの置換に...
-
Perlの変数に文字数制限(容量...
-
perlにて2つのファイル比較
-
C言語でのファイルのデータ更...
-
JavaでCSVファイルを高速に読む...
-
VB6.0でDB接続する際に切断時の...
-
MATLAB グローバル変数の宣言
-
alarmのタイムアウト後の処理で...
-
DBMとテキストファイルのどちら...
-
perlで、後ろの行を読んで、前...
-
拡張子 ”log” と ” dat” の違い
-
5行おきに5行ずつ抽出するに...
-
テキストデータから指定した1...
おすすめ情報