【Excelマクロ】保存方法の指定

シートの指定と拡張子の取り扱い

VBAを使って業務の自動化を進める中で、特定のブックやシートを別のファイルとして保存することは実務であると思います。

このときに重要になるのが、保存するときのファイルの種類(拡張子)を正しく指定することです。

拡張子といっても、普段はあまり意識したことがないかもしません。ただ、さまざまなファイル形式を扱うためには知っておいた方がいい知識なので、ぜひいくつか覚えていきましょう。

拡張子には 「xlsx」、「xlsm」、「csv」、「pdf」 などがあり、使い方や特徴が違います。それぞれの形式の意味と保存のしかた見ていきましょう。

ファイルの種類とその違い

Excelから保存できる形式としては、Excel自体として保存する方法や、他との互換性を考えたcsvファイル、さらには書き換えられたくない場合にはPDFファイルにするなど、この4つで保存することがよくあります。

それぞれの特徴は次のとおりです。

  • xlsx:普通のExcelファイル。マクロは保存されない。
  • xlsm:マクロ付きのExcelファイル。マクロが保存できる。
  • csv:データだけを保存するファイル。データだけと記載があるように文字だけしか情報が保存されず、罫線や、背景色、文字色、フィルタなどの機能は保存されない。
  • .pdf:印刷用のファイル。見た目をそのまま保存できるが、データの編集はできない。

xlsx形式で保存する方法

「マクロがない普通のExcelファイル」として保存したいときに使います。

Sub save_xlsx()

    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

このコードでは、ファイルパスが長くなるため、「FilePath」という変数に入れています。もちろん、変数を使わなくても、動作をさせることができますが、今回の保存方法であるSaveAsの中にある「FileName」の引数にはファイルパスが必要なため、ここにコードを書くと長くなってしまうことから、あえて変数に入れています。

また、「Application.DisplayAlerts」については、ファイルを保存するときには「保存しますか?」のようなメッセージが出ますが、これを無視するために入れます。

無視しないと、マクロが動作している最中に、マウスでメッセージ時に対し、「はい」を押す必要が出てくるため、せっかくマクロで自動化しているのに、その部分だけ手動になるためです。

「False」で指定をすることによって、強制的にメッセージを無視するので、指定した内容で保存してくれるということです。

メッセージ自体を強制的に停止してしまうものなので、今後、他のメッセージも出なくなるのは困るので、作業が終わったら「True」で戻しておきます。

xlsm、csv形式での保存

同様にxlsm形式で保存名(FileName)を「xlsx」→「xlsm」や、形式(FileFormat)をx「lOpenXMLWorkbookMacroEnabled」に変えれば保存されます。

xlsm形式での保存

Sub SaveSheetAsXlsm()
    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形式での保存

Sub SaveSheetAsCSV()
    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 形式で保存する方法

見た目そのままで印刷用に保存したいときに使います。

Sub SaveSheetAsPDF()
    Dim FilePath As String

    ' 保存先とファイル名を決める
    FilePath = "C:\Users\YourUserName\Documents\新しいファイル.pdf"

    ' PDFとして保存する
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=FilePath
End Sub

PDFに保存する場合には、保存しますか、というのが出ないというのもそうですが、出力方法が変わります。

保存というよりかはPDF形式でエクスポート(Export)する、という考え方になるため、先ほどのまでのものと少し書き方が異なっています。

ファイル形式の違いや特徴のまとめ

ファイル形式使いどころマクロ含められる?特徴
.xlsx普通のExcelファイル×通常の保存形式。マクロなし。
.xlsmマクロ保存が必要なときマクロ機能を残して保存できる。
.csvデータだけを軽く保存したいとき×軽い。ただし、文字だけ。
.pdf見た目そのままで配布したいとき×編集不可。提出や印刷に向いている。

まとめ

よく迷いやすい「ファイルの保存形式」について、VBAでどう指定するかをご説明しました。

使いたい目的に合わせてファイル形式を選び、適切なコードを書いていきましょう。

コメント