こんにちわ。たろ(@tarohibi)です。今日は単発で「エクセル(EXCEL)をまとめてPDF化する方法」をお届けします。
いつもお世話になっているもりさんのブログで、WordをPDF化する方法というのが載っていました。

「VBScript」のVの字も知らなかったのですが、これ便利だなと思って導入
今まで、Wordの保存→「PDF」を選択→保存後の「PDF」が出てくる→次のWordと延々とループしていたのが、一瞬で済むようになりました。
「これはもしかして・・・エクセルも使えるんじゃね?」という発想から、早速もりさんのコードを元に作成してみることにしました。
完成コード
結果的には完成したのですが、課題も残ったり、つまずいたとこもあったので、まとめてみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
Excelオブジェクト作成 Dim excelApp Set excelApp = WScript. CreateObject ("Excel.Application") excelApp.Visible = False ファイルシステムオブジェクト作成 Dim fso Set fso = CreateObject("Scripting.FileSystemObject") このvbスクリプトが存在するフォルダを取得 Dim parentFolder parentFolder = fso.GetParentFolderName(WScript.ScriptFullName) ドラッグ&ドロップで取得したファイルパスを格納(WScriptオブジェクトのArgumentsプロパティ) Dim args Set args = WScript.Arguments このvbスクリプトと同じ階層にPDFを作成する Dim filePath For Each filePath In args Dim excelXls Set excelXls = excelApp.Workbooks.Open(filePath) Dim baseName, pdfFileName baseName = fso.GetBaseName(filePath) pdfFileName = parentFolder & "\" & baseName & ".pdf" excelXls.ExportAsFixedFormat xlTypePDF,pdfFileName,False excelXls.Close wdDoNotSaveChanges '対象ファイル閉じる Set excelXls = Nothing Next excelアプリ終了 アラート出さない excelApp.DisplayAlerts = False excelApp.Quit excelApp.DisplayAlerts = true |
上記が、完成スクリプトです。
解説
基本的な流れは、もりさんのスクリプトをエクセル形式に変更したものです。
キモは、EXCELオブジェクト作成~Argumentsプロパティ作成までですが、これ自分一人で作成しろと言われたら、『詰み』ますね。
この発想が出ないというか。
ファイルシステムオブジェクトあたりまでは、お作法的な部分があるのですが、Argumentsプロパティなんて考えつきません。
ドラッグ&ドロップで取得したファイルパスを格納なんて・・・めちゃ便利なプロパティがあるもんだと感心してしまいました。
そこからFor-In文でグルグル回して、PDFを作成していくのですが、29行目でつまりました。
1 |
excelXls.ExportAsFixedFormat xlTypePDF,pdfFileName,False |
PDFフォーマットで出力するメソッドですが、「VBScript」の場合、引数のパラメータ名を書くとエラーがでるみたいです。
「xlTypePDF,pdfFileName,False」この辺の部分です。
残りの課題
スクリプト自体は動くのですが、EXCEL内部でページ範囲していしてやらないと、必要ない箇所までPDF化してしまいます。
VBAの場合、PageSetup オブジェクトを使用すればできるのですが、「VBScript」対象外みたいです。一回設定すれば、範囲を変更しない限り同じPDFが出力されるので、頻繁に印刷範囲を変更しなければ、何とかなりそうです。
まとめ
以上で、「エクセル(EXCEL)をまとめてPDF化する方法」をお届けしました。
もりさんのスクリプトを見よう見まねで作成しました。
半日かかりましたが、半日分以上の省力化ができるので、問題なし!ということで。
オリジナルのスクリプトを作成して頂いたもりさんに感謝して、日々学んでいきたいと思います。
コメント