VBScript を使ってExcel ファイルを一括PDF化する
技術ブログをご覧いただきありがとうございます!
k_yamazawaです。
定期的にExcelで作った資料をPDFに変換することがありまして…
複数のファイルを一つずつ開いてPDF保存を繰り返すのは、時間も手間もかかって、効率が良くないですよね。
なので今回は、Excelの標準機能を、Windowsの標準機能(もちろん無料)で操作して、自動化してしまいましょう。(もちろん、Excelは必須です)
プログラムの概要・注意事項
今回使うWindowsの標準機能は、VBScript と呼ばれるものです。
VBScript はメモ帳などでプログラムを記述するだけで、カンタンに動かすことができます。
また、マクロで使われるVBAなどとも似たような構造なので、これからマクロを覚えたい方にも勉強になると思います。
プログラムを利用する際は、下記の点に気を付けて実行してください。
PDF保存先
元になるExcelファイルと同じ場所に、同じ名前のPDFファイルを出力します。(拡張子だけ異なるファイル)
すでにファイルが存在する場合、上書きされます。
パスワード付きファイルが含まれる場合
ファイルを開く際に、ダイアログが表示されると思います。
パスワードを入力するかキャンセルしない限り、プログラムが停止したままになる可能性があります。
パスワード入力をスキップしたファイルは、PDF出力されません。
プログラムの本体
メモ帳やサクラエディタなどにコピペして、下記の点に注意して保存してください。
ファイル名は何でもよいが、末尾に必ず半角で「.vbs」と入れる
文字コード・エンコード は 、ANSI または SJIS(Shift-JIS)
' ============================================================
' Excel to PDF
' ============================================================
' PDF 変換 したいファイルが含まれているフォルダをドラッグアンドドロップすると、それぞれPDFファイルに変換してくれます
' ファイル・フォルダ の情報取得 準備
Dim objFSO : Set objFSO = CreateObject("Scripting.FileSystemObject")
' Excel で扱う定数の定義
' XlFixedFormatType 列挙 (Excel)
Const xlTypePDF = 0 ' "PDF" - Portable Document Format ファイル (.pdf)
' XlFixedFormatQuality 列挙 (Excel)
Const xlQualityStandard = 0 ' 標準品質
' ファイルの種類 の定義
Const extXLS = "xls" ' Excel 97-2003 ブック
Const extXLSX = "xlsx" ' Excel ブック
Const extPDF = "pdf" ' PDFファイル
' VBScript ファイル に ファイル・フォルダ を ドラッグアンドドロップ したか確認
If WScript.Arguments.Count > 0 Then
' VBScript ファイル に ドラッグアンドドロップ したものを順に処理
For i=0 to WScript.Arguments.Count - 1
' フォルダ の場合のみ、処理を行う
If objFSO.FolderExists(WScript.Arguments.Item(i)) Then
' メイン処理を呼び出す
call excelToPdfDir(WScript.Arguments.Item(i))
End If
Next
End If
' ファイル・フォルダ の情報取得 後片付け
Set objFSO = Nothing
' ------------------------------------------------------------
' メイン処理
' ------------------------------------------------------------
Sub excelToPdfDir(targetPath)
' 引数で受け取ったフォルダを参照する
Dim objFolder : Set objFolder = objFSO.getFolder(targetPath)
' Microsoft Excel を開く
Dim excelApp : Set excelApp = CreateObject("Excel.Application")
excelApp.Visible = True ' 画面を表示する
excelApp.DisplayAlerts = False ' 警告メッセージをOFF
WScript.sleep 1000 ' 起動するまで 1秒 待機
Dim objFile ' ファイルを順に処理する時の ファイルオブジェクト変数
Dim objBook ' Excel で開いた時の Excelブックオブジェクト変数
Dim strExt ' ファイルの拡張子 を格納する 文字列変数
' ファイルを順に処理する
For Each objFile In objFolder.Files
' 拡張子 取得
strExt = objFSO.GetExtensionName( objFile.Name )
' 拡張子 によるファイルチェック
If strExt = extXLSX Or strExt = extXLS Then ' べた書きでのチェック
' Excel ブック を 読み取り専用 で 開く
Set objBook = excelApp.Workbooks.Open( objFile.Path, False, True )
WScript.sleep 100
' PDF 形式でエクスポート
call objBook.ExportAsFixedFormat( _
xlTypePDF, _
objBook.Path & "\" & Replace( objFile.Name, strExt, extPDF ), _
xlQualityStandard, _
True, _
False, _
, _
, _
False _
)
' ファイルを閉じる
objBook.Close ' Excel ブックを閉じる
Set objBook = Nothing ' Excel ブックオブジェクトを閉じる
WScript.sleep 100 ' 0.1秒待機
End If
Next
' エクセルを閉じる
excelApp.Quit
Set excelApp = Nothing
' フォルオブジェクトを閉じる
Set objFile = Nothing
' 引数で受け取ったフォルダ参照を閉じる
Set objFolder = Nothing
End Sub
使い方
このVBScriptファイルの便利な使い方を紹介します
デスクトップにVBScriptファイルを置いておく
非常にシンプルな方法です。
設定方法
作成したVBScriptファイルをデスクトップに置く
使用方法
デスクトップに置いたVBScriptファイルに、
PDFに変換したいExcelが含まれたフォルダをドラッグアンドドロップで乗せる。
以上です。
デメリットがあるとすると、デスクトップがアイコンだらけだと、探すのが大変だったり…
右クリックメニューの「送る」に追加する
少し設定が難しいかもしれませんが、登録しておくとカンタンに利用できるようになります。
設定方法
作成したVBScriptファイルを、右クリックなどからコピーする
エクスプローラを開く
アドレス部分に下記の文字列を貼り付けて、Enterキーを押す。
%USERPROFILE%\AppData\Roaming\Microsoft\Windows\SendToこの画面で、右クリック 〉 ショートカットの貼り付け を選択
Windows11 の場合は 右クリック 〉 その他のオプションを表示 〉 ショートカットの貼り付け を選択
使用方法
PDFに変換したいExcelが含まれたフォルダを選択して、
右クリック 〉 送る 〉 先ほどのショートカット を選択
Windows11 の場合は 右クリック 〉 その他のオプションを表示 〉 送る 〉 先ほどのショートカット を選択
以上です。
デスクトップにアイコンをいっぱい置きたくない人は、この方が良いかもしれませんね!
終わりに
今回紹介したプログラムは、少し改造すれば Word や PowerPoint でも使う事が出来ます。
希望があれば、Word版、PowerPoint版 も公開したいと思います。