スクリプトで始めるExcel操作(シートのPDF化)

普段仕事で、Excelを使っている方は多いと思いますが、Excelを使いこなせているでしょうか?

単純作業を効率化する際は、vlookupやsumifといった関数、もっと高度なことをしたい場合はVBAを使っていることと思います。

しかし、このVBAにも欠点があります。

それは、VBAを実行するためには、Excelファイルを開かなければならない、一つのExcelファイルに書いたコードを他のファイルに移植することが面倒であることです。

この記事では、VBScriptというWindows OS標準搭載のプログラミング言語を使って、Excelの操作方法を紹介します。

これにより、これまでとは一風変わった効率化ができるようになるでしょう。

今回は導入として、作成したスクリプトファイルに対して、ExcelファイルをDrag & DropするとExcelファイルの全シート枚にPDFファイルを出力するスクリプトを作ってみます。 下記のコードをそのまま[xxx.vbs]※というファイルにコピペし、ExcelファイルをそれにDrag & Dropしてみてください。
※ファイルの拡張子はvbsである必要があります。
※PCにPDFのアドインがない場合、また、Excelファイルの中に白紙のシートがある場合はエラーが出てしまいます。

VBScript

'カレントディレクトリ取得
set objFSO = createObject("Scripting.FileSystemObject")
strCurrentDir = objFSO.getParentFolderName(WScript.ScriptFullName)

' Excel起動
Set objXlsApp = CreateObject("Excel.Application")

' Drag & Dropしたファイルパス(またはコマンドライン引数)を取得
Set arguments = WScript.Arguments
If arguments.count = 0 Then
  msgbox "ExcelファイルをDrag & Dropしてください。"
  WScript.Quit ' スクリプト終了
End If

' ファイルパス取得
filepath = arguments(0)

If objXlsApp Is Nothing Then
    ' Excel起動失敗
    MsgBox "Excel起動失敗"
End If

' Excel起動成功
' Excelを非表示で起動
objXlsApp.Application.Visible = False
' Excelの警告を非表示に
objXlsApp.Application.DisplayAlerts = False

' Excelファイルを開き、そのブックオブジェクトを取得
set objBook = objXlsApp.workbooks.open(filepath)

' シート毎にループ
For Each worksheet In objBook.Worksheets
    worksheet.ExportAsFixedFormat xlTypePDF,  strCurrentDir & "\" & worksheet.name & ".pdf"
Next

' ブックを閉じる
objBook.Close
' Excelを閉じる
objXlsApp.Quit
Set objXlsApp = Nothing

おすすめ記事
© 2016-2017 Fridles All Rights Reserved.