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?

Excelマクロ入門 PDFで保存するマクロを作成

0
Last updated at Posted at 2026-02-11

Excelマクロ入門

マクロの記録からのマクロ作成

Excelマクロ入門として、簡単なマクロの記録からマクロを作成していく手順を追っていく。

作成するマクロ

ExcelファイルをPDFで保存するマクロを作成することにする。

Excelファイルを準備

複数シートが1つをPDFになるのを確認するために、シートが2つあるサンプルのExcelファイルを準備する。

シートが2つあるサンプルのExcelファイル

pdfにするサンプル-シート1.png

pdfにするサンプル-シート2.png

PDFの出力手順

まずは、手動でExcelファイルをPDFで保存する方法を確認する。

以下の手順でExcelファイルをPDFで出力できる。

ファイル→エクスポート→PDF/XPSの作成→オプション→発行対象→ブック全体→OK→発行→PDFが出力される。

  • エクスポート
    エクスポート.PNG

  • PDF/XPSの作成
    オプションボタンをクリック.PNG

  • オプション
    オプションダイアログ.png

  • 発行対象→ブック全体→OK
    オプションダイアログ-ブック全体.png

出力されたPDF

複数シートが出力されていることを確認する。

  • Sheet1
    PDF1.png

  • Sheet2
    PDF2.png

  • 出力されたことを確認
    pdfにするサンプルpdfがほぞんされた.PNG

マクロの記録

上記の手順をマクロの記録を押してから行う。

開発→マクロの記録

  • マクロの記録
    マクロの記録ボタン.PNG

  • マクロ名とマクロの保存先の設定
    マクロの記録ダイアログ.png

  • 終わったら記録終了をクリック
    記録終了.PNG

記録された内容を確認してみる。

Macro1
Sub Macro1()
'
' Macro1 Macro
'

'
    ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "C:\Users\user\Documents\pdfにするサンプル.pdf", Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        True
End Sub

ActiveWorkbookはその時に操作対象になっているExcelファイルで
そのExcelファイルオブジェクトのExportAsFixedFormatメソッドでPDFに出力されているらしい。
TypeでおそらくPDFとかXPSを指定して、Filenameで保存する名称を指定しているように見える。

マクロの実行

作成したマクロを実行してみる。
そのままだと同じファイル名のPDFが出力されてしまうので、とりあえず、保存されるファイル名を変更してみる。

Macro1
Sub Macro1()
'
' Macro1 Macro
'

'
    ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "C:\Users\user\Documents\マクロから出力したPDF.pdf", _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, OpenAfterPublish:=True
End Sub

Excelシートの画面に戻って、

開発→マクロ [Alt] + [F8]

で表示されるダイアログでMacro1を選択して、実行ボタンをクリックすると、

  • マクロの表示
    マクロの表示ボタン.PNG

  • マクロの実行
    マクロ実行ダイアログ.png

  • 出力されたことを確認
    マクロから出力したPDF.PNG

変更した名前でPDFが出力される。

マクロの修正

出力後に作成したPDFが毎回Acrobat Readerで開かれてしまっている。
マイクロソフトのヘルプによると
OpenAfterPublish:=Trueのせいでいちいち作成したPDFが開かれるようなので
OpenAfterPublish:=Falseに変更する。
マクロの名称もMacro1ではわかりにくいので、ExportPDFに変更。

マイクロソフトのヘルプ:ExportAsFixedFormat メソッド
https://msdn.microsoft.com/ja-jp/library/office/ff198122.aspx

ExportPDF
Sub ExportPDF()
'
' PDFを出力しても開かない
'

'
    ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "C:\Users\user\Documents\PDFを出力しても開かない.pdf", _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, OpenAfterPublish:=False
End Sub

できたら、もう一度マクロの実行でPDFが出力されたかを確認する。

  • マクロの実行 (マクロ名が変わっている)
    マクロ実行ダイアログExportPDF.png

  • 出力されたことを確認
    PDFを出力しても開かない.PNG

Acrobat Readerが開かれずに済むようになった。

一応動作するマクロができたので、ファイルを保存する。

  • マクロを含むファイルを保存
    マクロ無しブックに保存できません.png

マクロを保存するために拡張子をxlsmにしなければならない。

マクロ有効ブックで保存する。

  • マクロ有効ブックで保存(*.xlsm)
    マクロ有効ブックで保存.PNG

マクロの汎用化

このままではこのマクロが埋め込まれたExcelファイルしかPDFにできない。

どうせなら開いたファイルをどれでもPDF出力できるようにしたい。

アドインの作成

アドインを作成してどのExcelファイルを開いた場合でもPDF出力できるようにしてみる。

名前を付けて保存から、拡張子「.xlam」で保存することでExcelにアドインとして読み込まれるようにできる。

  • アドインで保存 (アドイン.xlam)
    アドインで保存.PNG

アドインを起動して、もとのxlsxファイルをPDFにできるかを確認する。
しかしアドインのマクロはマクロの表示のダイアログには表示されない。

  • アドインはマクロの表示でダイアログには表示されない。
    マクロの表示ダイアログに表示されない.PNG

Visual Basic Editor からマクロを選択すれば実行できるが、使い勝手が悪すぎる。

ツールバー(リボン)に組み込んでみる

Excelのツールバー(リボン)からはアドインのマクロも実行できる。
ツールバー(リボン)に作成したマクロを実行するボタンを追加する。

  • リボンのユーザー設定
    リボンのユーザー設定.PNG

  • リボンのユーザー設定ダイアログ
    リボンのユーザー設定ダイアログ.PNG

これで、リボンからアドインのマクロを実行することができる。

このままでは毎回アドインを起動してからでないとはマクロを実行できない。
Excel起動時に自動で読み込まれていると、目的のExcelファイルを開くだけでツールバーからPDFを出力できる。

簡単にアドインを組み込むためにExcelの起動時に特定のブックを自動的に開く機能を利用する。

XLStartフォルダにブックを配置することで、起動時にアドインが自動的に開かれるようにできる。

マイクロソフトのヘルプ:Application.StartupPath プロパティ
https://msdn.microsoft.com/ja-jp/library/office/ff193231.aspx

XLStartフォルダの調べ方

Visual Basic Editor のイミディエイトペインでExcelファイルのスタートパスを確認できる。

[Alt]+[F11]
[Ctrl]+[G] [Enter]
?Application.StartupPath [Enter]

C:\Users\user\AppData\Roaming\Microsoft\Excel\XLSTART

このパスにアドインを保存することで、作成したアドインがExcel起動時に毎回読み込まれている状態になる。

PDFファイル名が同じになってしまうので、開いているExcelファイルの拡張子がPDFになったものが出力されるように修正する。

ExportPDF
Sub ExportPDF()
'
' Excelファイル名の拡張子をPDFにしたもので保存
'

'
    Dim targetBook As Workbook
    Dim saveFileName As String
    Dim saveFileFullName As String
    Dim objFileSys As Object
    Set targetBook = ActiveWorkbook
    'ファイルシステムを扱うオブジェクトを作成
    Set objFileSys = CreateObject("Scripting.FileSystemObject")
    'GetBaseName:ファイル名から拡張子を除いたものを取得
    saveFileName = objFileSys.GetBaseName(targetBook.Name) & ".pdf"
    'BuildPath:パスの末尾に文字列を追加したパスを取得
    saveFileFullName = objFileSys.BuildPath(targetBook.Path, saveFileName)
    
    targetBook.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        saveFileFullName, _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, OpenAfterPublish:=False
End Sub

Excelを開かないでPDFにしたい

このままではExcelファイルを開いてからツールバーをクリックしないとPDFに変換できない。
いちいちExcelファイルを開いてからPDFに出力するのは煩わしい。
VBScriptに変換してExcelファイルを開かなくてもPDF出力できるようにしてみる。

VBScriptへ移植

VBAとVBScriptでは型の宣言に違いがある。
VBScriptではDimなどでStringなどの型の宣言が必要が無いというより、使用できない。
Excelファイルのパスをパラメータで受け取ることとする。
パラメータで受け取るといっても使用するときは簡単でVBScriptファイルにExcelファイルをドラッグアンドドロップするだけで済む。

Excel2PDF.vbs

Dim objArgs
Dim excelApplication
Dim workBook 

'パラメータを受け取る
Set objArgs = WScript.Arguments
Set excelApplication = CreateObject("Excel.Application")
Set workBook = excelApplication.Workbooks.Open(objArgs(0)) 
Call ExportPDF (workBook)
'Excelブックを閉じる
workBook.Close
'ExcelApplicationを終了する
excelApplication.Quit()

Sub ExportPDF( targetBook )
'
' Excelファイル名の拡張子をPDFにしたもので保存
'

