質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

2回答

323閲覧

CSVファイル結合のVBAで、前回の読み込んだデータが残ったままになってしまう

退会済みユーザー

退会済みユーザー

総合スコア0

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

1グッド

0クリップ

投稿2025/05/16 01:50

実現したいこと

合体データフォルダ内の
1.csv
2.csv
3.csv
4.csv
の4つのファイルを結合して
同じ合体データフォルダ内に
新しいcsvで出力するというこーどを書きたい

発生している問題・分からないこと

今起きている事象としては

【問題①】
◾︎一回目
1-4のcsvファイルを読み込み、出力できた
◾︎二回目
合体データフォルダ内の1-4のデータは削除し、翌日新しい1-4のデータを入れ実行した所、削除したはずの前日のデータで出力された

読み込むcsvフォルダ名が1.2.3.4のまま読み込む必要があり、変更が出来ないので(こちらの事情で)、どこかでパスのリセットを行う必要があるのかと思いましたが、
何回やっても同じファイルができあがるので
わかる方にアドバイスを頂きたいです。

【問題②】
・合体データフォルダ内に出力したいのですが
1つ上のフォルダに出力されてしまいます。こちらも何度がコードを加えてみたのですが上手くいかず。
アドバイスを頂きたいです。

該当のソースコード

VBA

1以下コードです 2(リセットするコードは一旦抜いています) 3 4Sub csv合体() 5 Dim folderPath As String 6 Dim fso As Object 7 Dim file As Object 8 Dim textLine As String 9 Dim outputFileName As String 10 Dim outputFile As Integer 11 Dim inputFile As Integer 12 Dim firstFile As Boolean 13 14 ' フォルダのパスを指定 15 folderPath = "C:\temp\合体データ" 16 17 ' 出力ファイル名(指定の名前で保存) 18 outputFileName = folderPath & ".csv" 19 20 ' ファイルシステムオブジェクトを作成 21 Set fso = CreateObject("Scripting.FileSystemObject") 22 23 ' 出力ファイルを作成 24 outputFile = FreeFile 25 Open outputFileName For Output As #outputFile 26 27 firstFile = True 28 29 ' フォルダ内のCSVファイルを処理 30 For Each file In fso.GetFolder(folderPath).Files 31 If Right(file.Name, 4) = ".csv" Then 32 inputFile = FreeFile 33 Open file.Path For Input As #inputFile 34 35 ' 最初のファイルのヘッダーを含める 36 If firstFile Then 37 firstFile = False 38 Else 39 ' 2つ目以降はヘッダーをスキップ 40 Line Input #inputFile, textLine 41 End If 42 43 ' 各行を出力ファイルに書き込む 44 Do While Not EOF(inputFile) 45 Line Input #inputFile, textLine 46 Print #outputFile, textLine 47 Loop 48 49 Close #inputFile 50 End If 51 Next file 52 53 Close #outputFile 54 55 MsgBox "CSVファイルの結合が完了しました!", vbInformation 56End Sub

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

chatGptにて3つほどコードを追加提案されましたが上手くいかず。

補足

特になし

hatena19👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TakaiY

2025/05/16 05:20

> outputFileName = folderPath & ".csv" 上記の処理の結果 outputFileName は 「C:\temp\合体データ.csv」になりますが、これが「1つ上のフォルダに出力されてしまいます」の原因ではありませんか? どのようなファイル名で出力したいのでしょうか。 For Each の後に、file.nameを表示するなどするとどのような結果が出ますか? ちなみに、 合体データフォルダに結果ファイルも入れておくとすると、2回目以降にその合体したデータも読んでしまうことになりますが、どのように対応するつもりでしょうか。
meg_

2025/05/16 06:09 編集

> 読み込むcsvフォルダ名が1.2.3.4のまま読み込む必要があり フォルダですか? フォルダなのか、ファイルなのか?読みたいファイルが対象になっているか?余分なものが対象になっていないか?等確認されていますか? ファイル名が固定という意味ならばPowerQueryを使っても良いのではないでしょうか?
tatsu99

2025/05/16 06:53 編集

>何回やっても同じファイルができあがるので >わかる方にアドバイスを頂きたいです。 こちらで、提示されたマクロを実行してみました。 1.csv 2.csv 3.csv 4.csvの内容を変えて実行すると、変えた内容が合体データ.csvに反映されます。 従って、正しく動作しています。本当にcsvファイルの内容が変えられているか、再度確認してはいかがでしょうか。 あなたが更新したCSVファイルの格納ホルダと実際に読み込むCSVファイルの格納フォルダが違っているような気がします。
bsdfan

2025/05/16 07:19

> 合体データフォルダ内の 1.csv 2.csv 3.csv 4.csv の4つのファイルを結合して同じ合体データフォルダ内に新しいcsvで出力する とのことですが、質問のコードだと、合体データフォルダ(C:\temp\合体データ)内のファイルを結合して、ひとつ上のフォルダに新しいcsv(C:\temp\合体データ.csv)で出力するという動作になっています。
退会済みユーザー

退会済みユーザー

2025/05/17 05:45

@TakaiY 1つ上のフォルダーに作成されてしまう原因が分かりました。ありがとうございます。の結果、ファイルは毎回実行前に削除する予定です。 @tasu99 格納時に謝っている可能性があるので、再度確認いたします。 @bsdfan 上でもご指摘あったとおり、やはりその箇所が原因なのですね。確認します。ありがとうございます。
guest

回答2

0

bat

1copy 1.csv+2.csv+3.csv+4.csv all.csv

をrunしてやればよいのでは?
ただしファイルの文末に改行マークは入ってない場合は工夫が必要

投稿2025/05/16 03:24

編集2025/05/16 03:25
yambejp

総合スコア117719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tamoto

2025/05/16 03:42

質問を読む限りでは、csv の各ファイルがヘッダ行を持つのを取り除く処理が必要そうに見えます。
guest

0

ベストアンサー

現行の方法では、フォルダ「c:\temp\合体データ」 内の全てのCSVファイルを読み込んでいます。
従って、合体したデータをフォルダ「c:\temp\合体データ」内に出力すると、2回目以降、その
合体したデータも、CSVファイルとして読み込んでしまいます。

今回は、読み込むべきCSVファイルは、1.csv 2.csv 3.csv 4.csv の4つと決まっているので、
そのファイルのみを決め打ちで読み込むようにします。
そうすれば、合体したデータを読み込まなくなるので、
合体したデータをフォルダ「c:\temp\合体データ」内に出力しても問題ありません。
以下のようにしてしてください。
合体したデータをフォルダ「c:\temp\合体データ」内に出力し、
1.csv 2.csv 3.csv 4.csv の4つのみを読み込むようにしています。

VBA

1Sub csv合体() 2 Dim folderPath As String 3 Dim inputFileNames As Variant 4 Dim inputFileName As String 5 Dim textLine As String 6 Dim outputFileName As String 7 Dim outputFile As Integer 8 Dim inputFile As Integer 9 Dim firstFile As Boolean 10 Dim i As Long 11 ' フォルダのパスを指定 12 folderPath = "C:\temp\合体データ" 13 14 ' 出力ファイル名(指定の名前で保存) 15 outputFileName = folderPath & "\" & "合体データ.csv" 16 17 ' 出力ファイルを作成 18 outputFile = FreeFile 19 Open outputFileName For Output As #outputFile 20 21 firstFile = True 22 inputFileNames = Array("1.csv", "2.csv", "3.csv", "4.csv") 23 ' フォルダ内のCSVファイルを処理 24 For i = 0 To UBound(inputFileNames) 25 inputFile = FreeFile 26 inputFileName = folderPath & "\" & inputFileNames(i) 27 Open inputFileName For Input As #inputFile 28 29 ' 最初のファイルのヘッダーを含める 30 If firstFile Then 31 firstFile = False 32 Else 33 ' 2つ目以降はヘッダーをスキップ 34 Line Input #inputFile, textLine 35 End If 36 37 ' 各行を出力ファイルに書き込む 38 Do While Not EOF(inputFile) 39 Line Input #inputFile, textLine 40 Print #outputFile, textLine 41 Loop 42 43 Close #inputFile 44 Next i 45 46 Close #outputFile 47 MsgBox "CSVファイルの結合が完了しました!", vbInformation 48End Sub 49

投稿2025/05/17 03:26

tatsu99

総合スコア5540

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問