前回のサンプルを改良し、より安全にワークシートのデータを新規ワークブックへ値コピーするExcel VBAコードです。
シート全体のコピーペーストではなく、オブジェクトを明示的に変数へ格納し、値のみを選択してコピーすることで予期せぬエラーや不要な数式・書式の持ち越しを防ぎます。
前提条件
- 実行するExcelファイルが一度以上保存されており、
ThisWorkbook.Pathが取得できる状態であること。 - マクロ有効ブック(.xlsm)として保存されていること。
サンプルコード
Sub CopyToNWorkbook2()
Dim srcWb As Workbook
Dim dstWb As Workbook
Dim srcWs As Worksheet
Dim dstWs As Worksheet
Dim srcR As Range
Dim dstR As Range
' アラート抑制
Application.DisplayAlerts = False
' コピー元(実行中のシート)の設定と範囲指定
Set srcWb = ThisWorkbook
Set srcWs = ActiveSheet ' または Me
Set srcR = srcWs.Range("A:G") ' 必要に応じてコピー範囲を変更
' 新規ワークブックを作成し、値として貼り付け
Set dstWb = Workbooks.Add
Set dstWs = dstWb.Worksheets(1)
Set dstR = dstWs.Range("A1")
srcR.Copy
dstR.PasteSpecial xlPasteValues
Application.CutCopyMode = False
' シート名をコピー元と同じに変更
dstWs.Name = srcWs.Name
' 新規ワークブックで自動作成される不要なシートを削除
Dim ws As Worksheet
For Each ws In dstWb.Sheets
If ws.Name <> dstWs.Name Then
ws.Delete
End If
Next ws
' コピーした新規ワークブックを名前を付けて保存
dstWb.SaveAs ThisWorkbook.Path & "\test_" & srcWs.Name & ".xlsx"
' 後処理
dstWb.Close SaveChanges:=False
Application.DisplayAlerts = True
MsgBox "保存が完了しました。", vbInformation
End Sub
コードのポイント
- 値のみのコピー:
PasteSpecial xlPasteValuesを利用することで、元のセルに含まれる数式や条件付き書式を除外し、値のみを安全に新しいブックへ移行できます。 - シート名の一致: 新規作成したブックの1枚目のシート名を、コピー元シート名に変更しています。
- 保存先: 実行中のマクロファイルと同じフォルダに
test_シート名.xlsxという名前で保存されます。
この記事の更新履歴
この記事は、生成AIを活用した自動レビュー・更新フローにより内容を見直し、必要な修正を反映しています。
2026年9月12日
- 変更blockquoteタグによるコード表記を、見やすいMarkdownのコードブロックに変更しました。
- 追加マクロの前提条件、実行手順、およびエラー防止のための解説を追加しました。

