こんにちは!ぐーです。
いつもブログをご覧いただき、ありがとうございます!
今回は、これからVBAを学び始める方や、「業務効率化」の指示にプレッシャーを感じている方へ向けた内容です。
正直なところ、プログラミングに対して「怖い」というイメージはありませんか?
- 「コードを実行した瞬間、大切な顧客リストを消してしまったらどうしよう……」
- 「元に戻せない変更を加えて、取り返しのつかないことになったら……」
そんな想像が頭をよぎり、実行ボタンを押すのをためらってしまう。 かくいう私も、かつては共有フォルダのExcelを操作するたびに、心拍数がバクバク上がっていました。
ですが、そんな不安を抱える方にこそ知ってほしい、「絶対に元のデータを壊さない」VBAの作法があります。
それが、「新規ブックを別途作成(Add)して操作する」という手法です。
なぜ「新規ブック(Add)」が安全なのか?
「既存のファイルをごちゃごちゃ触って、壊すのが怖い」
この悩みを解決するのが、Workbooks.Add です。
具体的なイメージで考えてみましょう。 あなたの手元には、決して汚してはいけない「大切な原本(マスタデータ)」があります。
そこに直接筆を入れるのではなく、まずは「真っ白な画用紙(新規ブック)」を机に広げ、必要なデータだけを書き写して(コピーして)作業を進めるのです。
これなら、計算を間違えたり、万が一コードが暴走したりしても、その画用紙をクシャッと丸めて捨てる(保存せずに閉じる)だけで済みます。原本は、一切無傷です。
そのまま使える!安全な転記コード例
ここでは、実務で頻出する「現在のシートを新しいブックにコピーし、今日の日付を付けて保存する」というパターンを紹介します。
Sub CopyToNewBook()
' 画面のチラつきを抑える(高速化)
Application.ScreenUpdating = False
Dim orgSheet As Worksheet
Dim newBook As Workbook
Dim savePath As String
' 1. 今開いているシートを「原本」としてセット
Set orgSheet = ThisWorkbook.ActiveSheet
' 2. 新しいブックを作成(これがAddメソッド)
Set newBook = Workbooks.Add
' 3. 原本のデータを新しいブックの1枚目のシートにコピー
orgSheet.UsedRange.Copy
newBook.Sheets(1).Range("A1").PasteSpecial Paste:=xlPasteValues
' 見た目を整える(列幅の自動調整)
newBook.Sheets(1).Columns.AutoFit
' 4. 名前を付けて保存(デスクトップに保存する例)
savePath = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\"
' 既に同名のファイルがある場合のエラー回避は省略していますが、まずは「別名で保存」します
newBook.SaveAs Filename:=savePath & "抽出データ_" & Format(Date, "yyyymmdd") & ".xlsx"
' コピーモード解除と更新の再開
Application.CutCopyMode = False
Application.ScreenUpdating = True
MsgBox "新しいブックにデータを移して、デスクトップに保存しました!", vbInformation, "完了"
End Sub
解説:ここがポイント!
このコードのポイントは Set newBook = Workbooks.Add です。
Addメソッドによって、メモリ上に新しいブックを生成し、操作の対象(オブジェクト)として確保します。 以降の「貼り付け」や「保存」といった全ての操作は、この「新しいブック」に対して実行されます。
元のファイルに対しては、「データを見る(参照する)」ことしかしていません。
物理的にファイルを分けているので、コードを書き換えても元のデータが壊れる心配はない、というわけです。
最後に
どんな仕事であっても、「絶対にミスは許されない」というプレッシャーはつきまとうものですよね。
しかし、この「新規ブックにデータを逃がす」という一工夫を知っているだけで、心のゆとりをつくることができます。
まずはこのコードをコピーして、練習用のExcelファイルで試してみてください。
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

コメント