【VBA】保存形式を指定して保存(xlsm、xlsx、pdfなど)

Excel VBAの SaveAs メソッドや ExportAsFixedFormat メソッドを使うことで、ブックを 指定した形式(.xlsx、.xlsm、.pdfなど) で保存することが可能です。


1. Excel形式を指定して保存(.xlsx / .xlsm)

.xlsx(マクロなし)で保存

Sub SaveAsXLSX()
ActiveWorkbook.SaveAs _
Filename:=ThisWorkbook.Path & "\Report.xlsx", _
FileFormat:=xlOpenXMLWorkbook 'xlsx
End Sub

解説:

  • ActiveWorkbook … 現在アクティブなブック
  • Filename … 保存するパスとファイル名を指定
  • FileFormat:=xlOpenXMLWorkbook … Excel標準形式(.xlsx)として保存

.xlsm(マクロ有効)で保存

Sub SaveAsXLSM()
ActiveWorkbook.SaveAs _
Filename:=ThisWorkbook.Path & "\Report.xlsm", _
FileFormat:=xlOpenXMLWorkbookMacroEnabled 'xlsm
End Sub

解説:

  • FileFormat:=xlOpenXMLWorkbookMacroEnabled を指定すると、マクロを保持したまま保存可能

2. PDFとして保存

Sub SaveAsPDF()
ActiveSheet.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=ThisWorkbook.Path & "\Report.pdf", _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False
End Sub

引数の詳細:

  • Type:=xlTypePDF … PDF形式で保存
  • Filename … 保存先とファイル名(フルパス)を指定
  • Quality:=xlQualityStandard … 標準品質(xlQualityMinimumを指定するとファイルサイズ優先の低品質)
  • IncludeDocProperties:=True … ドキュメントプロパティ(作成者やタイトル情報)を含める
  • IgnorePrintAreas:=False … 印刷範囲を無視しない(Trueにすると設定済みの印刷範囲を無視して全体を出力)
  • OpenAfterPublish:=False … 保存後にPDFを自動で開かない(Trueで自動表示)

3. 上書き警告を非表示にして保存

Sub SaveAsNoAlert()
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs _
Filename:=ThisWorkbook.Path & "\Report.xlsx", _
FileFormat:=xlOpenXMLWorkbook
Application.DisplayAlerts = True
End Sub

解説:

  • Application.DisplayAlerts = False … 上書き確認ダイアログを非表示にする。
  • 誤上書きを防ぐため、必要なときだけ有効にすることが望ましい。

4. 主なFileFormat定数一覧

定数拡張子内容
xlOpenXMLWorkbook.xlsxマクロなしブック
xlOpenXMLWorkbookMacroEnabled.xlsmマクロ有効ブック
xlExcel8.xlsExcel97-2003形式

5. まとめ

  • SaveAs の FileFormat 引数で形式を指定可能(.xlsx / .xlsm)
  • PDF保存は ExportAsFixedFormat を使用し、引数で品質や出力範囲を制御可能
  • DisplayAlerts の制御で上書き確認を自動化可能

コメント

タイトルとURLをコピーしました