【Excel VBA】シートのコピーとファイル保存を自動化する方法|実務でよく使うマクロ集

難易度:★☆☆☆☆
使用するものWorksheet.Copy Workbook.SaveAs ThisWorkbook.Save

Excelで毎月同じシートを手作業で複製していませんか?
また作業が終わるたびに手動でファイルを保存・別名保存していませんか?

その作業、VBAを使えば一瞬で終わります。

今回は実務でよく登場する以下の3パターンを紹介します。

  • ✅ シートを同じブック内でコピーする
  • ✅ シートを別ブックとして切り出して保存する
  • ✅ 日付つきのファイル名で自動保存する

コードはすべてコピペして使えるものなので、ぜひ試してみてください!



シートをコピーするとは?【基本の考え方】

VBAでシートをコピーするには Worksheet.Copy を使います。

ActiveSheet.Copy After:=Sheets(Sheets.Count)

これは「アクティブなシートを、一番最後のシートの後ろにコピーする」という意味です。

たとえば「1月のシートを複製して2月用のベースにしたい」という場面でよく使います。


基本のシートコピーコード

🔹 同じブック内にコピーする(末尾に追加)

Sub シートをコピーする()

    ' アクティブなシートを一番右に複製
    ActiveSheet.Copy After:=Sheets(Sheets.Count)

End Sub

結果:現在開いているシートが一番右側に「シート名 (2)」として複製されます。

引数意味
After:=Sheets(Sheets.Count)一番最後のシートの後ろに追加
Before:=Sheets(1)一番最初のシートの前に追加

🔹 コピーしたシートに名前をつける

コピーしただけでは「Sheet1 (2)」のような自動名になります。
名前も一緒に変更したい場合はこちら。

Sub シートをコピーして名前をつける()

    Dim newSheet As Worksheet

    ' コピーして変数に代入
    ActiveSheet.Copy After:=Sheets(Sheets.Count)
    Set newSheet = Sheets(Sheets.Count)

    ' シート名を変更
    newSheet.Name = "2月"

End Sub

✅ 「2月」の部分を変えるだけで、任意の名前が付けられます。

セルの値をシート名にしたい場合は、こう書き換えるだけです。

    ' A1セルの値をシート名にする例
    newSheet.Name = ActiveSheet.Range("A1").Value

シートを別ブックとして保存するマクロ

「このシートだけを別ファイルとして誰かに渡したい」というケース、よくありますよね。
VBAならシートをそのまま新しいブックに切り出して保存できます。

Sub シートを別ブックで保存する()

    Dim savePath As String
    Dim newBook As Workbook

    ' 保存先のパスを指定(フォルダは環境に合わせて変更してください)
    savePath = "C:\Users\ユーザー名\Desktop\シートのコピー.xlsx"

    ' アクティブシートを新しいブックとしてコピー
    ActiveSheet.Copy
    Set newBook = ActiveWorkbook

    ' 上書き確認を非表示にして保存・閉じる
    Application.DisplayAlerts = False
    newBook.SaveAs Filename:=savePath, FileFormat:=xlOpenXMLWorkbook
    newBook.Close
    Application.DisplayAlerts = True

    MsgBox "保存が完了しました!"

End Sub

🔍 コードのポイント解説

コード意味
ActiveSheet.Copy引数なしでコピーすると新しいブックとして開く
ActiveWorkbookコピーして開いたブックを変数に代入
DisplayAlerts = False「上書きしますか?」ダイアログを非表示にする
xlOpenXMLWorkbook.xlsx 形式で保存する指定

⚠️ DisplayAlerts = False にしたら、処理の最後で必ず True に戻しておきましょう。
戻し忘れると、その後の確認ダイアログが全部スキップされてしまいます。


📅 日付を自動でファイル名につけて保存するマクロ

バックアップや日次報告書など、「今日の日付をファイル名に入れたい」ことはよくあります。
毎回手入力するのは手間なので、VBAで自動化してしまいましょう。

Sub 日付つきで保存する()

    Dim savePath As String
    Dim todayStr As String

    ' 今日の日付を「20250430」形式で取得
    todayStr = Format(Date, "yyyymmdd")

    ' 保存先パスを作成(フォルダは変更してください)
    savePath = "C:\Users\ユーザー名\Desktop\作業記録_" & todayStr & ".xlsx"

    ' 現在のブックを別名保存
    Application.DisplayAlerts = False
    ThisWorkbook.SaveAs Filename:=savePath, FileFormat:=xlOpenXMLWorkbook
    Application.DisplayAlerts = True

    MsgBox savePath & " に保存しました!"

End Sub

✅ 実行すると 「作業記録_20250430.xlsx」 のようなファイルが自動で作られます。

日付の書式は Format関数 で自由に変えられます。

書式の指定出力例
"yyyymmdd"20250430
"yyyy-mm-dd"2025-04-30
"yyyy年mm月dd日"2025年04月30日

上書き保存するマクロ

シンプルですが、処理の最後に自動で上書き保存されるようにしておくと「保存し忘れ」を防げます。

Sub 上書き保存する()

    ThisWorkbook.Save
    MsgBox "上書き保存しました!"

End Sub

他のマクロの末尾に ThisWorkbook.Save を1行追加するだけで、
「マクロ実行 → 処理完了 → 自動保存」 の流れができあがります。


💡 こんな応用も可能

今回紹介したコードを組み合わせると、こんな実務活用ができます。

  • 月次レポートを複製 → 月名をつけて → 日付つきで自動保存
  • 作業完了後にシートを別ファイルに切り出して共有フォルダへ保存
  • 毎朝マクロを実行するだけでバックアップが完成

今後の記事では「保存先をダイアログで選ばせる方法」「特定フォルダへの自動振り分け」なども紹介予定です。
しばらくお待ちください!


まとめ

シートのコピーは ActiveSheet.Copy After:=Sheets(Sheets.Count) が基本
コピーしたシートへの名前付けは Sheets(Sheets.Count).Name
シートを別ブックに保存するには .CopySaveAs の流れ
日付を自動でつけるには Format(Date, "yyyymmdd") が便利
上書き保存は ThisWorkbook.Save の1行でOK

どれもシンプルなコードですが、組み合わせることで実務の効率がぐっと上がります。
まずはコピペして動かしてみるところから始めてみてください!

随時更新していきますので、是非これからも当ブログをよろしくお願いします。

コメント

タイトルとURLをコピーしました