PDFファイルに出力する

印刷

PDFファイルに出力する

ExcelのブックやシートをPDFで出力するには、ExportAsFixedFormatメソッドを使います。
このメソッドは、ブックやシートなどのオブジェクトで実行できます。

ExportAsFixedFormatメソッドの構文

オブジェクト.ExportAsFixedFormat(
	Type, 
	FileName, 
	Quality, 
	includedocproperties, 
	ignoreprintareas, 
	From, 
	To, 
	openafterpublish, 
	FixedFormatExtClassPtr)

オブジェクトには、ブックやシートを指定することが出来ます。

パラメータ詳細

 引数のパラメータは以下のようになっています。
 Type以外は省略可能です。

Type

xlTypePDF または xlTypeXPS のいずれかを指定できます。PDFを出力したい場合はxlTypePDFです。

FileName

フルパスを指定します。省略した場合は、(筆者の環境では)ドキュメントフォルダに出力されました。

Quality

品質の設定をします。以下の2つを指定できます。

xlQualityStandard最小限の品質
xlQualityMinimum 標準品質

includedocproperties

ドキュメントプロパティを含める場合はTrueを、省略する場合はFalseを指定します。

ignoreprintareas

印刷範囲設定です。Trueでは印刷範囲が無視され、Falseでは印刷範囲が適用されます。

From , To

From開始ページの設定です。省略した場合は先頭ページから出力されます。
To終了ページの設定です。省略した場合は最後のページまで出力されます。

openafterpublish

出力のビューアを開くかの設定です。
Trueで出力後にビューアが開きファイルが表示されます。
Falseまたは省略するとビューアは開きません。

FixedFormatExtClassPtr

FixedFormatExtクラスへのポインタです。
(使い方はイマイチよくわかりませんが、省略することが多いようです。)

最低限の設定を試してみる

’ブック編
Sub PDF1()
    ThisWorkbook.ExportAsFixedFormat (xlTypePDF)
End Sub

現在のブックをPDFするプログラムです。
結果はブックの全てのシートが1つのPDFファイルとして、ドキュメントフォルダに出力されました。ファイル名はExcelファイルのファイル名.PDFとなります

’シート編
Sub PDF2()
    ActiveSheet.ExportAsFixedFormat (xlTypePDF)
End Sub

今度はシートを指定して出力させました。
結果は、1シート分出力され、保存フォルダとファイル名は一緒です。

’Range編
Sub PDF3()
    ActiveSheet.Range("A8:G40").ExportAsFixedFormat (xlTypePDF)
End Sub

Rangeを指定して出力する方法です。覚えておくと便利かもしれません。
1つのシートを2つ以上のPDFファイルに分けるような事が出来るようになるでしょう。

標準的な使い方

通常はファイル名を指定したり、印刷範囲を活かしたい欲求があると思います。
以下の例では、いくつかパラメータをしてしています。

Sub PDF4()
    Dim myFileName As String
    myFileName = "請求書.pdf"

    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
            Filename:=ThisWorkbook.Path & "\" & myFileName, _
            Quality:=xlQualityStandard, _
            IncludeDocProperties:=True, _
            IgnorePrintAreas:=False

End Sub

Type:=xlTypePDF でPDF出力をしてい。
Filenameに対しては、ThisWorkbook.Pathで現在のExcelファイルと同じフォルダを指定して、ファイル名は別の変数であらかじめ指定しています。
Qualityで印刷品質を標準品質に指定。
IncludeDocPropertiesでドキュメントプロパティをセット。
IgnorePrintAreasで印刷設定を反映させています。

PDF出力する際のページ構成を設定する

単にPDF出力するといっても、実は色々なバリエーションが存在します。
先の例では、ブックやシート単位で1つのPDF出力でした。
ここでは2つのシートを1つのPDFファイルにしたり、特定のシートを個別にPDF出力する方法を見ていきます。

特定のシートを個別にPDF出力

 先の例でシート単位での印刷は可能ですので、WorksheetsForEachで回してお好みのシートのみExportAsFixedFormat メソッドを行えばOKです。

Sub PDF5()
    Dim myFileName As String
    Dim ws
    
    For Each ws In worksheets
    
        If InStr(ws.Name, "月") > 0 Then
            myFileName = ws.Name & "請求書.pdf"
        
            ws.ExportAsFixedFormat Type:=xlTypePDF, _
                    Filename:=ThisWorkbook.Path & "\" & myFileName, _
                    Quality:=xlQualityStandard, _
                    IncludeDocProperties:=True, _
                    IgnorePrintAreas:=False
        End If
        
    Next ws
    
End Sub

このプログラムでは、シート名に”月”が付いているシートをPDF出力の対象にしています。
If InStr(ws.Name, “月”) > 0 Then の部分ですが、InStr関数を使ってシート名に”月”という文字が含まれていれば1以上の値が返るのでTrueとなり、If文の内部が実行されます。
あとは、出力ファイル名に”請求書.pdf”を付け足して、5月なら”5月請求書.PDF”となります。

複数のシートを1つのPDFファイルに統合する

 イメージとしては、1シート目が1ページ、2シート目が2ページなどとなるように1つのPFDファイルする方法になります。

 これはマクロの記録を使って、方法を検討してみましょう。
 操作は、マクロの記録を開始して、10月、11月のシートタブを複数選択して、印刷を実行してマクロの記録を終了させています。
 印刷出力をPDFファイルにして確かめたところ、思った通りの結果となりましたので、マクロの記録で出力されたコードを参考にしてみましょう。

Sub Macro1()
'
' Macro1 Macro
'

'
    Sheets(Array("10月", "11月")).Select
    Sheets("10月").Activate
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
        IgnorePrintAreas:=False
End Sub

 これが、マクロの記録で出力されたコードになります。
注目すべきは、
Sheets(Array(“10月”, “11月”)).Select
の部分ですね。Arrayで一括りにすれば良いようです。

これを自分で書いたプログラムに適用してみます。

Sub PDF6()
    Dim myFileName As String
    Dim s, str As String
    Dim ws As Worksheet
    
    Set ws = ActiveSheet    '現在アクティブなシートを保存
    
    For Each s In Array("10月", "11月")
        str = str & s & "_"
    Next s

    myFileName = str & "請求書.pdf"

    Sheets(Array("10月", "11月")).Select
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
            Filename:=ThisWorkbook.Path & "\" & myFileName, _
            Quality:=xlQualityStandard, _
            IncludeDocProperties:=True, _
            IgnorePrintAreas:=False

    ws.Select       '処理前にアクティブだったシートに戻す

End Sub

 メインの処理は、
Sheets(Array(“10月”, “11月”)).Select で選択した後、
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _ でアクティブシートを指定しているところですね。

 一応冒頭で、Set ws = ActiveSheet としてそれまで選択されていたシートを保持しておき、最後に、ws.Select で元に戻しています。これはプログラマーのエチケットですね。

 それと、ファイル名も頑張って、選択したシート名が適用されるように頑張ってみました。
For Each s In Array(“10月”, “11月”) からの部分です。

1つのシートを複数のPDFファイルに分ける

これに関しては、先のRange指定の部分を使えば簡単にできますので、省略します。

ActiveSheet.Range(“A8:G40”).ExportAsFixedFormat (xlTypePDF)

などとして特定の範囲をRangeで指定して、複数回PDFファイルに出力すればOKでしょう。

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