シートを個別ファイルに出力するマクロ

シートを個別ファイルに出力するマクロ

1つのブックに請求書シートをたくさん作っていた方から、ファイルが重くなり使いづらいから1つずつのブックに分けたいという相談を受けました。

1つずつ手作業だと大変なのでマクロを作ることにしました。

今回はシート名を会社名にしているファイルを想定しています。

Sub sheets_save()
 For Each sheet_book In Worksheets
 If sheet_book.Name <> "macro" Then
  sheet_book.Copy
  ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & sheet_book.Name
  ActiveWorkbook.Close
 End If
 Next sheet_book
End Sub

上の場合はシート名=会社名にしていてもファイルの中身を見ないといつのものかわからないので請求書内の日付をファイル名に追加することにしました。

Sub sheets_save()
 For Each sheet_book In Worksheets
 If sheet_book.Name <> "macro" Then
  sheet_book.Copy
  year_str = Mid(sheet_book.Range("a2"), 1, 4)
  month_str = Mid(sheet_book.Range("a2"), 6, 2)
  day_str = Mid(sheet_book.Range("a2"), 9, 2)
  date_str = year_str & month_str & day_str & "-"
  

  ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & date_str & sheet_book.Name
  ActiveWorkbook.Close
 End If
 Next sheet_book
End Sub

これでファイル名が「yyyymmdd-シート名」になりました。

エクセルのA2に日付が入っていたのですが、はじめにこれをそのまま

ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & sheet_book.Range("a2") & sheet_book.Name

とすると、「/」が入っている関係だと思うんですが、エラーが発生しました。

もしかすると日付を「/」ではなく「-」に変換してくれるformatがあるかもしれませんが、単純にmid()で文字数でとることにしました。

year_str = Mid(sheet_book.Range("a2"), 1, 4)
month_str = Mid(sheet_book.Range("a2"), 6, 2)
day_str = Mid(sheet_book.Range("a2"), 9, 2)

「/」がはいらないように取りたい文字の開始位置に注意しましょう。

これで手作業だとかなり手間な作業をマクロで数秒で出力することが出来ました。

エクセルマクロカテゴリの最新記事