100万行超のCSVがあります。
(ファイル形式はUTF-8、改行コードはLF)
1行目が項目名で、2行目以降がレコード、フッター行はありません。
各項目、データはダブルクォーテーションで囲まれたカンマ区切り形式です。
これを10万行ずつに区切りたいのですが一括でできる方法はないでしょうか。
各ファイル、項目名1行と10万レコードで100,001行で構成されます。
理想は、
ファイル名が、日付等の固定値+00001の連番です。
(例)2020031000001.csv
現在はテキストエディタ(秀丸)で、
1ファイル目:10万1行目以降を削除して保存
2ファイル目:10万行目までを削除し、10万1行目以降を削除して保存
・
・
こんな事を約10回繰り返していますが、途中で話しかけられたりして訳が分からなくなると、
やり直すハメに。。。
Excelで手作業でやらない理由は、CSV保存した際、ダブルクォーテーションが外れてしまう事と
文字コードをLFにし直さなければいけないからです。
正しく分割されてるなら、リネームや文字コード変換等を手作業で行う事になっても構いません。
Excelのマクロ、秀丸またはおすすめのテキストエディタのマクロ等でできる方法があったら教えてください。
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
#3です。
取り敢えずと言う事でしょうか。ExcelVBAで処理するのは、どうでしょう?限界を感じますが、、
VBAからPowerShellを呼んでコマンドを送るなどにする場合、(コードはWebで)
直接やbatで操作した方が良いように思えますし、、
>保存後の改行コードがLFじゃなくなるので、これはテキストエディタで手修正です。
この部分は、CreateObject("ADODB.Stream") などで纏めて処理出来そうですが、、
(しっかりとした知識がある訳では無いです)いかがでしょう。
CSVの内容が分からず検証環境を作れないので、下記は参考になりますか?
http://excel.syogyoumujou.com/vba/replace.html
No.4
- 回答日時:
No.1 です。
splitに類するコマンド無いのか気になった検索してみたら、残念ながらWindowsにはなさそうですが、ただpowershell使うとできるっぽいですね。
↓こんな感じでしょうか。
$i=0; cat .\<ファイル名> -ReadCount 100000 | % { $_ > 2020031$i.csv;$i++ }
(参考:https://kbn48.com/technical/270)
ただ、私がWindows使いじゃないので上手くいくかは未検証です。
それと、ファイル名の命名規則の箇所をどうすれば希望の型式になるのかはちょっと分かりません。
ということで、ご参考までに。
ありがとうございます。
Powershellを使ったことがないので挑戦してみます。
今は近道のツールでしのぎたいと思いますが、
汎用性のある手法を整理しておきたいのでうまくいくか試してみます。
No.3
- 回答日時:
反しません。
解決が優先です。
リンク先バイナリをDLして試したら完璧じゃないですか!
ひとまず解決です、ありがとうございます。
ただし、改行コード指定がなく、保存後の改行コードがLFじゃなくなるので、これはテキストエディタで手修正です。
これは全然問題ありません。
VBAで実現出来たら一番理想なのですが。。。
No.2
- 回答日時:
VBAには、次のステートメントが用意されているのですが、
ご存知ないですか?
・Line Input # ステートメント
・Print # ステートメント
簡単なサンプルを書いてみました。
出力ファイルを100件毎に切り替えるようにすれば、
お望みの処理ができると思います。
Sub sample()
Dim TextLine
Open "C:\xxxxxx\データX.csv" For Input As #1
Open "C:\xxxxxx\データY.csv" For Output As #2
Do While Not EOF(1)
Line Input #1, TextLine
Print #2, TextLine
Loop
Close #1, #2
End Sub
これで10万件出力できるんですか?後で実験してみます。
でも文字コード、改行コードは元のがそのまま引き継がれるんですかね?それも確認します。
ありがとうございました。
No.1
- 回答日時:
WSLとかでLinuxコマンドが使えるのであれば、splitというツールでかんたんに出来ます。
↓こんな感じです。
$ split -l 100000 <ファイル名>
https://eng-entrance.com/linux-command-split
ありがとうございます。
手元のローカル環境がWindows10なので、もう少し敷居の低い手法だと助かります。
つまりそう簡単にはいかないって事なんですかねぇ。、、、
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Visual Basic(VBA) 複数ファイルのデータの統合について 12 2022/05/14 12:03
- PowerPoint(パワーポイント) エクセルのマクロについて教えてください。 1 2022/10/03 09:55
- その他(プログラミング・Web制作) Pythonで、データファイルと列名ファイルを1つのファイルにしたいです。 1 2023/07/27 20:29
- Excel(エクセル) PowerQueryで行数の指定はできますか? 2 2022/08/26 11:13
- PowerPoint(パワーポイント) エクセルのマクロについて教えてください。 1 2022/03/25 17:03
- Visual Basic(VBA) 【ExcelVBA】Powerクエリーでいうピボット解除と同じ処理をVBAで 4 2022/07/06 17:09
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
Excelでファイル全体が読み込めないときどうすればいいでしょうか?
Excel(エクセル)
-
100万件越えCSVから条件を満たす行のみ抽出し、編集してエクセルシートに出力するには?
Ruby
-
【ExcelVBA】UTF-8の文字コードのまま指定行数毎にCSVを分割できませんか?
Visual Basic(VBA)
-
-
4
Access テーブルを分割してエクスポートしたい
Access(アクセス)
-
5
エクセルVBA 2千万行のCSVファイルを開きたい
Visual Basic(VBA)
-
6
ACCESSで行数指定(5万行目~8万行目のような)
Word(ワード)
-
7
エディタで効率的な切り出し方法
その他(ソフトウェア)
-
8
VBA csvを100万行ずつ各シートに読み込み
Excel(エクセル)
-
9
秀丸エディタでのファイル分割
オープンソース
-
10
VBAでの100万行以上のデータの取り込み
その他(プログラミング・Web制作)
-
11
【ExcelVBA】300万件越えCSVから条件を満たす行だけ抽出するには?
Visual Basic(VBA)
-
12
Access 1レコードずつcsvで出力したい
その他(データベース)
-
13
バッチでテキストファイルから任意の行のみ取得したい
その他(プログラミング・Web制作)
-
14
エクセルVBA 大容量CSVファイルの読み込み
Visual Basic(VBA)
-
15
ACCESSでの大容量データインポート
Access(アクセス)
-
16
エクセルで20万行あるシートから100行ずつ抽出したいのですが
Excel(エクセル)
-
17
PowerQueryで行数の指定はできますか?
Excel(エクセル)
-
18
エクセルで50行ごとに区切ったデータをシートに分割したい
Excel(エクセル)
-
19
Excelで大量の2000個のリストを100個ずつ
Excel(エクセル)
-
20
CSVファイルを複数のファイルに分割する方法
その他(コンピューター・テクノロジー)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Access インポート
-
アクセスでcsvに出力した際、頭...
-
100万行のCSVを10万行ずつのフ...
-
【CSVファイル】先頭の文字列に...
-
ファイル名が同じ場合自動的に...
-
タブ区切りデータからダブルコ...
-
Access95のエクスポートで教え...
-
CVS形式とは?
-
csvファイルが保存すると数...
-
アクセスがインポートできる容...
-
ThunderbirdのメールをCSVでま...
-
エクセルデータをテキストファ...
-
sqlldrのフィールドの属性について
-
Access2007のエキスポートについて
-
CSVファイルのセルに「01」と入...
-
accessで項目内の文字を自動改...
-
共有フォルダに誰が何にアクセ...
-
Accessのmdbを開こうとしたとき...
-
#1062 - '0' は索引 'PRIMARY' ...
-
【Excel】[Expression.Error] ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【CSVファイル】先頭の文字列に...
-
100万行のCSVを10万行ずつのフ...
-
TXTで作成したファイルをDATフ...
-
アクセスでcsvに出力した際、頭...
-
タブ区切りデータからダブルコ...
-
ThunderbirdのメールをCSVでま...
-
Access インポート
-
csvファイルが保存すると数...
-
Access2007のエキスポートについて
-
カンマがデータとして入ってるC...
-
Excelデータをテキストファイル...
-
アクセスがインポートできる容...
-
accessで項目内の文字を自動改...
-
Accessでdatファイルのインポート
-
Access95のエクスポートで教え...
-
エクセルデータをテキストファ...
-
ファイル名が同じ場合自動的に...
-
TSVのファイルをACCESSにインポ...
-
CSVファイルのセルに「01」と入...
-
sqlldrのフィールドの属性について
おすすめ情報