VBA ブック保存(セーブ)も色々!別名保存やPW保存・強制上書など様々な方法を紹介!

この記事は約7分で読めます。

ブック保存サムネイル

誰かにExcelブック編集されないようパスワードを掛けたり、共有が目的なら読み取り推奨にしたり、マクロ有りのブック(xlsm)をマクロ無し(xlsx)のブックにする等のコードを紹介します。

使用頻度が少ないため正直忘れるので、使いたい時にサッと見れるようシーンに応じた保存コード一覧をまとめてみました!

スポンサーリンク

ブック保存に使うメソッド

まずは、保存に使う3つのメソッドを押さえておきましょう。

  • Save
    指定ブックに対して保存。
  • SaveAs:
    指定ブックに対して様々な保存方法を設定して保存。
  • SaveCopyAs:
    指定ブックのコピーを作成。
※注意※
この3つのメソッドは、起動しているブックにしか利用できません。
未起動のブックに対して実行した場合、「実行時エラー”9″:インデックスが有効範囲にありません。」となりますので、注意しましょう。
では、3つのメソッドをシーンに応じた使い方を確認してきましょう!

Save:シンプルにファイルを保存

Saveメソッドは指定したブックを保存することができます。

Saveメソッドで上書き保存

現在操作しているブックへの上書き保存で利用します。

ActiveWorkbook.Save ’操作しているブックを上書き保存

新規保存としても使えるが、使い勝手は微妙

新規保存で利用した場合、Book●.~.xlsxというブック名で自動で保存されます。ただ、ファイル名は目的に応じた名前を付けるでしょうから、新規保存で利用するケースは少ないでしょう。

SaveAs:様々な保存方法を指定して保存

SaveAsメソッドは様々な保存方法が可能です。

  • 新規保存や別名保存
  • 拡張子(xlsm⇒xlsx)変更して保存
  • パスワードを掛けて保存

構文

SaveAsメソッドは様々な設定ができるため引数が多いです。

book.SaveAs(FileName、 FileFormat、 Password、 WriteResPassword、 ReadOnlyRecommended、 createbackup、 accessmode、 ConflictResolution、 addtomru、 textcodepage、 TextVisualLayout、 Local)
各種引数の説明は公式ドキュメントを参照ください。では、よく使うシーン毎で確認していきましょう。

新規保存や別名保存

まずは基本的な使い方です。新規保存や既存ブックを別名で保存したい時は下記のように記述します。

ThisWorkbook.SaveAs ThisWorkbook.Path & "\copyBook.xlsm"

これは、現在操作しているブックと同じフォルダにcopyBook.xlsmという別名で保存しています。

強制上書き保存

保存する名前が既に存在していると、下図のように上書きしていいですか?と表示されます。

上書き警告

「OK」を手動で押すことで保存されますが、自動的に上書きして欲しいですよね。こういう時は、Application.DisplayAlertsを使えば、警告画面を表示させずに処理を実行できます。

Application.DisplayAlerts = False
ThisWorkbook.SaveAs ThisWorkbook.Path & "\copyBook"
Application.DisplayAlerts = True

拡張子を変更して保存

前述した基本を踏まえた上で、拡張子を変更する保存方法を紹介します。FileFormatで指定することで拡張子を変更でき、今回は2つの例をご紹介します。※FileFormatに記述するコードはこちらで確認できます。

xlsx ⇒ xlsへの変更コード

古いExcelでもファイルを開けるように、xlsxをxlsに変更して保存する場合などに利用します。

ThisWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\copyBook.xls", FileFormat:=xlWorkbookNormal

xlsm(マクロ有効ブック)⇒ xlsxコード

VBAコードを誤って実行されないようにxlsxに変更する等に利用します。

Application.DisplayAlerts = False
ThisWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\copyBook.xlsx", FileFormat:=xlWorkbookDefault
Application.DisplayAlerts = True
※補足※
xlsmをxlsxといった違うExcel形式に変換する際に、Application.DisplayAlerts = Falseを使用しなかった場合は下図が表示されます。
「はい」を選択することで保存されますが、手作業が発生するのはVBA化の意味が薄れるので、理由がなければApplication.DisplayAlerts = Falseの利用がおすすめです。

読み取り専用を推奨で保存

「ファイルを共有したいけど、編集してほしくない」

そんな時は、ブック開くときに「読み取り専用を推奨」で保存しておけば問題が解決します。「読み取り専用を推奨」する保存方法は、ReadOnlyRecommendedをTrueで指定します。

ThisWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\copyBook", ReadOnlyRecommended:=True

パスワード設定して保存

パスワード設定(パスワード保護)して保存する方法は下記の2種類あります。

  • ブックを開く時に必要なパスワード
  • ブックを編集・保存するときに必要なパスワード

ブックを展開時に必要なパスワードを設定

パスワードを知っている人だけ見れるようにしたい場合に利用します。パスワードを設定するには下記のように、Passwordにパスワードを指定することで可能となります。

ThisWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\copyBook", Password:="mmm"

上記コードが正しく実行されると、次回ブック起動時に下記画面が表示されます。

ブックを更新するときだけパスワードが必要

開くだけならPW要らないけど、編集するときはPW必要にしたい時に使います。

ThisWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\copyBook", WriteResPassword:="mmm"

上記、WriteResPasswordにPWを設定すれば、ブックを開くときに下図のような画面が表示されるようになります。

編集時PW用のブック

SaveCopyAs:コピーを作成

SaveCopyAsは指定ブックをコピーすることができます。

ThisWorkbook.SaveCopyAs ThisWorkbook.Path & "\copyBook.xlsm"

SaveAsとは違い、パスワード掛けたり、読み取り専用したり等はできません。

SaveAsとSaveCopyAsの使い分け

SaveAsと一緒かな~と思いがちですが、SaveAsは指定ファイルの別名保存、SaveCopyAsは複製(コピー)ですので、コード実行時にブックが置き換わるといったことは発生しません。

例えば、A.xlsmブックに対してSaveAsでB.xlsmに別名保存すると、ブックはB.xlsmに置き換わります。実際には、A.xlsmが閉じられてB.xlsmが開かれている状態になります。SaveCopyAsでは、ブック展開されることなくコピーされるだけになります。

 

スポンサーリンク

起動して(開いて)いないブックをコピーする方法

「起動していないブックをコピーしたい!」

保存とは違いますが、この悩みの解決方法もご紹介します。特定ブックをコピーしたい場合、上記で紹介したSaveCopyでは一度ブックを起動する必要があります。

CopyFileを使ってファイルをコピーするコード

Sub CopyBook()

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set wb = ThisWorkbook

copyFromName = "C:\Users\masay\VBA\個別\copyBook.xlsm"
copyToName = "C:\Users\masay\Desktop\copyBook.xlsm"

'ファイルコピー 
objFSO.copyFile copyFromName, copyToName

End Sub

FileSystemObjectのobjFSO.copyFileを使い、起動していないブックをコピーしています。

objFSO.copyFile コピー元, コピー先

コピーするExcelが重く起動に時間が掛かる時も使うと便利ですね。

まとめ

ブックを保存方法を色々お伝えしました!

  1. 単純に上書き保存ならSaveメソッド
  2. 別名保存や拡張子変更等々、色々設定して保存するならSaveAsメソッド
  3. コピーしたいならSaveCopyAsメソッド
  4. 起動していないブックをコピーするならcopyFileメソッド 

「あれどう書くんだっけ?」といった時にぜひご利用ください。

コメント