印刷範囲がランダムで変わるシートをPDF出力するVBA【ダウンロード可能】
PDF出力作業の効率をアップさせたい!
こんな要望に応えるため「印刷範囲がランダムで変わるシートをPDF出力するVBA」を開発しました。
エクセル業務で、
下方向にデータをコピペしてどんどん増やしていく。内容によって印刷範囲が変わる
という処理をする方が多くいらっしゃいます。
イメージとしてはこんな感じ
このようなデータのPDF出力処理を自動化するVBAを開発しました。
「印刷範囲がランダムで変わるシートをPDF出力するVBA」は以下のような問題を解決できます。
大量のPDF出力作業で膨大な手間と時間を要している
PDF出力する際データ1つ1つに名前を入力している
印刷範囲がランダムで変更になるので調整に手間がかかる
エクセルデータをPDF出力する作業がある!という方は是非参考にしてみてください。
ランダムで変わる印刷範囲をPDF出力するVBA
エクセル業務でデータを積み上げていくような作業の場合、印刷範囲がランダムで変わる事象が発生します。
下記は、情報をどんどん下方向に入力していく形式の一覧表です。
入力データが1ページ内で収まっていれば1ページ目を印刷し、
2ページ目にデータが入力されたら1ページ、2ページをPDF出力する
というVBAが必要になります。
1つのPDFデータで出力するVBAの作り方
上記のような編集内容で「条件によって印刷範囲を変えてPDF出力するVBA」がこちら
Sub PDF出力①()
Dim folder_path As String
folder_path = ThisWorkbook.Path & "\"
gyo = Cells(Rows.Count, 2).End(xlUp).Row
PgCou = WorksheetFunction.RoundUp(gyo / 65, 0)
For i = 1 To PgCou
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=folder_path & "PDF出力ページ" & ".pdf", From:=1, To:=PgCou, Quality:=xlQualityStandard, OpenAfterPublish:=False
Next
End Sub
1ページからデータが入力されているページまでをPDF出力する
という内容のVBAです。
4行目で「データが入力されている最終行数」を取得
5行目で「最終行数を使って印刷ページ数」を算出
6行目~8行目で「データが入力されている範囲」をPDF出力
実行結果
1ページずつ名前を付けてPDF出力するVBAの作り方
1ページごとに1つのPDFデータで出力するVBAがこちら
Sub PDF出力②()
Dim folder_path As String
folder_path = ThisWorkbook.Path & "\"
gyo = Cells(Rows.Count, 2).End(xlUp).Row
PgCou = WorksheetFunction.RoundUp(gyo / 65, 0)
If gyo < 66 Then
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=folder_path & "1ページ" & ".pdf", From:=1, To:=1, Quality:=xlQualityStandard, OpenAfterPublish:=False
Else
For i = 1 To PgCou
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=folder_path & i & "ページ" & ".pdf", From:=i, To:=i, Quality:=xlQualityStandard, OpenAfterPublish:=False
Next
End If
End Sub
ExportAsFixedFormatメソッドのページ数を指定することで1ページごとに1つのPDFデータで出力できます。
コード内の「From:=i, To:=i」がページ数の指定に該当。
5行目の「最終行数÷1ページの行数、余りを切り上げる」というコードはページ数を判別するために宣言。
実行結果
2種類のPDF出力VBAを使い分けることができればエクセル業務の効率を格段にアップさせることが可能です。
記事の後半では、この2種類のPDF出力VBAが設定されたエクセルファイルをダウンロードすることができます。
PDF出力VBAに興味のある方は是非参考にしてみてください。
指定するフォルダにシート内全てのデータをPDF出力するVBA
指定するフォルダにシート内全てのデータをPDF出力するVBAは
上記で紹介している「1ページごとに1つのPDFデータで出力するVBA」を応用したもの
で実際のエクセル業務に導入しています。
個人的に
これはいろんなエクセル業務に応用できるのでは!!?
と感じたのでどのような処理ができるのかをご紹介します。
VBAの概要
「指定するフォルダにシート内全てのデータをPDF出力するVBA」は以下の編集作業を自動化することが可能です。
下方向にどんどんデータを入力していく
内容によって印刷範囲(1ページの行数)がバラバラ
1ページずつ「氏名」+「ファイル名」+「年-月」というファイル名にする
シート内全てのデータをPDF出力する
エクセルの編集画面がこちら
サンプルでは28ページ分のデータが入力されています。
使い方
1.「PDF出力」ボタンを押下
2.ユーザーフォームにPDF出力するフォルダ場所を入力
3.実行ボタンを押下
以上です。
たったこれだけの操作で大量のページをPDF出力することができます。
実行結果
名前の付け方はコードを編集することで自由に変更できます。
導入されているVBA
「指定するフォルダにシート内全てのデータをPDF出力するVBA」に導入されているVBAがこちら
日付けを取得するVBA
ユーザーフォーム
複雑なVBAはほとんど使われていません。
それぞれの項目に各VBAの使い方が紹介されているサイトのリンクを貼っておきましたので参考にしてみてください。
業務内容に合わせたPDF出力VBAを導入する方法
業務内容に合わせて「PDF出力VBA」を導入するには、
自分でVBAを設定する方法とVBA開発依頼をする方法
の2パターンあります。
自分でVBAを設定する
業務内容に合わせたVBAを設定する際、以下の手順で作業を進めることをおすすめします。
どのような処理を実現したいのか具体的なイメージを持つ
VBAを書いてみる
行き詰ったらネットや参考書で問題点を一つ一つ解決していく
1番目の「具体的なイメージを持つ」ことがとても大切。
曖昧なイメージのまま作業を進めてしまうと、
あれ?何がしたいんだっけ?
という感じで頭の中がぐちゃぐちゃになってしまいます。
記事の最後で、
「ランダムで変わる印刷範囲に合わせてPDF出力するVBA」と「指定するフォルダにシート内全てのデータをPDF出力するVBA」
をダウンロードすることができます。
VBAが得意!という方は設定されているコードをアレンジして使ってみてください。
VBA開発を依頼する
VBAの開発依頼は
こんな処理をするVBAを設定してほしいー
と伝えるだけで業務内容に合ったVBAをゲットすることができます。
費用は掛かりますが、自分でVBAを設定するよりも簡単に導入できるのでとてもおすすめ
関連記事「マメBlogのVBA開発サービス」では、
PDF出力VBAをあなたの業務内容に合わせて改良するVBA開発サービス
を行っています。
このようなエクセル業務をしていて「処理忘れ防止VBA」を設定したい!
こんな感じのザックリとした依頼内容でOK。
VBAの設定は可能かどうか、費用はどれくらいなのか、すぐに返信がきます。
お気軽に問い合わせしてみてください。
>>> マメBlogのVBA開発依頼はこちら
PDF出力VBAのダウンロード
上記で紹介している
「ランダムで変わる印刷範囲に合わせてPDF出力するVBA」と「指定するフォルダにシート内全てのデータをPDF出力するVBA」
が設定されたエクセルファイルをダウンロードすることができます。
業務内容に合わせて自分でVBAを改良
設定されている様式をそのまま使う
コードを抜き取って別のVBAに組み込む
VBA学習のサンプルとして使う
エクセル業務の効率化に活用してみてください。
この記事が気に入ったらサポートをしてみませんか?