質問です

c:\test\のホルダーに複数のCSVファイルがあります
このファイルを1つの新しいファイル(データを統合する)に
まとめるマクロをお願いします
新しいファイル名はファイルの数にしたいのですが10個あれば
01-10.csv
のようにできればおねがいします
できなければtestでもかまいません
各ファイルのデータは1行目からです列はAからSまであります
c:\test\の中にtxt、BAKの拡張子が付いたファイルもありますが無視
してください。あくまでCSVファイルのみです。

よろしくおねがいします

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2012/11/22 11:36:35
  • 終了:2012/11/23 17:22:37
id:inosisi4141

ファイルの件数は最高で99件です
01-99

ベストアンサー

id:oil999 No.1

oil999回答回数1728ベストアンサー獲得回数3202012/11/22 22:27:36

ポイント100pt

こんな感じでどうでしょう。
"C:\test\" にあるCSVファイルのみを連結して、"C:\test\test.csv" に出力します。
ターゲットのフォルダ、拡張子、出力先ファイル名は、マクロの最後の Call hogeCoupling の引数を変更することで対応できます。

Option Explicit

'1ファイル処理
Sub appendFile(path As String, fname As String, outfname As String)
    Dim buf As String, idx As String
    Dim fname2 As String, fname3 As String
    Dim x As Long
    
    'CSVファイル読み込み&書き込み
    fname2 = path & fname
    Open fname2 For Input As #1
    Open outfname For Append As #2
    Do Until EOF(1)
        Line Input #1, buf
        Print #2, buf
    Loop
    Close #2
    Close #1
End Sub

'ファイル探索+処理実行
Sub hogeCoupling(path As String, ext As String, outfname As String)
    Dim fcol As Object, re As Object
    Dim flist As Variant, remat As Variant
    Dim pat As String, fname As String
    Dim n As Long
    
    '処理対象ファイル探索+処理実行
    Set fcol = CreateObject("Scripting.FileSystemObject").GetFolder(path).Files
    Set re = CreateObject("VBScript.RegExp")
    pat = "\." & ext & "$"
    With re
        .Pattern = pat
        .IgnoreCase = True
        .Global = True
        For Each flist In fcol
            Set remat = .Execute(flist.name)
            If remat.Count > 0 Then
                Call appendFile(path, flist.name, outfname)
            End If
        Next flist
    End With
    Set re = Nothing
    Set fcol = Nothing
End Sub

Sub main()
    Call hogeCoupling("C:/test/", "csv", "C:/test/test.csv")
End Sub

id:inosisi4141

ありがとうございます
大変よくできています

ターゲットのフォルダ、拡張子、出力先ファイル名は、マクロの最後の Call hogeCoupling の引数を変更することで対応できます。

があったので同じフォルダーの保存先CSVにできないのでどうしようかと思ってましたありがとうございました

2012/11/23 17:22:24

その他の回答(0件)

id:oil999 No.1

oil999回答回数1728ベストアンサー獲得回数3202012/11/22 22:27:36ここでベストアンサー

ポイント100pt

こんな感じでどうでしょう。
"C:\test\" にあるCSVファイルのみを連結して、"C:\test\test.csv" に出力します。
ターゲットのフォルダ、拡張子、出力先ファイル名は、マクロの最後の Call hogeCoupling の引数を変更することで対応できます。

Option Explicit

'1ファイル処理
Sub appendFile(path As String, fname As String, outfname As String)
    Dim buf As String, idx As String
    Dim fname2 As String, fname3 As String
    Dim x As Long
    
    'CSVファイル読み込み&書き込み
    fname2 = path & fname
    Open fname2 For Input As #1
    Open outfname For Append As #2
    Do Until EOF(1)
        Line Input #1, buf
        Print #2, buf
    Loop
    Close #2
    Close #1
End Sub

'ファイル探索+処理実行
Sub hogeCoupling(path As String, ext As String, outfname As String)
    Dim fcol As Object, re As Object
    Dim flist As Variant, remat As Variant
    Dim pat As String, fname As String
    Dim n As Long
    
    '処理対象ファイル探索+処理実行
    Set fcol = CreateObject("Scripting.FileSystemObject").GetFolder(path).Files
    Set re = CreateObject("VBScript.RegExp")
    pat = "\." & ext & "$"
    With re
        .Pattern = pat
        .IgnoreCase = True
        .Global = True
        For Each flist In fcol
            Set remat = .Execute(flist.name)
            If remat.Count > 0 Then
                Call appendFile(path, flist.name, outfname)
            End If
        Next flist
    End With
    Set re = Nothing
    Set fcol = Nothing
End Sub

Sub main()
    Call hogeCoupling("C:/test/", "csv", "C:/test/test.csv")
End Sub

id:inosisi4141

ありがとうございます
大変よくできています

ターゲットのフォルダ、拡張子、出力先ファイル名は、マクロの最後の Call hogeCoupling の引数を変更することで対応できます。

があったので同じフォルダーの保存先CSVにできないのでどうしようかと思ってましたありがとうございました

2012/11/23 17:22:24
  • id:ku__ra__ge
    マクロを組まなくてもコマンドプロンプトで
    copy c:\test\*.csv c:\test\01-10.csv
    と打つことで出来ると思います。
  • id:inosisi4141
    ありがとうございます
    参考にさせていただきます
    他のマクロと連携したいものですから

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません