200万行のCSVファイルをエクセルに読み込みたいです。Rows.Countを超えるので、2回に分けて
半分読み込み
処理
残り半分読み込み
処理
のようにしたいのです。どうすればいいでしょうか?
参考までに、検索したところ下記のQ&Aは見つかりました。
https://oshiete.goo.ne.jp/qa/3407338.html
ただ、これは途中の任意の1行を読み込む方法です。
100万行のファイルを2個作る等のようなとんちの利いた回答はナシでお願いします。
他に無ければしますが。。。
No.6
- 回答日時:
念のため、Cドライブ直下にファイルを置いて試しましたが問題ありませんでした。
ただ、Windows Vista?以降からはCドライブ直下はUAC(User Account Control)の制約を受けますので
その為かもしれません。
フォルダを作成し、C:\Temp\Book1.csv などにしてみたらどうですか?
前略
With Cn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.ConnectionString = _
"Data Source=C:\temp\;" _
& "Extended Properties='text;HDR=NO;" _
& "FMT=Delimited'"
.Open
End With
Set Rs = CreateObject("ADODB.Recordset")
Rs.CursorLocation = 3 'adUseClient
Rs.Open "SELECT * FROM Book1.csv", Cn, 0, 1, 1
後略
"Data Source=C:\temp\;" _ は"Data Source=C:\temp;" _ と
最後の\が無くても動きますが付けといてください。
ありがとうございます。
本番ファイルで動作確認出来ました。
パスだけ入力する所にファイル名も入れてしまった為に、エラーになってました。
No.5
- 回答日時:
とりあえず小さいデータ(20行位)でお試しください。
不都合があれば考えます。
こちらでダミーデータ(Yosoo.co.jp?で取得)
2004/1/5 0:00:00,1301,"極洋",171,172,169,169,384000
2004/1/6 0:00:00,1301,"極洋",170,170,166,167,475000
・・・
が180万行で行ったところ
レコードオープン 20秒
CopyFromRecordset終了 5秒
シート2への転記 162秒
合計3分位(4年前の中堅PC、Win7 64bit & Excel2010 32bit)
でした。
なお、シート1では
2004/1/5 1301 極洋 171 172 169 169 384000
シート2では
37666 4667 アイサンテクノロジー 105 105 105 105 1000
のように日付時刻型のデータが実数になりました。
また、
シート1とシート2内の使用セルをクリア(Ctrl + A で Delete)しても
xlsxファイルのサイズは6MB程度、
中身が無い?のに開きなおすのに1・2秒かかるようになりました。
この辺は未経験です。
>8列目に商品ごとに連番をつけられそうです。
必ず1商品に付き5万行であるなら抽出条件に設定すれば可能かと。
やってみましたが、エラーでした。
実行時エラー
「パス'C:\Book1.CSV'は正しくありません。パス名に間違いないことと、ファイルがおかれたサーバーに接続していることを確認してください。」
.Openの行で発生します。ファイルの場所と名前を変えただけなんですが。。。データはエクセルで作ってCSVで保存したものです。
1商品につき常に5万行ではありません。行数は上下します。残念。
No.4ベストアンサー
- 回答日時:
使えそうな項目が無いですね・・・。
ExcelでCSVファイルを読み込むときに頭を悩ませるデータ型の変更、
(電話番号の前ゼロ消失、
郵便番号が日付になったり計算されてしまう・・・が無さそうなのでマシかも)
CSVファイルのフルパスが
D:\SampleData\てすと.csv
で、
タイトル行が無い場合のコードです。パスとファイル名は適宜書き換えてください。
20行程度の小さなテストデータで問題なかったら本番でお試しを。
数分かかるかと思います。
Sub Test()
Dim Cn As Object
Dim Rs As Object
Dim i As Long, k As Long, j As Integer
Set Cn = CreateObject("ADODB.Connection")
With Cn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.ConnectionString = _
"Data Source=D:\SampleData;" _
& "Extended Properties='text;HDR=NO;" _
& "FMT=Delimited'"
.Open
End With
Set Rs = CreateObject("ADODB.Recordset")
Rs.CursorLocation = 3 'adUseClient
Rs.Open "SELECT * FROM てすと.csv", Cn, 0, 1, 1
MsgBox "項目数は" & Rs.Fields.Count _
& vbNewLine _
& "行数は" & Rs.RecordCount
Application.ScreenUpdating = False
Sheets(1).Range("A1").CopyFromRecordset Rs, 10 '←本番では1000000に
'残りはシート2に
Rs.absolutePosition = 11 '←本番では1000001に
Do Until Rs.EOF
k = k + 1
If k > 1048576 Then
MsgBox "最大行数を超えました。もう無理!"
Exit Do
End If
For j = 1 To Rs.Fields.Count
Sheets(2).Cells(k, j) = Rs.Fields(j - 1)
Next
Rs.movenext
Loop
Application.ScreenUpdating = True
Rs.Close: Set Rs = Nothing
Set Cn = Nothing
End Sub
ありがとうございます。
まだテスト出来てません。8列目に商品ごとに連番をつけられそうです。
8列目
1
1
5万行
2
2
2
5万行
使えそうでしょうか?
No.3
- 回答日時:
そちらのCSVファイルがまったく不明ですが
大体半分くらいに分けられるモノ
連番や男女などの項目があれば簡単ですが
項目名の有無・使えそうな項目はありますか?
レコード数に関してはOpenするまえに
rs.CursorLocation = 3 'adUseClient
を記述すれば、rs.recordcount で取得できます。
現状のコードを提示してくだされば具体的な回答も可能かも?
ありがとうございます。
何となく分かって来ました。単純な行数の概念がなく、あくまでデータを見て識別するのでしょうか?
⚫6~7列
⚫2列目に商品名の文字列、同一文字列が5万行程度続き、次の商品名に変わる
⚫1列目は上記商品名の通し番号。1~5万程度。商品名が変わると1にリセット。
残りの列は数字の羅列です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Excel(エクセル) Excel Powerクエリーの質問、行数指定は可能でしょうか? 2 2022/08/22 12:54
- Visual Basic(VBA) エクセルVBAでメールの自動作成の モジュールを作ったのですが、txtファイルから読み込んだ本文が文 2 2022/07/20 15:01
- Access(アクセス) CSVファイルの「0落ち」にVBA 6 2023/02/02 15:27
- XML PHP.laravelについて 1 2023/07/06 15:26
- Excel(エクセル) CSVファイルでVBAを動かす方法 3 2023/04/04 10:22
- Excel(エクセル) エクセルでcsvファイルを開いてVBAを使いたい 7 2022/04/28 11:12
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
Microsoft VBAで2GBを超えるファイルサイズのバイナリデータを読み込みたい。
Visual Basic(VBA)
-
エクセルVBA 2千万行のCSVファイルを開きたい
Visual Basic(VBA)
-
VBAで巨大なファイルの途中からの読み込み
Visual Basic(VBA)
-
-
4
VBA 大きなtxtテキストファイルを開く方法
Excel(エクセル)
-
5
VBAでの100万行以上のデータの取り込み
その他(プログラミング・Web制作)
-
6
100万行のCSVを10万行ずつのファイルに区切るには?(UTF-8、改行LF)
Excel(エクセル)
-
7
2GB以上のファイルを扱う方法
Visual Basic(VBA)
-
8
VBAの配列サイズとメモリに関して
Visual Basic(VBA)
-
9
エクセルVBA 大容量CSVファイルの読み込みが遅い
Visual Basic(VBA)
-
10
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
11
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
12
エクセルVBAで65536レコードを超えるCSVファイルの読み込み
Excel(エクセル)
-
13
EXCEL VBA 指定したファイルが存在しない場合メッセージボックスを表示させる
Access(アクセス)
-
14
エクセルでENTERを押すと数式がそのまま文字列になってしまう
Excel(エクセル)
-
15
【VBA】テキストファイルを指定行数からの読み込み
Visual Basic(VBA)
-
16
エクセルVBA 文字列領域が不足しています
Visual Basic(VBA)
-
17
VBAでCSVファイルを途中行まで読んだ後で最初の行から読み直す方法はありますか?
その他(プログラミング・Web制作)
-
18
【ExcelVBA】300万件越えCSVから条件を満たす行だけ抽出するには?
Visual Basic(VBA)
-
19
【ExcelVBA】UTF-8の文字コードのまま指定行数毎にCSVを分割できませんか?
Visual Basic(VBA)
-
20
【Excel VBA】カンマと改行コードを取り除くマクロ
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カンマ区切りのCSVファイルから...
-
VBAでcsvファイルを読み込んで...
-
複数のcsvファイルをExcelに一...
-
csvファイル 項目数取得
-
Visual C++によるcsvファイルの...
-
Excelでcsvのフィールドが減る
-
データ解析ソフトRでのファイル...
-
vb2010でCSVファイルを並び替え...
-
CSVの読み込み処理について
-
Csvから1行ずつ変数に格納する...
-
csvファイルのデータの一部を取...
-
巨大なCSVの加工(指定列のみの...
-
CSVファイル作成
-
バッチでCSVを処理する時、空の...
-
COBOL85でのCSVファ...
-
マクロから出力されるcsvのダブ...
-
CSV形式での保存時に”文字列...
-
CSVファイルを折れ線グラフ化す...
-
csvファイルでの日付設定「yyyy...
-
エクセル形式のファイルの読み込み
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カンマ区切りのCSVファイルから...
-
CSV形式での保存時に”文字列...
-
複数のcsvファイルをExcelに一...
-
csvファイル 項目数取得
-
csvファイルでの日付設定「yyyy...
-
バッチでCSVを処理する時、空の...
-
マクロから出力されるcsvのダブ...
-
csvファイルを列数ごとに分割す...
-
csvファイルのデータの一部を取...
-
エクセル形式のファイルの読み込み
-
エクセルVBA 大容量CSVファイル...
-
CSVファイル作成
-
EXCEL|csvで保存→開くcsvを閉じる
-
CSVファイルの項目行を削除...
-
巨大なCSVの加工(指定列のみの...
-
データ解析ソフトRでのファイル...
-
VBAでCSVファイルのデータを集...
-
【ExcelVBA】UTF-8の文字コード...
-
【C#】パス名で無効な文字
-
【エクセル マクロ】読み込ん...
おすすめ情報
動作確認ok。
パスのみ入力すべき所にファイル名も入れてしまい、エラーとなってました。