'
    Dim saveFileName
    Dim saveFileFullName
    Dim objFileSys
    'ファイルシステムを扱うオブジェクトを作成
    Set objFileSys = CreateObject("Scripting.FileSystemObject")
    'GetBaseName:ファイル名から拡張子を除いたものを取得
    saveFileName = objFileSys.GetBaseName(targetBook.Name) & ".pdf"
    'BuildPath:パスの末尾に文字列を追加したパスを取得
    saveFileFullName = objFileSys.BuildPath(targetBook.Path, saveFileName)
    
    targetBook.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        saveFileFullName, _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, OpenAfterPublish:=False
End Sub

拡張子vbsで保存することでvbscriptとして実行できる。

実行してみるために、ファイルをvbscriptファイルにドラッグ・アンド・ドロップして実行すると、ExportAsFixedFormat の行でエラーになってしまう。
xlTypePDFとかxlQualityStandardなどの定数がVBScriptではそのままでは使用できない。
ExcelのVBEで値を調べて定数として定義する。

それでも、まだExportAsFixedFormat の行でエラーになってしまう。
「Type:=」などの記述はVBScriptでは受け付けてくれない。
「Type:=」などはすべて外して
マイクロソフトのヘルプ:ExportAsFixedFormat メソッド
https://msdn.microsoft.com/ja-jp/library/office/ff198122.aspx
にのっている順番でパラメータをセットする。

Excel2PDF.vbs
Const xlTypePDF = 0
Const xlQualityStandard = 0

Dim objArgs
Dim excelApplication
Dim workBook 

Set objArgs = WScript.Arguments
Set excelApplication = CreateObject("Excel.Application")
Set workBook = excelApplication.Workbooks.Open(objArgs(0)) 
Call ExportPDF (workBook)
workBook.Close
excelApplication.Quit()

Sub ExportPDF( targetBook )
'
' Excelファイル名の拡張子をPDFにしたもので保存
'

'
    Dim saveFileName
    Dim saveFileFullName
    Dim objFileSys
    'ファイルシステムを扱うオブジェクトを作成
    Set objFileSys = CreateObject("Scripting.FileSystemObject")
    'GetBaseName:ファイル名から拡張子を除いたものを取得
    saveFileName = objFileSys.GetBaseName(targetBook.Name) & ".pdf"
    'BuildPath:パスの末尾に文字列を追加したパスを取得
    saveFileFullName = objFileSys.BuildPath(targetBook.Path, saveFileName)
    
    targetBook.ExportAsFixedFormat 0, saveFileFullName, xlQualityStandard _
                                    , True, False, , , False

End Sub

これでExcelファイルをVBScriptにドラッグ・アンド・ドロップすればPDFが出力されるようにできた。

ひとつづつではまだ面倒なので、複数のファイルをドラッグ・アンド・ドロップできるように複数の引数を受け付けるようにしたのがこちら。

Excel2PDF.vbs
Const xlTypePDF = 0
Const xlQualityStandard = 0

Dim excelApplication
Dim workBook 
Set excelApplication = CreateObject("Excel.Application")
For Each a In WScript.Arguments
    Set workBook = excelApplication.Workbooks.Open(a) 
    Call ExportPDF (workBook)
    workBook.Close
Next
excelApplication.Quit()

Sub ExportPDF( targetBook )
'
' Excelファイル名の拡張子をPDFにしたもので保存
'

'
    Dim saveFileName
    Dim saveFileFullName
    Dim objFileSys
    'ファイルシステムを扱うオブジェクトを作成
    Set objFileSys = CreateObject("Scripting.FileSystemObject")
    'GetBaseName:ファイル名から拡張子を除いたものを取得
    saveFileName = objFileSys.GetBaseName(targetBook.Name) & ".pdf"
    'BuildPath:パスの末尾に文字列を追加したパスを取得
    saveFileFullName = objFileSys.BuildPath(targetBook.Path, saveFileName)
    
    targetBook.ExportAsFixedFormat 0, saveFileFullName, xlQualityStandard, True, False, , , False
End Sub

まだ改善の余地がありそうだが、自分の作業を簡略化するためならこのくらいで十分使用できる。

今回は使わなかったネタ

枠線をなくすマクロを作成
  • Active
  • Activate
  • Select
  • Selection

は、なくしていく

"A1"などのアドレスではなく
Cell(1,1)などで指定する方がプログラムとしては扱いやすい。

ウォッチに登録して内容を確認

自分自身の指定
×ActiveWorkbook
ThisWorkbook

×ActiveWorksheet
Me

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?