【コピペでOK】ダイアログからPDF形式で保存する方法を解説!【Excel VBA】

こんにちは!『ルウちゃんのExcel Labo』管理人の@rouxchanblogです!

今回はこのような悩みについて解説します。

ルウちゃん

ダイアログボックスからファイルを選択してPDF形式で保存したい!
どうすればいいの?

この記事でわかるようになること
  1. ダイアログボックスの使い方
  2. PDFで保存する際の基礎知識
  3. 最低限知っておきたいの設定方法←超重要
目次

サンプルコードの紹介

まずはサンプルコードを使って動かしてみましょう!

    Filepath = Application.GetOpenFilename()  '選択されたファイルパスを取得
    Workbooks.Open Filepath '取得したファイルバスを指定してブックを開く
    
        With ActiveSheet.PageSetup '印刷設定の変更
            .Zoom = False 'ページ設定を変更する時は「False」にする必要がある
            .FitToPagesWide = 1 '横を1ページに収める
            .FitToPagesTall = 1 '縦を1ページに収める
        End With
        
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:=Filepath  '選択したシートをPDF出力
    ActiveWorkbook.Close SaveChanges:=False '保存せずに閉じる
ダイアログ
実行後

このようにダイアログから選択したファイルをPDF形式で保存できましたね!

それではダイアログボックスの使い方から解説していきます!

ダイアログからファイルパスを取得する方法

    Filepath = Application.GetOpenFilename()  '選択されたファイルパスを取得

VBAでダイアログボックスを使う時は「GetOpenFilename」メソッドを使いましょう!

このメソッドを使うことでダイアログから選択されたファイルのファイルパスを取得できます。

記述方法

Application.GetOpenFilename(FileFilter,FilterIndex, Title, ButtonText, MultiSelect)

オブジェクトはApplicationオブジェクトにしましょう。

引数は指定せずに使っても特に問題ありません。

引数を指定することで以下の表のような設定をすることができます!

スクロールできます
設定項目内容
ObjectApplicationオブジェクト [省略不可]
FileFilterファイルの種類を指定する文字列(ファイルフィルタ文字列)を指定 [省略可能]
省略すると “すべてのファイル (*.*),*.*”になる
FilterIndex引数FileFilterで指定したファイルフィルタ文字列の中で、何番目のフィルタを既定値とするかを指定 [省略可能]
Titleダイアログボックスのタイトルを指定 [省略可能]
ButtonTextMacintoshのみ指定できる [省略可能]
MultiSelect複数ファイルを選択できる(True)、1つのファイルしか選択できない(False:既定値) [省略可能]
引用:mougモーグ

次はPDF形式で保存する方法を解説します。

ファイルのPDF形式で保存

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:=Filepath'選択したシートをPDF出力

PDF形式で保存するには「ExportAsFixedFormat」メソッドを使いましょう!

このメソッドを使うとPDFまたはXPS形式で保存することができます。

記述方法

式.ExportAsFixedFormat ( Type , FileName,Quality, IncludeDocProperties,IgnorePrintAreas, From, To,OpenAfterPublish, FixedFormatExtClassPtr)

完全に呪文ですね。引数については必ずしも全て指定する必要はありません!

式には「Workbookオブジェクト」や「Sheetsコレクション」をオブジェクトとして指定してください。

今回のサンプルコードでは「ActiveSheet」にしました。

ActiveSheet」で指定する時は事前にOpenメソッドでファイルを開いておく必要があります。

次に引数ですが、サンプルコードでは「Type」と「FileName」の2つだけを指定しました。

Type」を「Type:=xlTypePDF」を記述することでPDF形式にすることができます。

FileName」は名前の通り保存するファイルの名前を指定できます。

今回使ったサンプルコードでは「FileName:=Filepath」と記述し、選択してきたファイル名をそのまま使っています。

その他の引数については下記の表を参考にしてください!

