Googleスプレッドシートで特定の範囲だけをPDFとして出力したいと考えたことはありませんか。手動で範囲を選択して印刷する方法もありますが、毎回同じ操作を繰り返すのは非効率です。Apps Scriptを使えば、ボタン一つで指定した範囲をPDFとして自動生成できます。この記事では、特定範囲をPDF出力するスクリプトの書き方を詳しく解説します。
【要点】Apps Scriptで特定範囲をPDF化する3つのポイント
- getBlob()メソッドでシートをPDF形式に変換: シートオブジェクトから直接PDFのBlobデータを取得します。
- getRange()で出力範囲を指定: セル範囲をA1形式で指定し、その範囲だけをPDF化できます。
- DriveApp.createFile()でファイル保存: 生成したPDFをGoogleドライブの任意のフォルダに保存します。
ADVERTISEMENT
目次
なぜApps ScriptでPDF生成が必要なのか
Googleスプレッドシートには標準のPDFエクスポート機能がありますが、出力範囲やファイル名の指定に制限があります。Apps Scriptを使えば、次のような柔軟な処理が可能です。特定の範囲だけを切り出してPDF化できます。ファイル名に日付やシート名を自動で含められます。複数のシートをまとめてPDFに変換することもできます。これらの処理をトリガーで自動実行すれば、業務の効率が大幅に向上します。
特定範囲をPDF出力するスクリプトの作成手順
ここからは、実際にスクリプトを作成する手順を説明します。スクリプトエディタの開き方から、コードの書き方、実行方法まで順を追って解説します。
スクリプトエディタを開く
- 拡張機能メニューを開く
Googleスプレッドシートのメニューから「拡張機能」をクリックします。 - Apps Scriptを選択
表示されたドロップダウンから「Apps Script」を選びます。新しいタブでスクリプトエディタが開きます。
PDF生成スクリプトを記述する
- 関数名を定義する
エディタに以下のコードを貼り付けます。関数名は「generatePDFfromRange」とします。 - アクティブシートを取得する
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); で現在のシートを取得します。 - 出力範囲を設定する
var range = sheet.getRange(“A1:D10”); のようにA1形式で範囲を指定します。範囲は任意のものに変更してください。 - 範囲をシートオブジェクトに変換する
var sheetWithRange = SpreadsheetApp.create(“temp”).getSheets()[0]; で一時シートを作成し、range.copyTo(sheetWithRange.getRange(1,1,range.getNumRows(),range.getNumColumns())); で範囲をコピーします。 - PDFのBlobを生成する
var blob = sheetWithRange.getParent().getAs(“application/pdf”).setName(“出力したいファイル名.pdf”); でPDFのBlobデータを作成します。 - ファイルを保存する
DriveApp.createFile(blob); でGoogleドライブのルートに保存します。フォルダを指定したい場合は、DriveApp.getFolderById(“フォルダID”) で取得したフォルダに createFile(blob) を実行します。 - 一時ファイルを削除する
一時的に作成したスプレッドシートを DriveApp.getFileById(sheetWithRange.getParent().getId()).setTrashed(true); でゴミ箱に移動します。
上記の手順で、指定した範囲だけのPDFが生成されます。ただし、このコードは一時ファイルを作成するため少し複雑です。よりシンプルな方法として、シート全体をPDF化してから不要部分を削除する方法もありますが、正確に範囲を出力するには上記の方法が確実です。
スクリプト実行時の注意点とよくあるトラブル
実行前に権限の承認が必要
初めてスクリプトを実行すると、権限の承認画面が表示されます。「許可を確認」をクリックし、自分のGoogleアカウントで認証を進めてください。Driveへのアクセス権限も要求されるため、承認が必要です。
範囲指定が正しく反映されない
getRange()で指定する範囲は、アクティブシート上の実際のデータ範囲である必要があります。空のセルが多いと余計な空白もPDFに含まれてしまいます。事前にgetDataRange()で使用範囲を取得する方法もあります。
ファイル名が重複する
同じファイル名で保存すると上書きされます。ファイル名に日時を付けるなど、ユニークな名前にすることをおすすめします。Utilities.formatDate(new Date(), “JST”, “yyyyMMdd_HHmmss”) を連結すると便利です。
実行時間制限に引っかかる
無料アカウントでは1回のスクリプト実行に6分の制限があります。大量の範囲をPDF化する場合は、処理を分割するか、時間制限の緩い有料アカウントを検討してください。
ADVERTISEMENT
手動PDF出力とApps Scriptの比較
| 方法 | メリット | デメリット |
|---|---|---|
| 手動PDF出力(ファイル→ダウンロード→PDF) | 操作が簡単で、すぐに実行できる | 毎回手動で範囲選択が必要。ファイル名の自動設定ができない |
| Apps Scriptによる自動PDF生成 | 範囲指定やファイル名を自動化できる。トリガーで定期実行も可能 | スクリプトの記述と権限設定が必要。初めての人は学習コストがかかる |
まとめ
この記事では、Apps Scriptを使ってGoogleスプレッドシートの特定範囲をPDF出力する方法を解説しました。getRange()で出力範囲を指定し、getAs()でPDFのBlobを生成し、DriveApp.createFile()で保存する一連の流れを理解できたはずです。このスクリプトは、日次報告書の自動生成や、特定のデータだけを抜き出して共有する場合に役立ちます。次は、生成したPDFをメールで送信するスクリプトに発展させてみてください。GmailApp.sendEmail()と組み合わせることで、さらなる業務効率化が実現できます。
ADVERTISEMENT
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Googleスプレッドシートの人気記事ランキング
- 【Googleスプレッドシート】GOOGLEFINANCE関数で株価・為替を取得!リアルタイムデータの呼び出し
- 【Googleスプレッドシート】印刷範囲を指定して印刷!特定範囲だけPDFや紙に出す手順
- 【Googleスプレッドシート】新しいスプレッドシートを作成する3つの方法!ドライブ・URL・テンプレート
- 【Googleスプレッドシート】数値の連続データを自動入力!オートフィルの活用
- 【Googleスプレッドシート】ダークモードを有効にする!目に優しい配色への切替
- 【Googleスプレッドシート】株価APIで株式データを自動取得!GOOGLEFINANCE超え活用
- 【Googleスプレッドシート】共有相手が編集できない時のチェック!権限と許可状態の確認
- 【Googleスプレッドシート】ページ設定で用紙サイズと向きを調整!印刷レイアウトの基本
- 【Googleスプレッドシート】Excelファイルxlsxをインポートする手順!ドラッグ&ドロップで取り込み
- 【Googleスプレッドシート】条件付き書式をコピーする!書式のみペーストの活用
