
9項目で構成されているCSVがあります。
※このCSVはUTF-8、改行LFです。改行コードは可変ですが、UTF-8は変えたくありません。
1行目に項目名が、最下行7行にフッター行が入っています。
これを指定した行毎に分割したCSV保存を行いたいです。
(固定した方が簡単であれば10万行毎に分割したいです。)
・ファイル名は元のファイル名の末尾に「-1、-2、-3・・・」
・全てのファイルの1行目が項目行+レコード10万行+7行のフッターで構成したいです。
元のCSVファイルは100万行位あるため、
10万ずつ分割した場合、AAAA-1.csc ~ AAAA-11.csc の11ファイルに分割されます。
項目数に関わらず分割できると汎用性が高く非常に助かります。
よろしくお願いいたします。
A 回答 (7件)
- 最新から表示
- 回答順に表示
No.7
- 回答日時:
#定数adTypeText忘れてた ;(
> :
> Const ForReading As Long = 1
> Const adSaveCreateOverWrite As Long = 2
Const adTypeText As Long = 2 '追加してください
> :
No.6
- 回答日時:
なんかダブってますかね?
https://oshiete.goo.ne.jp/qa/11523302.html
Sub test()
Dim wkCsv
wkCsv = Application.GetOpenFilename("csv,*.csv,all,*.*")
If VarType(wkCsv) = vbBoolean Then Exit Sub
CreateObject("WScript.Shell").Run _
"PowerShell -Command $i=0; Get-Content -ReadCount 100000 " _
& wkCsv & " -Encoding UTF8 | % { $_ > dest$i.csv;$i++}" _
, 0, True
MsgBox "done"
End Sub
↑PowerShellをVBAから実行する感じも試してみたけどEncodingがうまくかず
よくわからなかったので、別スレで提示したFileSystemObjectのコードを応用↓
Sub test2()
Dim wkCsv
wkCsv = Application.GetOpenFilename("csv,*.csv,all,*.*")
If VarType(wkCsv) = vbBoolean Then Exit Sub
Const ForReading As Long = 1
Const adSaveCreateOverWrite As Long = 2
Const mx As Long = 100000
Dim fs As Object 'Scripting.FileSystemObject
Dim ts As Object 'Scripting.TextStream
Set fs = CreateObject("Scripting.FileSystemObject")
Set ts = fs.OpenTextFile(wkCsv, ForReading)
Dim x As Long
Dim y As Long
Dim d As String
d = Format$(Date, "yyyymmdd")
ReDim ret(mx) As String
ret(0) = ts.ReadLine
Do Until ts.AtEndOfStream
y = y + 1
ret(y) = ts.ReadLine
If y = mx Then
x = x + 1
With CreateObject("ADODB.Stream")
.Open
.Type = adTypeText
.Charset = "UTF-8"
.WriteText Join(ret, vbLf) & vbLf
.SaveToFile d & Format$(x, "00000") & ".csv", adSaveCreateOverWrite
.Close
y = 0
End With
End If
Loop
ts.Close
If y > 0 Then
ReDim Preserve ret(y)
With CreateObject("ADODB.Stream")
.Open
.Type = adTypeText
.Charset = "UTF-8"
.WriteText Join(ret, vbLf) & vbLf
.SaveToFile d & Format$(x + 1, "00000") & ".csv", adSaveCreateOverWrite
.Close
End With
End If
End Sub
#本スレは別スレついでの手法提案みたいなものなので、
#動かなかったり望む結果が得られなかったとしてもあまり深追いするつもりはありません
No.4
- 回答日時:
>C言語環境を準備するには何が必要でしょうか?低コストだと助かるのですが。
マイクロソフトのVisualStudioが一般的ですが、
東海大の安江研究室で開発したフリーのVisual Windows for BC++
も軽いので愛用しています。
https://www.vector.co.jp/soft/winnt/prog/se32660 …
No.3
- 回答日時:
フッターとデータの区別は何かありますか?
例えばフッターの初めの行には「,」が無いとか?
ありがとうございます。
たった今、仕様が変更になりました。
本件、手作業で行っていたものですから、負荷軽減のため元のCSVはフッターなしの状態で提供されることとなりました。
つまり、項目行+約100万件のCSVを、項目行+10万行ずつ、つまり100,001行ずつのCSVに分割することになります。
テキストエディタで切り分けていく作業を軽減したいです。
ちなみに毎週少しずつ増加していくので現在10ファイルに分割していたのがいずれ11ファイルになります。
よろしくお願いいたします。
No.1
- 回答日時:
念のために確認ですが
① BOM 付きで保存でしょうか?それとも BOM 無での保存でしょうか?
② 変換後の全行数は最大で 100,008 行 という事でしょうか?
③ 変換後の拡張子は「.csc」ではなく「.csv」で良いのですよね?
④ 元ファイルと同じフォルダーに作成すれば良いのですよね?
⑤ 重複ファイルが有った場合は上書き保存で良いのですよね?
⑥ 上書き保存の場合元々のファイル数より小さくい場合、番号の大きなファイルが残りますが、それでも良いですか?
ありがとうございます。
①BOMを理解してなかったのですが秀丸を見たところ、無くて良いです。
②はい。100,008行となります。もしフッターがないパターンのCSVが発生した場合ソース調整で何とかなりますよね?
③誤入力で失礼しました。CSVです。
④はい、同じフォルダーが分かりやすくて良いです。
⑤⑥きちんと空のフォルダ内で実行する想定なので現状のフォルダの状況を無視して上書きで結構です。
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Pythonで、データファイルと列名ファイルを1つのファイルにしたいです。 1 2023/07/27 20:29
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Excel(エクセル) PowerQueryで行数の指定はできますか? 2 2022/08/26 11:13
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) vbaマクロについて 【1.csv】をもとに【商品.csv】に有るものを【有り.csv】として名前を 1 2023/05/18 07:58
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) VBAで特定の場所にあるCSVファイル(複数)から特定場所を抜き出してExcelに転記したいです。 11 2023/05/23 16:29
- Visual Basic(VBA) vbaマクロについて 次のようなマクロを組みたいです。 自分は初心者なので全くわかりません。 詳しく 8 2023/05/18 18:38
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カンマ区切りのCSVファイルから...
-
wshでcsvファイルのソートを行...
-
バッチでCSVを処理する時、空の...
-
複数のcsvファイルをマクロ(VBA...
-
データ解析ソフトRでのファイル...
-
エクセル形式のファイルの読み込み
-
【エクセルVBA】お願いします。...
-
csvファイル 項目数取得
-
【C#】パス名で無効な文字
-
ACCESS CSVファイルをインポ...
-
csvファイルを列数ごとに分割す...
-
COBOL85でのCSVファ...
-
巨大なCSVの加工(指定列のみの...
-
COBOLでCSVをインプットにして...
-
【ExcelVBA】UTF-8の文字コード...
-
エクセルのプロパティーでセキ...
-
エクセルで複数のコメントのサ...
-
エクセルvbaでdocuworksprinter...
-
Wordで差込印刷した後に別々の...
-
ファイルサーバ上のファイルが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カンマ区切りのCSVファイルから...
-
バッチでCSVを処理する時、空の...
-
マクロから出力されるcsvのダブ...
-
csvファイルでの日付設定「yyyy...
-
csvファイル 項目数取得
-
CSV形式での保存時に”文字列...
-
【C#】パス名で無効な文字
-
複数のcsvファイルをExcelに一...
-
VBAでcsvファイルを読み込んで...
-
csvファイルを列数ごとに分割す...
-
【ExcelVBA】UTF-8の文字コード...
-
CSVファイルの項目行を削除...
-
エクセル形式のファイルの読み込み
-
【エクセル マクロ】読み込ん...
-
VBScriptからEXCELのVBAコマン...
-
エクセルVBA 大容量CSVファイル...
-
csvファイルのデータの一部を取...
-
巨大なCSVの加工(指定列のみの...
-
VBA 毎日取得するデータを反映...
-
COBOLでCSVをインプットにして...
おすすめ情報