難易度:★☆☆☆☆
使用するもの:Worksheet.CopyWorkbook.SaveAsThisWorkbook.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 で
✅ シートを別ブックに保存するには .Copy → SaveAs の流れ
✅ 日付を自動でつけるには Format(Date, "yyyymmdd") が便利
✅ 上書き保存は ThisWorkbook.Save の1行でOK
どれもシンプルなコードですが、組み合わせることで実務の効率がぐっと上がります。
まずはコピペして動かしてみるところから始めてみてください!
随時更新していきますので、是非これからも当ブログをよろしくお願いします。

コメント