2個目のマクロは
『同じフォルダ内にあるCSVファイルを使用範囲をそのままコピペして統合するマクロ』
を作成しました。
今回はできるだけオブジェクト思考なコードになるよう、意識しました。
(前回はまずは最後まで動くマクロを作りたかったので、煩雑なコードになってしまいました・・・)
Sub test002()
'フォルダを選択
Dim folderPath As Variant
With Application.FileDialog(msoFileDialogFolderPicker)
.Show
folderPath = .SelectedItems(1)
End With
'Dir関数でCSVファイル名を取得
Dim buf As String
buf = Dir(folderPath & "\" & "*.csv")
'貼り付け元の「請求統合.xlsx」ファイルの作成
Dim bath As Workbook
Set bath = Workbooks.Add
bath.SaveAs fileName:=folderPath & "\請求統合.xlsx", _
FileFormat:=xlOpenXMLWorkbook
'「請求統合.xlsx」の最初のシート
Dim tougouWs As Worksheet
Set tougouWs = bath.Worksheets(1)
'ループ開始・CSVファイルの名前が空白になったら(取得できなかったら)ループから外れる
Do While buf <> ""
'「請求統合.xlsx」の最終行を取得
With tougouWs
Dim lastLine As Long
lastLine = .Cells(Rows.Count, 1).End(xlUp).Row
End With
'CSVファイルの最初のシートを取得
Dim wb As Workbook
Set wb = Workbooks.Open(folderPath & "\" & buf)
Dim ws As Worksheet
Set ws = wb.Worksheets(1)
'CSVファイルの使用範囲を「UsedRange」で指定してコピー
ws.UsedRange.Copy
'もし「請求統合.xlsx」最終行が一行目だったら、A1を指定し貼り付け
'そうではなかったら、A列の最終行の次のセルを指定し貼り付け
If lastLine = 1 Then
With tougouWs
.Activate
.Cells(lastLine, 1).Activate
End With
ActiveSheet.Paste
Else
With tougouWs
.Activate
.Cells(lastLine + 1, 1).Activate
End With
ActiveSheet.Paste
End If
'CSVファイルを保存せずに閉じる
wb.Application.CutCopyMode = False
wb.Saved = True
wb.Close
'次のCSVファイルを指定する
buf = Dir()
Loop
'「請求統合.xlsx」を保存して閉じる
bath.Save
bath.Close
End Sub
これで、一応統合されたデータはできます・・・が、実際は
このようなデータなので、統合範囲をもう少し調整が必要です。
それは次回にしたいと思います。