実現したいこと
合体データフォルダ内の
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つほどコードを追加提案されましたが上手くいかず。
補足
特になし
> outputFileName = folderPath & ".csv"
上記の処理の結果 outputFileName は 「C:\temp\合体データ.csv」になりますが、これが「1つ上のフォルダに出力されてしまいます」の原因ではありませんか? どのようなファイル名で出力したいのでしょうか。
For Each の後に、file.nameを表示するなどするとどのような結果が出ますか?
ちなみに、 合体データフォルダに結果ファイルも入れておくとすると、2回目以降にその合体したデータも読んでしまうことになりますが、どのように対応するつもりでしょうか。
> 読み込むcsvフォルダ名が1.2.3.4のまま読み込む必要があり
フォルダですか?
フォルダなのか、ファイルなのか?読みたいファイルが対象になっているか?余分なものが対象になっていないか?等確認されていますか?
ファイル名が固定という意味ならばPowerQueryを使っても良いのではないでしょうか?
>何回やっても同じファイルができあがるので
>わかる方にアドバイスを頂きたいです。
こちらで、提示されたマクロを実行してみました。
1.csv 2.csv 3.csv 4.csvの内容を変えて実行すると、変えた内容が合体データ.csvに反映されます。
従って、正しく動作しています。本当にcsvファイルの内容が変えられているか、再度確認してはいかがでしょうか。
あなたが更新したCSVファイルの格納ホルダと実際に読み込むCSVファイルの格納フォルダが違っているような気がします。
> 合体データフォルダ内の 1.csv 2.csv 3.csv 4.csv の4つのファイルを結合して同じ合体データフォルダ内に新しいcsvで出力する
とのことですが、質問のコードだと、合体データフォルダ(C:\temp\合体データ)内のファイルを結合して、ひとつ上のフォルダに新しいcsv(C:\temp\合体データ.csv)で出力するという動作になっています。
@TakaiY
1つ上のフォルダーに作成されてしまう原因が分かりました。ありがとうございます。の結果、ファイルは毎回実行前に削除する予定です。
@tasu99
格納時に謝っている可能性があるので、再度確認いたします。
@bsdfan
上でもご指摘あったとおり、やはりその箇所が原因なのですね。確認します。ありがとうございます。
回答2件
あなたの回答
tips
プレビュー