スクロールできます
名前内容
TypeXlFixedFormatType列挙を指定します。
FileName保存するファイルの名前を示す文字列。
完全なパスを含めることも、Excel でファイルを現在のフォルダーに保存することもできます。
QualityXlfixedformatquality列挙定数を指定します。
IncludeDocPropertiesドキュメントプロパティを含める必要があることを示す場合はTrueに設定し、省略されたことを示す場合はFalseに設定します。
IgnorePrintAreasTrueに設定すると、発行する場合に印刷範囲が無視されます。
Falseに設定すると、発行時に印刷範囲セットが使用されます。
From発行を開始するページのページ番号を指定します。
この引数を省略すると、先頭のページから発行が開始されます。
To発行を終了するページの番号を指定します。
この引数を省略すると、最後のページまで発行します。
OpenAfterPublishTrueに設定すると、ファイルが公開された後にビューアーに表示されます。
Falseに設定すると、ファイルは公開されますが、表示されません。
FixedFormatExtClassPtrFixedFormatExtクラスへのポインターです。
引用:エクセルの神髄

XlFixedFormatType列挙は以下の表を参考にしてください!

スクロールできます
名前説明
xlTypePDF0PDF – Portable Document Format ファイル (.pdf)
Xltypexps です1XPS – XPS ドキュメント (.xps)
引用:エクセルの神髄

最低限知っておきたい設定方法

        With ActiveSheet.PageSetup '印刷設定の変更
            .Zoom = False 'ページ設定を変更する時は「False」にする必要がある
            .FitToPagesWide = 1 '横を1ページに収める
            .FitToPagesTall = 1 '縦を1ページに収める
        End With

最後に印刷設定をVBAで変更する方法を解説します。

ページ設定は「PageSetupオブジェクト」のプロパティを設定することで変更できます。

今回は1ページに収めたかったので「FitToPagesWide = 1」としています。

同様に縦も1ページに収めたかったので「FitToPagesTall = 1」としました。

この時に注意することが1つあります。ページの倍率を変化させる時は、「Zoom = False」を記述してください!

これを記述しないと、いくら変更しても反映されません!

その他のプロパティは下記の表を見て、必要に応じて指定してください!

