[[20210909165158]] 『csvを結合するマクロで1つ目以外の1行目を消しax(レッドル) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『csvを結合するマクロで1つ目以外の1行目を消したい』(レッドル)

初めまして。VBAで行き詰ってしまったので質問させてください。

同じフォルダにまとめた複数のcsvを1つに結合させるマクロを作りました。

Sub csv結合()

Dim name As String

name = ThisWorkbook.Path

Range("B3").Value = name

 wpath = Range("B3")
 wfile = Dir(wpath & "\")
 flag = 0
 Do While wfile <> ""
If InStr(wfile, ".csv") Then
flag = flag + 1
If flag = 1 Then
FileCopy wpath & "\" & wfile, ThisWorkbook.Path & "\結合.csv"
Open ThisWorkbook.Path & "\output.csv" For Output As #1
Close #1
End If
Open ThisWorkbook.Path & "\output.csv" For Append As #1
Open wpath & "\" & wfile For Input As #2
Do Until EOF(2)
Line Input #2, w_str
Print #1, w_str
Loop
Close #2
Close #1
End If
wfile = Dir()
 Loop

 MsgBox "結合完了", vbInformation

 End Sub

しかし、結合するすべてのCSVには1行目に項目行があり、このままだとcsvをシステムで読み込む際、不具合が生じてしまいます。
ですので、結合した最初のcsv以外の1行目を削除して結合したいのですが、どこにどんな式を付け加えたらよいでしょうか。
教えてくただけると助かります。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


すみません、式が間違っていました。

Sub csv結合()

Dim name As String

name = ThisWorkbook.Path

Range("B3").Value = name

 wpath = Range("B3")
 wfile = Dir(wpath & "\")
 flag = 0
 Do While wfile <> ""
If InStr(wfile, ".csv") Then
flag = flag + 1
If flag = 1 Then
FileCopy wpath & "\" & wfile, ThisWorkbook.Path & "\結合.csv"
Open ThisWorkbook.Path & "\結合.csv" For Output As #1
Close #1
End If
Open ThisWorkbook.Path & "\結合.csv" For Append As #1
Open wpath & "\" & wfile For Input As #2
Do Until EOF(2)
Line Input #2, w_str
Print #1, w_str
Loop
Close #2
Close #1
End If
wfile = Dir()
 Loop

 MsgBox "結合完了", vbInformation

 End Sub

でお願いします。
(レッドル) 2021/09/09(木) 17:13


読み込むcsvファイルを開いたあと、
書き込みのループに入る前に、
1行読みこめばいいです(この行は書き込まない)。
(ひまつぶし) 2021/09/09(木) 17:47

>>ひまつぶし様
最初の1行だけ読み込むとは具体的にどのような式を使えば良いでしょうか?
(レッドル) 2021/09/09(木) 21:02

これで。
Line Input #2, w_str

(ひまつぶし) 2021/09/09(木) 21:03


>>ひまつぶし様

試してみたところ、結合csvから全ての項目行が消えてしまいました。
1行目だけは残して途中行の項目行(2ファイル目以降のcsvの1行目)を
消したいのですが、私の式の位置がおかしいのでしょうか?
(レッドル) 2021/09/09(木) 21:14


いや、そのようになります。
1回目を除外するのは、できますよね。

(ひまつぶし) 2021/09/09(木) 21:23


>>ひまつぶし様

申し訳ありません。理解力が足らず上手く行きません。
もう少し詳しく説明いただけませんでしょうか。
(レッドル) 2021/09/10(金) 11:06


横からですが別案として。
せっかくエクセルVBA使うならシート上に【インポート】してから【CSV形式で保存】するというアプローチも検討してみてはどうでしょうか?
    Sub 別案()
        Dim ファイル名 As String
        Dim dstRNG As Range
        Dim 読込行 As Long

        With Worksheets.Add
            読込行 = 1
            Set dstRNG = .Range("A1")

            ファイル名 = Dir(ThisWorkbook.Path & "\*.csv")
            Do Until ファイル名 = ""
                With .QueryTables.Add(Connection:="TEXT;" & ThisWorkbook.Path & "\" & ファイル名, Destination:=dstRNG)
                    .TextFileCommaDelimiter = True      ' カンマ区切り
                    .TextFileStartRow = 読込行          'データの読込開始行をセット
                    .Refresh                            ' データを表示
                    .Delete                             ' CSV との接続を解除
                End With

                読込行 = 2
                Set dstRNG = .Cells(.Rows.Count, "A").End(xlUp).Offset(1)

                ファイル名 = Dir()
            Loop

            .Move
        End With

        With Workbooks(Workbooks.Count)
            .SaveAs Filename:=ThisWorkbook.Path & "\結合.csv", FileFormat:=xlCSVUTF8
            .Close
        End With
    End Sub

(もこな2) 2021/09/10(金) 11:40


>>もこな2様
ご教授ありがとうございます。
インポートの知識があまりなかったので、いただいた式をそのまま使用させていただいたのですが、
作成された結合csv内の日付部分の年と月日が順序が逆転し、

2021/9/10 だと 9/10/2021

といった風になってしまいました。
この原因は何故なのでしょうか。お教えいただけると助かります。
(レッドル) 2021/09/10(金) 12:07


>インポートの知識があまりなかったので
では、「QueryTables.Add」の「TextFileColumnDataTypesプロパティ」について調べてみるとよいでしょう。
https://www.tipsfound.com/vba/18014

(もこな2) 2021/09/10(金) 12:19


例えば、こんな感じ。
 If flag <> 1 Then Line Input #2, w_str 

 14:00 誤字修正
(ひまつぶし) 2021/09/10(金) 12:22

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.