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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Excel(エクセル) エクセルでcsvファイルを開いてVBAを使いたい 7 2022/04/28 11:12
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
- Visual Basic(VBA) 複数ファイルのデータの統合について 12 2022/05/14 12:03
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- Excel(エクセル) フォルダ内の全ブックのシート名を変更したい 7 2022/09/22 21:34
- その他(プログラミング・Web制作) Pythonで、データファイルと列名ファイルを1つのファイルにしたいです。 1 2023/07/27 20:29
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 3 2023/02/28 01:13
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
CSVファイルの重複チェック
その他(プログラミング・Web制作)
-
csvファイルの1カラム目に重複行があればその行全体を削除するには?
その他(OS)
-
CSVファイルの項目行を削除して結合するには?
その他(プログラミング・Web制作)
-
-
4
CSVファイルの特定行の削除
Visual Basic(VBA)
-
5
txtファイルから特定の文字列が書かれた行だけを取得や削除するソフト
フリーソフト
-
6
二つのCSVファイルを照らし合わせて重複しているデータの横列に数字の1を入力していきたい。
Excel(エクセル)
-
7
マクロでファイルを読み込み、重複行を削除したい。
Visual Basic(VBA)
-
8
別ファイルから重複するデータを探したい【エクセル】
Excel(エクセル)
-
9
CSVの項目行を削除して一つのファイルに結合する
その他(プログラミング・Web制作)
-
10
Excel VBAを使った複数のCSVファイルの読み込みについて教えてください。
Excel(エクセル)
-
11
i=cells(Rows.Count, 1)とi=cells(Rows.Count, 2)の違い
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの指数を無効にしたい
-
datファイル→csvファイル→datフ...
-
VBAでユーザーフォーム上に参照...
-
複数個のascファイルを1つ...
-
複数のCSVファイルを横に並べて...
-
excelインポート時の「実行時エ...
-
「ほかのアプリケーションを無...
-
二つのCSVファイルを照らし合わ...
-
大量のCSVデータを1つのエ...
-
エクセル終了時の保存確認メッ...
-
コピーしたファイルのマクロを...
-
複数のデータ系列の線の太さを...
-
エクセルマクロにてパワーポイ...
-
エクセルの単票を一覧表に
-
別のパソコンでエクセルのマク...
-
cellsで特定の離れた範囲を選択...
-
excelファイルに使われているVB...
-
VBAに詳しい方教えてください。
-
マクロを消すマクロは不可能?
-
エクセルでツールバーに「縮小...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数のCSVファイルを横に並べて...
-
エクセルの指数を無効にしたい
-
excelインポート時の「実行時エ...
-
VBAでCSVの1行目だけを書き換え...
-
大量のCSVデータを1つのエ...
-
EXCELにcsv形式の外部データを...
-
CSVファイルの結合(重複データ...
-
Excel VBAを使った複数のCSVフ...
-
複数のcsvファイルを1つのEXCEL...
-
「ほかのアプリケーションを無...
-
二つのCSVファイルを照らし合わ...
-
EXCELLの動きが遅い
-
同じ形のCSVファイルを複数同時...
-
datファイル→csvファイル→datフ...
-
【VBA初心者】同じフォルダ内の...
-
VBAでユーザーフォーム上に参照...
-
複数個のascファイルを1つ...
-
【エクセル VBA】CSVファイルの...
-
破損したExcelファイルの内容を...
-
エクセルファイルのコンペア
おすすめ情報