![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?a65a0e2)
csvファイル数は700~1000個程度でひとつのフォルダに格納されています。
このファイルをEXCEL形式で開くと、1行目にフィールド名(A~Z列で固定)、2行目以降にデータが入っています。行数はファイルにより1~100行程度で変動します。
このファイルを1つのエクセルファイルの同一シートに結合(マージ)するVBAがほしいです。
ここで、(できればですが)EXCELにマージするにあたり、1行目のみフィールドの値、2行目以降にそれぞれのcsvの2行目以降データの値を入れていくようにしたいです。つまり、フィールド名の行が何行も出てくるのを避けたいです。
申し訳ございませんが、ご指導いただけたら幸いです。よろしくお願いします。
No.2ベストアンサー
- 回答日時:
しばらく前に書いた事があるコードです。
参考になるようだったら応用してみてください。
'---------------------------------------------------------------------
Private Sub try()
Dim ws As Worksheet
Dim fd As String
Dim fn As String
Dim ret As String
Dim i As Long
Dim n As Long
Dim x As Long
Dim s As Long
fd = ThisWorkbook.Path & "\"
'fd = FDSELECT 'フォルダ選択の場合
If Len(fd) = 0& Then Exit Sub
Application.ScreenUpdating = False
'ActiveWorkbookにシートを追加して処理
Set ws = Sheets.Add
On Error GoTo errHndler
fn = Dir(fd & "*.csv")
x = 1
s = 1
Do Until Len(fn) = 0&
i = i + 1
'データCountにより次のセット先変更
n = n + x
'外部データ取り込み
x = CSVQRY(ws, fd & fn, ws.Cells(n, 2), s)
If x < 0 Then
Err.Raise Number:=1000, Description:="CSV読み込みに失敗"
ElseIf (n + x) >= Rows.Count Then
'行数overしてもエラーかからないため取り込み直し
ws.Rows(n).Resize(x).Delete
Set ws = Sheets.Add
n = 1
x = CSVQRY(ws, fd & fn, ws.Cells(n, 2), 1&)
End If
'ファイル名をA列にセット
ws.Cells(n, 1).Resize(x).Value = fn
s = 2
fn = Dir()
Loop
If i > 0 Then
ret = i & "files.done"
Else
ret = "no file"
End If
errHndler:
If Err.Number <> 0 Then
ret = Err.Number & vbTab & Err.Description
Debug.Print ret
End If
Application.ScreenUpdating = True
MsgBox ret
Set ws = Nothing
End Sub
'---------------------------------------------------------------------
Private Function CSVQRY(ByRef ws As Worksheet, _
ByRef fs As String, _
ByRef rs As Range, _
ByVal sr As Long) As Long
Dim cnt As Long
On Error GoTo errChk
With ws.QueryTables.Add(Connection:="TEXT;" & fs, _
Destination:=rs)
.AdjustColumnWidth = False
.TextFilePlatform = xlWindows
.TextFileStartRow = sr
.TextFileCommaDelimiter = True
.Refresh False
cnt = .ResultRange.Rows.Count
.Parent.Names(.Name).Delete
.Delete
End With
CSVQRY = cnt
Exit Function
errChk:
CSVQRY = -1
End Function
'---------------------------------------------------------------------
Private Function FDSELECT() As String 'フォルダ選択Function
Dim obj As Object
Dim ret As String
Set obj = CreateObject("Shell.Application") _
.BrowseForFolder(0, "SelectFolder", 0)
If obj Is Nothing Then Exit Function
On Error Resume Next
ret = obj.self.Path & "\"
If Err.Number <> 0 Then
ret = obj.Items.Item.Path & "\"
Err.Clear
End If
On Error GoTo 0
Set obj = Nothing
FDSELECT = ret
End Function
end-uさん
ありがとうございます!まさにこんなツールがほしいと思ってました!しかもA列にファイル名が追加されるのは、データの出所がわかるのでさらに便利ですね!早速活用させていただきます!
本当にありがとうございました。
これにて質問を締め切らせていただきます。
No.1
- 回答日時:
自動化するならVBAを利用することになるでしょう。
基本的な考え方としては、csvをテキストファイルで1行ずつ読み込み、2行目以降をシートにコピーしてゆくということになるのかな?
(もちろん最初のファイルのみ、1行目も処理する)
処理が1行単位なので、カンマの処理さえできれば、あとはなんとかなるでしょう。
ただし、ファイル数1000、データの行数100とすると最大で100,000行くらいになるかも知れないので、1シートには納まらない可能性があります。
記入対象の行を監視して、シートの最大行を超えるなら、新しいシートに記入するなどの制御をしておいたほうがよさそうですね。
以下を組み合わせれば、概ねのところはできるかと。
1)フォルダ内の各ファイルを処理する方法は以下を参照
http://homepage2.nifty.com/kasayan/vba/dir.htm
2)ファイルの読込み(テキストファイル)の基本はこちら
http://officetanaka.net/excel/vba/file/file08.htm
3)csvの読み込みについてはこちら
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub0 …
各データ(セルに記入するデータ)内にカンマ(,)を含んでいる可能性がある場合は、その処理がちょいと面倒かも。
fujillinさん
ありがとうございます!ご紹介いただいたもわかりやすいですね。これを一人で作れるかは不安ですが、参考にさせていただきます!
> 基本的な考え方としては、csvをテキストファイルで1行ずつ読み込み、2> 行目以降をシートにコピーしてゆくということになるのかな?
> (もちろん最初のファイルのみ、1行目も処理する)
おっしゃる通りです。
トータルのデータでEXCELの行数で何とか間に合いそうですが、やはり大きなデータになるので処理速度を考えると、ACCESSなどに一度インポートして、そのデータをEXCELで加工したほうが良さそうですかね。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAで特定の場所にあるCSVファイル(複数)から特定場所を抜き出してExcelに転記したいです。 11 2023/05/23 16:29
- Visual Basic(VBA) 複数ファイルのデータの統合について 12 2022/05/14 12:03
- その他(プログラミング・Web制作) Pythonで、データファイルと列名ファイルを1つのファイルにしたいです。 1 2023/07/27 20:29
- Visual Basic(VBA) マクロを教えてください。 7 2023/06/01 19:47
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) 複数ブックの統合について Excel VBA 1 2022/05/13 09:48
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
このQ&Aを見た人はこんなQ&Aも見ています
-
好きな人を振り向かせるためにしたこと
大好きな人と会話のきっかけを少しでも作りたい、意識してもらいたい…! 振り向かせるためにどんなことをしたことがありますか?
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
最強の防寒、あったか術を教えてください!
とっても寒がりなのですが、冬に皆さんがされている最強の防寒、あったか術が知りたいです!
-
AIツールの活用方法を教えて
みなさんは普段どのような場面でAIツール(ChatGPTなど)を活用していますか?
-
一番好きなみそ汁の具材は?
みんなで大好きなみそ汁の具材について語り合おうよっ!
-
複数のCSVファイルを横に並べてひとつのエクセルファイルへ結合する方法
Excel(エクセル)
-
複数のcsvファイルを統合、でもファイル名情報は含んでもらいたい・・・
フリーソフト
-
【VBA初心者】同じフォルダ内のcsvファイルを1つのシートに縦に並べる
Excel(エクセル)
-
-
4
VBA:Openステートメントで開いたCSVファイルの特定行を削除する方法
その他(プログラミング・Web制作)
-
5
Excel VBAを使った複数のCSVファイルの読み込みについて教えてください。
Excel(エクセル)
-
6
複数のcsvファイルをフォルダごと指定して列方向に結合するマクロを作成したい
Visual Basic(VBA)
-
7
複数csvを横に追加していくマクロについて
Visual Basic(VBA)
-
8
複数のcsvをVBAでマージする方法をご教示ください!
Visual Basic(VBA)
-
9
CSVファイルの指定列だけを読み込んでEXCELに表示したい
Excel(エクセル)
-
10
CSVファイルの項目行を削除して結合するには?
その他(プログラミング・Web制作)
-
11
【ExcelVBA】300万件越えCSVから条件を満たす行だけ抽出するには?
Visual Basic(VBA)
-
12
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
13
Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード
Excel(エクセル)
-
14
エクセル2016でfilter関数がないので、、抜き出す関数をおしえてください。
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数のCSVファイルを横に並べて...
-
VBAでCSVの1行目だけを書き換え...
-
エクセルの指数を無効にしたい
-
excelインポート時の「実行時エ...
-
CSVファイルの結合(重複データ...
-
Excel VBAを使った複数のCSVフ...
-
複数個のascファイルを1つ...
-
「ほかのアプリケーションを無...
-
海外の印刷所を使って入稿する...
-
EXCELにcsv形式の外部データを...
-
複数のcsvファイルを1つのEXCEL...
-
ExcelVBAで今開いているユーザ...
-
昨日まで動いていたエクセルの...
-
複数のデータ系列の線の太さを...
-
VBAを一度起動するとずっと出て...
-
マクロを消すマクロは不可能?
-
Excelマクロ ファイル名が変わ...
-
フォルダ内の全ブックのシート...
-
Excelが勝手にシート移動してし...
-
VBA マクロ実行時エラー’1004Ra...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの指数を無効にしたい
-
複数のCSVファイルを横に並べて...
-
VBAでCSVの1行目だけを書き換え...
-
excelインポート時の「実行時エ...
-
「ほかのアプリケーションを無...
-
複数のcsvファイルを1つのEXCEL...
-
EXCELにcsv形式の外部データを...
-
CSVファイルの結合(重複データ...
-
二つのCSVファイルを照らし合わ...
-
Excel VBAを使った複数のCSVフ...
-
大量のCSVデータを1つのエ...
-
複数個のascファイルを1つ...
-
【VBA初心者】同じフォルダ内の...
-
複数のCSVファイルからのデータ...
-
【エクセル VBA】CSVファイルの...
-
エクセルのcsvで、12e3を入れる...
-
VBAでユーザーフォーム上に参照...
-
CSVファイルがうまく開けない
-
Accessにエクセルからデータを...
-
エクセルでcsvデータを自動読み...
おすすめ情報