Excelで該当のCSVファイルを開くとE列の箇所に、漢字(名前)が表示されてます。

※空白のセルはありません
このようなCSVファイルを、このE列の漢字によってファイルを分割したい
と考えています。例えば
E列が斎藤であるCSVファイル(ファイル名:斎藤.csv)
E列が内藤であるCSVファイル(ファイル名:内藤.csv)
※可能であれば分割日付が名前の前につくファイル名がつけたい。

1つのCSVファイルが最大で複数分割させたいです。

できるだけ簡易に分割できる方法をご教授頂ければ幸いです。
どうぞよろしくお願い致します。

※A列からDJ列までデータが入っております。
※ExcelのVBAを用いた方法でお願い致します。(Excel2007、2003)

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/03/11 10:15:47
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:taknt No.1

回答回数13539ベストアンサー獲得回数1198

ポイント100pt
Sub main()
Dim p As String
Dim f As String


p = "C:\test\"      '対象フォルダを指定してください。
f = "a.csv"         '対象ファイルを指定してください。

Call jikkou(p, f)

End Sub


Sub jikkou(p As String, f As String)

    dt = Format(Now(), "yyyyMMdd")
     
    ch1 = FreeFile
    Open p & f For Input As #ch1
 
    Do While Not EOF(ch1)           'ファイルの終端かどうかを確認します
        Line Input #ch1, textline  'データ行を読み込みます
               
        f = 0
        g = 0
        h = ""
        For e = 1 To Len(textline)
            If Mid(textline, e, 1) <> "," And g = 4 Then
                h = h & Mid(textline, e, 1)
            End If
            If Mid(textline, e, 1) = """" And f = 0 Then
                f = 1
            End If
            If Mid(textline, e, 1) = """" And f = 1 Then
                f = 0
            End If
            If Mid(textline, e, 1) = "," And f = 0 Then
                g = g + 1
                If g >= 5 Then Exit For
            End If
        Next e
        
            
        ch2 = FreeFile
        Open p & dt & h & ".csv" For Append As #ch2
            Print #ch2, textline       'データの書き込みをします
        Close #ch2
    
    Loop
    Close #ch1
 
End Sub


起動するときは、以下の設定をしてから実行してください。
p = "C:\test\"      '対象フォルダを指定してください。
f = "a.csv"         '対象ファイルを指定してください。
id:qlist

早速ご回答いただきして有難うございます!
試してみたのですが、「ファイル名または番号が不正です」と表示されとまってしまい、
デバッグというのを押すと以下のところが黄色くなっておりました。 
Open p & dt & h & ".csv" For Append As #ch2
何か考えられる原因ございますでしょうか。
フォルダやファイル名は同じに場所にしております。

以上よろしくお願い致します。

2013/03/09 16:41:23
id:taknt

Open p & dt & h & ".csv" For Append As #ch2
の前に
Debug.Print p & dt & h
Debug.Print textline
を追加して 実行してください。

それでエラーが出た直前のイミディエイトに出力された最後の2行を 教えてください。

2013/03/09 17:07:16

コメントはまだありません

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

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

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

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