質問です

\test\のホルダーにCSVファイルの元データがあります
\era\のホルダーに分割したCSVファイルを作るマクロをお願いします

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2012/03/14 13:37:32
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:oil999 No.1

回答回数1728ベストアンサー獲得回数320

ポイント100pt

以下のマクロをお試しください。

mainサブルーチンの引数は
1.分割前のCSVファイルのあるディレクトリ名
2.CVSファイルの拡張子
3.分割ファイルを保管するディレクトリ名
の3つで、任意に設定できます。

Option Explicit

'1ファイル処理
Sub convFile(path As String, fname As String, path2 As String)
    Dim buf As String, idx As String, fname2 As Variant
    Dim ix As Long
    Dim dc As Object
    
    Set dc = CreateObject("Scripting.Dictionary")
    'CSVファイル読み込み
    fname = path & fname
    Open fname For Input As #1
    Line Input #1, idx      '見出し行
    Do Until EOF(1)
        Line Input #1, buf
        ix = InStrRev(buf, ",")
        fname2 = Right(buf, Len(buf) - ix)
        buf = Left(buf, ix - 1)
        If (dc.Exists(fname2) = False) Then
            dc.Item(fname2) = buf
        Else
            dc.Item(fname2) = dc.Item(fname2) & vbCrLf & buf
        End If
    Loop
    Close #1
    'ファイル作成
    For Each fname2 In dc.Keys
        Open path2 & fname2 & ".csv" For Output As #2
        Print #2, idx
        Print #2, dc.Item(fname2)
        Close #2
    Next
End Sub

'ファイル探索+処理実行
Sub hogeConv(path As String, ext As String, path2 As String)
    Dim fcol As Object, re As Object
    Dim flist As Variant, remat As Variant
    Dim pat As String
    'サブディレクトリ探索(有効にしたい場合はコメントを消してください)
'    Set fcol = CreateObject("Scripting.FileSystemObject").GetFolder(path).SubFolders
'    For Each flist In fcol
'        Call hogeConv(path & flist.Name & "/", ext, path2)
'    Next flist
'    Set fcol = Nothing
    '処理対象ファイル探索+処理実行
    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 convFile(path, flist.name, path2)
        Next flist
    End With
    Set re = Nothing
    Set fcol = Nothing
End Sub

Sub main()
    Call hogeConv("C:/test/", "csv", "C:/era/")
End Sub


蛇足ながら、質問に
http://q.hatena.ne.jp/1331203744
の追加質問であることを明記された方がよろしいかと存じます。
他の回答者が回答しにくいだろうと思いますので。

id:inosisi4141

ありがとうございます
早速試してみます結果はまた報告させていただきます

2012/03/13 19:07:13
  • id:inosisi4141
    質問は下記質問内容のその追加質問です
    http://q.hatena.ne.jp/1331203744

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

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

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

回答リクエストを送信したユーザーはいません