ExcelファイルをPDFに一括変換するマクロの作成と実行【macOS環境】
ExcelファイルをPDFに変換する作業は、特に複数シートが含まれている場合、手間がかかります。レイアウト設定や印刷範囲の調整を一つ一つ行うのは時間がかかるため、Excelマクロを使って大量のファイルを一括でPDFに変換する方法を紹介します。
動作確認環境
- OS: macOS
- Excelバージョン: Microsoft Excel for Mac
Excelマクロの作成
ここではマクロの詳細な作成手順については割愛します。以下のサンプルコードを適宜使用してください。1シートあたり縦横1ページにフィットするようにしています。(このマクロはChatGPTで生成したもので、必要に応じてChatGPTで修正してください)
Option Explicit
Sub ConvertExcelToPDF()
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
Dim rootDir As String
Dim filePath As String
' ファイルパスが含まれるシートを設定
Set ws = ThisWorkbook.Sheets("excel->pdf")
' InputBoxを使用してユーザーからルートディレクトリを取得
rootDir = InputBox("ルートディレクトリのパスを入力してください:")
' ルートディレクトリがバックスラッシュで終わっているか確認
If Right(rootDir, 1) <> "/" Then
rootDir = rootDir & "/"
End If
' 列Aでデータのある最後の行を取得
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
' 列Aの各セルをループ処理
For i = 1 To lastRow
filePath = Trim(ws.Cells(i, 1).Value)
' ファイルパスが存在する場合のみ処理を実行
If Len(filePath) > 0 Then
ProcessFile rootDir & filePath
End If
Next i
MsgBox "変換が完了しました!"
End Sub
Sub ProcessFile(ByVal filePath As String)
Dim wb As Workbook
Dim ws As Worksheet
Dim pdfPath As String
Dim ur As Range
On Error Resume Next
Set wb = Workbooks.Open(FileName:=filePath, ReadOnly:=True)
If Err.Number <> 0 Then
Debug.Print "ファイルを開く際のエラー: " & filePath
Err.Clear
Exit Sub
End If
On Error GoTo 0
' 各ワークシートの印刷範囲を設定し、1ページに収まるように調整
For Each ws In wb.Worksheets
Set ur = ws.UsedRange
If ur.Cells.Count > 1 Then
With ws.PageSetup
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
End With
Else
' 使用セルが1つだけの場合は、印刷範囲をクリア
ws.PageSetup.PrintArea = ""
End If
Next ws
' Excelファイルと同じフォルダにPDFとして保存
pdfPath = Replace(wb.FullName, ".xlsx", ".pdf")
On Error Resume Next
wb.ExportAsFixedFormat Type:=xlTypePDF, FileName:=pdfPath, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
If Err.Number <> 0 Then
Debug.Print "PDFへのエクスポート中のエラー: " & filePath
Err.Clear
End If
On Error GoTo 0
wb.Close SaveChanges:=False
End Sub