0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VBA学習備忘録_06_SaveAsメソッドに関する諸注意

0
Last updated at Posted at 2026-02-22

の続き(なお、Excelのマクロに限る)

主な参考資料①にSaveAsメソッドについて(ベーシック受験者向けということもあり)ざっくり書いてあったけど、絶対パスによる使い方しかなく実用的ではないなと感じたので、ちょっと調べた時の備忘録


そもそも・・・SaveAsメソッドの基本的な使い方に関する諸注意

(1)保存ファイル名は SaveAsの後の引数の中にパスとして書く

詳細
Sub 絶対パスで名前をつけて保存する例1()
    Workbooks("Book2").SaveAs "C:\Users\各ユーザー名\Desktop\hogehoge.xlsx"
    '各ユーザー名は個人のPCに依ります
End Sub

ベテランの方からすると、たぶんしょうもないレベルだが、

まず、そもそもこのマクロで保存した際にデスクトップにできるExcelファイルは「Book2」ではなく、「hogehoge.xlsx」である。

少しくどいが整理すると以下のようになる。
Save「As」という名前だから言われてみたらまあそうなんだが・・

Sub 絶対パスで名前をつけて保存する例2()
    Workbooks("エクセルファイル新規作成毎に上に連番で自動表示されるブック名").SaveAs "ブックを保存するディレクトリのパス\保存ファイル名.xlsx"
End Sub

なお、Excelを最初に開いたときは「Book1」のため、新規エクセルファイルを1つ開いた状態でVBEに冒頭の「絶対パスで名前をつけて保存する例1」のプロシージャを書いて実行すると、「Book2」のところが引っかかって以下のようにエラーになる

エラーの様子

SaveAs1.png

(2)マクロ有効ブック(.xlsm)として既に保存されているファイルにおいて、SaveAsを使われている場合、引数も.xlsmにしないと高い確率でエラーになる

詳細

要するに

Sub エラー例()
    Workbooks("Book1.xlsm").SaveAs "ブックを保存するディレクトリのパス\hogehoge.xlsx"
                                                                               '▲
End Sub

だと、保存されてできるhogehogeファイルが(親に当たるマクロ有効ファイルに対して)マクロ有効ファイルでないからエラーになる。実際に試してもらうと以下のようなメッセージが出る

image.png

なので以下のように繰り返しの使用を考えるなら、最後の拡張子は「.xlsm」にした方がおそらく安全

Sub 絶対パスで名前をつけて保存する例2()
    Workbooks("Book1.xlsm").SaveAs "ブックを保存するディレクトリのパス\hogehoge.xlsm"
                                                                               '▲
End Sub

(3)マクロ有効ブック(.xlsm)をマクロが有効なままコピーして保存する(バックアップ)には、SaveAsではなく、SaveCopyAsを使うらしい。

以下のマクロを標準モジュールに入れて実行すると、コピーはされるがマクロは保持されていない

Sub マクロ有効ブックをマクロなしでコピー()

    ThisWorkbook.Sheets.Copy   '全シートコピー → 新規ブック作成

    ActiveWorkbook.SaveAs _
        "ブックを保存するディレクトリのパス\hogehoge2.xlsm", _
        FileFormat:=xlOpenXMLWorkbookMacroEnabled

End Sub

そのため、マクロを有効にしたままコピーしたい場合

Sub コピー保存()

    ThisWorkbook.SaveCopyAs _
        "ブックを保存するディレクトリのパス\hogehoge2.xlsm"

End Sub

(4)雛形.xlsm に入れる生成マクロ例の雛形をチャッピーに作ってもらった

Sub 作業用ファイル生成()

    Dim 保存先 As String
    Dim 新ファイル名 As String
    
    '保存フォルダとして生成マクロがあるブックのあるフォルダの直下のworkフォルダ
    保存先 = ThisWorkbook.Path & "\work\"
    
    'ファイル名(日時付き)
    新ファイル名 = "作業用_" & _
        Format(Now, "yyyymmdd_hhnnss") & ".xlsm"
    
    '雛形を丸ごとコピー
    ThisWorkbook.SaveCopyAs 保存先 & 新ファイル名
    
    '生成したブックを開く
    'Workbooks.Open 保存先 & 新ファイル名

End Sub

主な参考資料

①この1冊で合格! 永井雅明のExcel VBA ベーシック テキスト&問題集

Amazonリンク

https://www.amazon.co.jp/%E3%81%93%E3%81%AE1%E5%86%8A%E3%81%A7%E5%90%88%E6%A0%BC-%E6%B0%B8%E4%BA%95%E9%9B%85%E6%98%8E%E3%81%AEExcel-VBA-%E3%83%99%E3%83%BC%E3%82%B7%E3%83%83%E3%82%AF-%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88/dp/4046071524?tag=googhydr-22&source=dsa&hvcampaign=books&gad_source=1

②Microsoft公式 Workbook.SaveAs メソッド
https://learn.microsoft.com/ja-jp/office/vba/api/excel.workbook.saveas

③Microsoft公式 Workbooksオブジェクト
https://learn.microsoft.com/ja-jp/office/vba/api/excel.workbooks

③現在のExcelファイルを基準に相対パスで指定したファイルを開く @ShineYamamoto(M Yamamoto)さん Qiita
https://qiita.com/ShineYamamoto/items/1e6545b47e5f27d5fbfc

④VBA カレントディレクトリと相対パスの書き方 Tipsfoundさん著
https://www.tipsfound.com/vba/18028-vba

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?