
CSVファイルを結合したいのですが、重複しているデータは削除した結果で結合させたいと
思っています。
CSVファイルはカンマ区切りで30列分、5000行ぐらいのデータ量となっています。
(1行目はタイトル行)
結合したときに、30列分のデータが全て同じ場合はひとつだけ残してかぶっているデータは
削除させたいです。
処理のイメージとしては下記が一番やりやすいのかなと思っていますが、VBA初心者なので
お知恵をお借りしたいです。
・結合したいファイルをCドライブ直下にフォルダ作って置いておく。(多くても10ファイルぐらいです)
・それをエクセルのマクロ(VBA)でマクロ実行したら、上記ファイルを読み込んでワークシートにデータをすべて貼り付けて、重複データを削除。
・残ったデータを新規ファイルで保存(同じディレクトリにCSV形式で保存)
※結合させたときにどれくらいのデータ量になるかは把握出来ていません。

No.4ベストアンサー
- 回答日時:
以下のマクロを標準モジュールに登録してください。
使用上の注意
Const folder As String = "D:\goo\excel\goo166"・・・CSVファイルのあるフォルダ
Const outfile As String = "結合.csv"・・・出力するCSVファイル名
上記はあなたの環境に合わせて適切に設定してください。
①拡張子がCSVのファイルのみを処理しています。
②同じ内容か否かは、1行の文字が全く同じなら、同じ内容と判断します。
③入力データ件数、出力データ件数に見出し行は含めません。
④全てのファイルに見出し行があるものとします。
⑤2回目に実行する際は、結合.csvを削除してから行ってください。そうしないと、そのファイルも入力ファイル扱いになってしまいます。
------------------------------------------------------------
Option Explicit
Public Sub CSVファイル結合()
Const folder As String = "D:\goo\excel\goo166"
Const outfile As String = "結合.csv"
Dim dicT As Object
Dim in_data_ctr As Long
Dim out_data_ctr As Long
Dim fname As String
Dim file_ctr As Long
Dim header_line As String
Dim fileNo As Long
Dim out_path As String
Dim key As Variant
in_data_ctr = 0
out_data_ctr = 0
file_ctr = 0
Set dicT = CreateObject("Scripting.Dictionary") ' 連想配列の定義
fname = Dir(folder & "\" & "*.csv", vbNormal)
Do While fname <> ""
file_ctr = file_ctr + 1
Call read_csv(folder & "\" & fname, dicT, in_data_ctr, header_line)
fname = Dir()
Loop
out_path = folder & "\" & outfile
fileNo = FreeFile '空き番号取得
Open out_path For Output As #fileNo
Print #fileNo, header_line
For Each key In dicT
Print #fileNo, key
out_data_ctr = out_data_ctr + 1
Next
Close #fileNo
MsgBox (file_ctr & "件のファイルを処理しました。入力データ件数=" & in_data_ctr & " 出力データ件数=" & out_data_ctr)
End Sub
Private Sub read_csv(ByVal file_path As String, ByVal dicT As Object, ByRef in_ctr As Long, ByRef header As String)
Dim fileNo As Long
Dim text As String
fileNo = FreeFile '空き番号取得
Open file_path For Input As #fileNo
Line Input #fileNo, header '1行目は見出しなのでヘッダー行へ格納
Do Until EOF(fileNo)
Line Input #fileNo, text
in_ctr = in_ctr + 1
If dicT.exists(text) = False Then
dicT(text) = True
End If
Loop
Close #fileNo
End Sub

No.3
- 回答日時:
そうすると、””でくくられたデータは全て同じ列になるのでしょうか。
"aaa",bbb,ccc,"ddd",eee,fff,ggg,hhh,iii,"jjj",kkk,lll,mmm,nnn,ooo,ppp,"qqq",rrr,sss,ttt,"uuu",vvv,www,"xxx",
① ② ③
①=1列目(A列)
②=4列目(D列)
③=10列目(J列)
つまり、①②③・・・以降省略 に示される列が””でくくられており、この列の位置は全てのCSVファイルで共通でしょうか。
それであれば、マクロの提供は可能です。

No.2
- 回答日時:
データの形式は①②のどちらでしょうか。
① "AAA","BBB","CCC"
② AAA,BBB,CCC
上記は、セルに格納されると
A1=AAA
B1=BBB
C1=CCC
となり、同じ内容ということになります。
①と②の形式が混在しないという条件なら、簡単に重複データの削除が可能ですが、混在する場合がありますか。
1つのファイル内に混在する場合は、もちろんですが、
ファイル1が①のタイプで、ファイル2が②のタイプの場合も混在する扱いとなります。
混在しない場合とは、
そのフォルダ内の全てのCSVファイルのデータ形式が①のケース
そのフォルダ内の全てのCSVファイルのデータ形式が②のケース
上記の何れかの場合です。
混在しないのなら、マクロの提供は可能です。
ありがとうございます。
残念ながら1つのファイル内で混在していました。
1行目のタイトル行は①ですが、2行目以降は全て下記となっています。
フォルダ内すべてのCSVファイルはこのデータ形式になっています。
"aaa",bbb,ccc,"ddd",eee,fff,ggg,hhh,iii,"jjj",kkk,lll,mmm,nnn,ooo,ppp,"qqq",rrr,sss,ttt,"uuu",vvv,www,"xxx","yyy","zzz","abab","acac",adad,"aeae"
No.1
- 回答日時:
はじめまして
エクセルでおっしゃられるような操作をマクロの記録でされればどうでしょう?
それが一番簡単だと思いますが…
ありがとうございます。
CSVファイルをマクロで開くところでつまずいています。
一番の問題はファイル数が決まっていないのでどうすれば良いのか分からず・・・
OpenFileName = Application.GetOpenFilename("CSVファイル,*.csv")
これでファイル選択してやろうと思ったのですが、CSVファイルがエクセルで開いてくれませんでした。
Workbooks.Open Filename:="***"
上記のようにファイル指定でも良いのですが、ファイルの数が決まっていないので悩んでいます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
表計算ソフトでの様式の呼称
-
vba テキストボックスとリフト...
-
エクセルのVBAで集計をしたい
-
【マクロ】数式を入力したい。...
-
【マクロ】実行時エラー '424':...
-
【マクロ】元データと同じお客...
-
【マクロ】左のブックと右のブ...
-
他のシートの検索
-
【画像あり】オートフィルター...
-
【マクロ】【配列】3つのシー...
-
Office2021のエクセルで米国株...
-
【マクロ】【相談】Excelブック...
-
エクセルでフィルターした値を...
-
【画像あり】【関数】指定した...
-
エクセルのリストについて
-
エクセルに写真が貼れない(フ...
-
エクセルのライセンスが分かり...
-
エクセルの複雑なシフト表から...
-
【関数】=EXACT(a1,b1) a1とb1...
-
エクセルシートの見出しの文字...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数のCSVファイルを横に並べて...
-
excelインポート時の「実行時エ...
-
「ほかのアプリケーションを無...
-
VBAでCSVの1行目だけを書き換え...
-
エクセルの指数を無効にしたい
-
複数のcsvファイルを1つのEXCEL...
-
EXCELにcsv形式の外部データを...
-
Excel2002のおせっかい機能につ...
-
複数個のascファイルを1つ...
-
Excel VBAを使った複数のCSVフ...
-
OUTLOOKのスケジュール...
-
Excelで複数の他のファイルから...
-
二つのCSVファイルを照らし合わ...
-
VB及びエクセルのVBAにて、
-
海外の印刷所を使って入稿する...
-
エクセル2003 CSVファイルの取...
-
エクセルのcsvで、12e3を入れる...
-
大量のCSVデータを1つのエ...
-
各ファイル中データの張付け操...
-
エクセルでcsvデータを自動読み...
おすすめ情報