名前説明
名前説明
AlignMarginsHeaderFooterExcelでヘッダーとフッターをページ設定オプションの余白セットを使用して揃える場合は、Trueを返します。
値の取得および設定が可能です。
ブール型(Boolean)の値を使用します。
Application対象となるオブジェクトが指定されない場合は、Excelアプリケーション(Applicationオブジェクト)を返します。
対象となるオブジェクトが指定された場合は、指定されたオブジェクトを作成したApplicationオブジェクトを返します。
OLEオートメーションを使っていて、オブジェクトのアプリケーションにアクセスするときなどに、このプロパティを使います。値の取得のみ可能です。
BlackAndWhiteTrueの場合、対象となるシートのセルや描画オブジェクトを白黒印刷します。値の取得および設定が可能です。ブール型(Boolean)の値を使用します。
BottomMargin下余白の大きさをポイント(ポイント:印刷する文字のサイズ(高さ)を指定する基本単位。
1ポイントは、約0.0353cm(1/72インチ)です。)単位で設定します。
値の取得および設定が可能です。
倍精度浮動小数点型(Double)の値を使用します。
CenterFooterPageSetupオブジェクトでフッター情報を中央揃えします。
値の取得および設定が可能です。文字列型(String)の値を使用します。
CenterFooterPictureフッターの中央のセクションの画像を表すGraphicオブジェクトを取得します。
画像についての属性を設定するために使用します。
CenterHeaderPageSetupオブジェクトでヘッダー情報を中央揃えします。
値の取得および設定が可能です。文字列型(String)の値を使用します。
CenterHeaderPictureヘッダーの中央のセクションの画像を表すGraphicオブジェクトを取得します。
画像についての属性を設定するために使用します。
CenterHorizontallyTrueの場合、印刷時のシートのページレイアウトの設定を、水平方向の中央寄せ(余白を除く)にします。
値の取得および設定が可能です。
ブール型(Boolean)の値を使用します。
CenterVerticallyTrueの場合、印刷時のシートのページレイアウトの設定を、垂直方向の中央寄せ(余白を除く)にします。
値の取得および設定が可能です。
ブール型(Boolean)の値を使用します。
Creator現在のオブジェクトが作成されたアプリケーションを示す32ビットの整数を取得します。
値の取得のみ可能です。
長整数型(Long)の値を使用します。
DifferentFirstPageHeaderFooterTrueに設定すると、先頭ページでは他のページと異なるヘッダーとフッターが使用されます。
値の取得および設定が可能です。
長整数型(Boolean)の値を使用します。
DraftTrueの場合、シートの印刷時にグラフィックスを印刷しない設定(簡易印刷)になります。
値の取得および設定が可能です。
ブール型(Boolean)の値を使用します。
EvenPageブックまたはセクション内の偶数ページで、文字列の配置を取得または設定します。
FirstPageブックまたはセクション内の先頭ページで、文字列の配置を取得または設定します。
FirstPageNumber印刷するシートの先頭ページで使用される番号を設定します。
xlAutomaticの場合、自動的に先頭ページの番号が選択されます。
既定値はxlAutomaticです。値の取得および設定が可能です。
長整数型(Long)の値を使用します。
FitToPagesTallワークシートを印刷するときに、縦何ページ分で収めるかを示す値を指定します。
値の取得および設定が可能です。
このプロパティは、ワークシートだけを対象とします。バリアント型(Variant)の値を使用します。
FitToPagesWideワークシートを印刷するときに、横何ページ分で収めるかを示す値を指定します。
このプロパティは、ワークシートだけを対象とします。
値の取得および設定が可能です。
バリアント型(Variant)の値を使用します。
FooterMarginフッターの余白(用紙の下端からフッターまでの距離)の値をポイント(ポイント:印刷する文字のサイズ(高さ)を指定する基本単位。
1ポイントは、約0.0353cm(1/72インチ)です。)単位で設定します。
値の取得および設定が可能です。倍精度浮動小数点型(Double)の値を使用します。
HeaderMarginヘッダーの余白(用紙の上端からヘッダーまでの距離)の値をポイント(ポイント:印刷する文字のサイズ(高さ)を指定する基本単位。
1ポイントは、約0.0353cm(1/72インチ)です。)単位で設定します。
値の取得および設定が可能です。倍精度浮動小数点型(Double)の値を使用します。
LeftFooterブックまたはセクション内の左のフッターで、文字列の配置を取得または設定します。
LeftFooterPictureフッターの左のセクションの画像を表すGraphicオブジェクトを取得します。
画像についての属性を設定するために使用します。
LeftHeaderブックまたはセクション内の左のヘッダーで、文字列の配置を取得または設定します。
LeftHeaderPictureヘッダーの左のセクションの画像を表すGraphicオブジェクトを取得します。
画像についての属性を設定するために使用します。
LeftMargin左余白の大きさをポイント(ポイント:印刷する文字のサイズ(高さ)を指定する基本単位。1ポイントは、約0.0353cm(1/72インチ)です。)単位で設定します。
値の取得および設定が可能です。倍精度浮動小数点型(Double)の値を使用します。
OddAndEvenPagesHeaderFooterTrueを設定すると、指定したPageSetupオブジェクトの奇数ページと偶数ページに異なるヘッダーとフッターを設定できます。
値の取得および設定が可能です。
ブール型(Boolean)の値を使用します。
Order大きいワークシートを複数ページに分けて印刷するときにページ番号を付ける順番を表す、XlOrderクラスの定数を取得または設定します。
Orientation印刷の向きが縦か横かを表すXlPageOrientationクラスの定数を取得または設定します。
PagesPagesコレクションに含まれるページのカウントまたはアイテム番号を取得または設定します。
PaperSize用紙サイズを設定します。値の取得および設定が可能です。
XlPaperSizeクラスの定数を使用します。
Parent指定されたオブジェクトの親オブジェクトを取得します。値の取得のみ可能です。
PrintArea印刷するセル範囲を、コード記述時の言語のA1形式の文字列で設定します。
値の取得および設定が可能です。文字列型(String)の値を使用します。
PrintCommentsシートへのコメントの印刷方法を設定します。
値の取得および設定が可能です。XlPrintLocationクラスの定数を使用します。
PrintErrors表示される印刷エラーの種類を指定するXlPrintErrorsクラスの定数を設定します。
この機能を使用して、ユーザーはワークシートの印刷時にエラー値の表示を抑止することができます。
値の取得および設定が可能です。
PrintGridlinesTrueの場合、セルの枠線をページに印刷します。このプロパティは、ワークシートだけを対象とします。値の取得および設定が可能です。
ブール型(Boolean)の値を使用します。
PrintHeadingsTrueの場合、行と列の番号をページに印刷します。
このプロパティは、ワークシートだけを対象とします。値の取得および設定が可能です。
ブール型(Boolean)の値を使用します。
PrintNotesTrueの場合、文末脚注のようにシート印刷時にセル内のコメントも印刷します。
このプロパティは、ワークシートのページだけを対象とします。
値の取得および設定が可能です。
ブール型(Boolean)の値を使用します。
PrintQuality印刷品質を返します。値の取得および設定が可能です。
バリアント型(Variant)の値を使用します。
PrintTitleColumns各ページの左端に常に表示するセルを含む列を、コード記述時の言語のA1形式の文字列で設定します。
値の取得および設定が可能です。文字列型(String)の値を使用します。
PrintTitleRows各ページの上端に常に表示するセルを含む行を、コード記述時の言語のA1形式の文字列で設定します。
値の取得および設定が可能です。文字列型(String)の値を使用します。
RightFooterページの右端とフッターの右端の距離をポイント単位で設定します。
値の取得および設定が可能です。単精度浮動小数点型(String)の値を使用します。
RightFooterPictureフッターの右のセクションの画像を表すGraphicオブジェクトを取得します。
画像の属性を設定するために使用します。
RightHeader右側に配置されたヘッダーを設定します。
値の取得および設定が可能です。
文字列型(String)の値を使用します。
RightHeaderPicture右のヘッダーに表示する画像を指定します。
値の取得のみ可能です。
RightMargin右余白の大きさをポイント(ポイント:印刷する文字のサイズ(高さ)を指定する基本単位。
1ポイントは、約0.0353cm(1/72インチ)です。)単位で設定します。
値の取得および設定が可能です。
倍精度浮動小数点型(Double)の値を使用します。
ScaleWithDocHeaderFooter文書のサイズが変更された場合に、ヘッダーとフッターのサイズが文書に合わせて変更されるかどうかを設定します。値の取得および設定が可能です。
ブール型(Boolean)の値を使用します。
TopMargin上余白の大きさをポイント(ポイント:印刷する文字のサイズ(高さ)を指定する基本単位。
1ポイントは、約0.0353cm(1/72インチ)です。)単位で設定します。
値の取得および設定が可能です。
倍精度浮動小数点型(Double)の値を使用します。
Zoomワークシートを印刷するときの拡大率または縮小率(%)を、10~400の範囲で表すバリアント型(Variant)の値を取得、または設定します。
引用:エクセルの神髄

まとめ

今回はダイアログから選択したファイルをPDF形式で保存する方法を解説しました!

ダイアログからファイルを読み込む処理は実務に取り入れやすいと思いますのでぜひ使ってみてください!

このような実務で使えるコードがほかにも知りたいという方にはこの本をおすすめします!

最速で実務的なコードを書くことを目指している方にはぜひ手にとってほしい1冊です!

実務の現場で使い倒しましょう!

この記事で少しでも皆さんのお役に立てれば幸いです!

忘れないうちにお気に入り登録もお願いします!

ありがとうございました!

/// お得な情報 ///

すぐに使えて便利なテクニックが650個も手に入る!

気になる人は今すぐクリック!!

 

目次