ExcelマクロでSaveAsを使ってxlsx・xlsm・csv・PDFに保存する方法

VBAでファイルを保存するときは、SaveAs にファイルの種類(形式)を指定します。よく使う形式は4つで、それぞれ使いどころが違います。

  • .xlsx:普通のExcelファイル(マクロなし)
  • .xlsm:マクロ付きのExcelファイル
  • .csv:データだけを保存するファイル
  • .pdf:見た目そのままで配布するファイル

この記事では、それぞれの保存方法をコードと一緒に解説します。

ファイルの種類によって何が違う?

保存形式によって、できることとできないことが変わります。目的に合わせて選びましょう。

  • .xlsx:普通のExcelファイル。マクロは保存されない。
  • .xlsm:マクロ付きのExcelファイル。マクロを残したまま保存できる。
  • .csv:データだけを保存するファイル。罫線・背景色・フィルターなどは保存されない。他のシステムへのデータの受け渡しに使われることが多い。
  • .pdf:見た目をそのまま保存するファイル。編集はできないが、提出や印刷に向いている。

xlsx形式で保存するには?

マクロなしの普通のExcelファイルとして保存したい場合は、FileFormat:=xlOpenXMLWorkbook を指定します。

Sub SaveAsXlsx()

    Dim FilePath As String

    ' 今表示しているシートをコピーして新しいファイルにする
    ActiveSheet.Copy

    ' 保存先とファイル名を決める
    FilePath = "C:¥Users¥YourUserName¥Documents¥新しいブック.xlsx"

    ' 確認ポップアップを出さずに保存する
    Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs FileName:=FilePath, FileFormat:=xlOpenXMLWorkbook
    Application.DisplayAlerts = True

    ' 保存が終わったら閉じる
    ActiveWorkbook.Close

End Sub

DisplayAlertsとは?

Application.DisplayAlerts = False は「保存しますか?」などの確認ポップアップを自動でOKにする設定です。マクロが動いている途中にポップアップが出ると手動で操作が必要になるため、この設定を入れておきます。処理が終わったら必ず True に戻してください。

xlsm形式で保存するには?

マクロを残したまま保存したい場合は、FileFormat:=xlOpenXMLWorkbookMacroEnabled を指定します。拡張子も .xlsm にします。

Sub SaveAsXlsm()

    Dim FilePath As String

    ActiveSheet.Copy

    FilePath = "C:¥Users¥YourUserName¥Documents¥新しいブック.xlsm"

    Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs FileName:=FilePath, FileFormat:=xlOpenXMLWorkbookMacroEnabled
    Application.DisplayAlerts = True

    ActiveWorkbook.Close

End Sub

csv形式で保存するには?

データだけをテキスト形式で保存したい場合は、FileFormat:=xlCSV を指定します。書式や罫線は保存されないので注意してください。

Sub SaveAsCSV()

    Dim FilePath As String

    FilePath = "C:¥Users¥YourUserName¥Documents¥新しいファイル.csv"

    Application.DisplayAlerts = False
    ActiveSheet.SaveAs FileName:=FilePath, FileFormat:=xlCSV
    Application.DisplayAlerts = True

End Sub

pdf形式で保存するには?

見た目そのままで保存したい場合は、ExportAsFixedFormat を使います。PDFはSaveAsではなくExport(書き出し)という考え方なので、書き方が少し変わります。

Sub SaveAsPDF()

    Dim FilePath As String

    FilePath = "C:¥Users¥YourUserName¥Documents¥新しいファイル.pdf"

    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=FilePath

End Sub

PDFの書き出しでは確認ポップアップが出ないため、DisplayAlerts の設定は不要です。

まとめ

保存形式は目的に合わせて選びましょう。コードの変える部分は FileFormat と拡張子の2か所だけです。

  • xlsxFileFormat:=xlOpenXMLWorkbook 普通のExcelファイルとして保存。
  • xlsmFileFormat:=xlOpenXMLWorkbookMacroEnabled マクロを残して保存。
  • csvFileFormat:=xlCSV データだけを保存。書式は消える。
  • pdfExportAsFixedFormat Type:=xlTypePDF 見た目そのままで書き出し。

よくある質問

xlsxで保存したらマクロが消えてしまった。どうすればいい?

xlsx形式はマクロを保存できない仕様です。マクロを残したまま保存したい場合は、xlsm形式を使いましょう。保存する前に「このファイルにはマクロが含まれています」という警告が出ることがありますが、xlsmで保存すれば問題ありません。

保存先のフォルダが存在しない場合はエラーになる?

はい、エラーになります。指定したフォルダがあらかじめ存在している必要があります。コードの中でフォルダがなければ自動で作る処理を追加することもできますが、まずは保存先のフォルダを手動で作っておくのが手軽です。

csvで保存すると文字化けする場合は?

日本語を含むcsvファイルを他のソフトで開くと文字化けすることがあります。これは文字コードの違いが原因です。xlCSV の代わりに xlCSVUTF8 を指定するとUTF-8形式で保存でき、文字化けしにくくなります。ただしExcel2016以降が必要です。

ファイル名に今日の日付を自動で入れたい場合は?

FilePath を作る部分に Format(Date, "yyyymmdd") を組み合わせます。例:FilePath = "C:¥...¥データ_" & Format(Date, "yyyymmdd") & ".xlsx" とすると「データ_20250901.xlsx」のようなファイル名で保存されます。

特定のシートだけPDFに保存したい場合は?

ActiveSheet の部分をシート名で指定します。例:Sheets("請求書").ExportAsFixedFormat Type:=xlTypePDF, Filename:=FilePath とすると「請求書」シートだけをPDFに書き出せます。


動画で学びたい方へ

「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。

VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。

動画で学ぶExcelマクロ|JIMOVEオンラインスクール

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール