こんにちは、しょーい(@showilog)です。
エクセルのデータをPDFに保存してメール送信…なんてことありますよね。私は毎日やってます。
見積書や請求書・資料作成も作ってるので毎日エクセル→PDF保存の連続です。
このとてつもなくひと手間な業務。
結論から言うと、エクセルからPDFの一発変換のショートカットは「ありません」。
私はこれを知ったときに絶望しました。この微妙なひと手間をなんとかできないものなのかと・・・。
そこで考えました。
ショートカットが無いなら自分で作ってしまえば良いんだと。
こちらの記事は
エクセルデータ→PDFデータにボタン1個で保存するVBAコードの解説をしています。
エクセルをPDFに保存する方法
まずは一般的な保存方法からおさらいします。
これを知らないだけでもだいぶ損してますので、是非覚えて帰ってください。
F12ボタンから保存
キーボードの右上にあるF(ファンクション)ボタンです。
あまり知られていないかもしれませんが、「名前をつけて保存」の一般的なショートカットだと思います。
確かに便利でお手軽なのですが、F12を押すとそのまま保存されるわけではなく
ボタン押す→名前を選ぶ→ファイルの種類を変更する→保存ボタンを押す
と、色々決めないといけないんです。
これだけで4ターンも使ってしまっています。
F12ショートカットであれば名前も自由に決められるし、PDF以外も選べるので確かに便利です。
しかしこれでは最速のショートカットとは言えません!
クイックアクセスバー
ネットで調べるとけっこうこのやり方が推奨されています。
できるネットさんの記事を見てもらえるとわかりやすいと思います。
エクセルの一番上の場所に専用のカスタマイズボタンを選んで置けるんです。
確かに便利!便利です。
ですが実際に使ってみると。
マウスでボタンを押す→名前を変更する→保存ボタンを押す
3ターンです。
確かに少し短くなりましたが、私の求める最速には一歩届かずといったところです。
VBAで一発保存(最速!)
エクセル→PDFの保存は上の2つくらいしか有効なショートカットがないのが事実です。
ですが、私は仕事で毎日PDF保存をしていたので常にモヤモヤしていました。
なので、ショートカットを自分で作りました。
コードはこちらです
Sub SavePDF() Dim fileName As String '保存先フォルダパス&ファイル名 Dim FName FName = ActiveWorkbook.Name FName = Replace(FName, ".xlsm", "") fileName = ActiveWorkbook.Path & "\" & FName ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, fileName:=fileName End Sub
コード自体はかなりシンプルです。
作業中のファイルと同じエクセルの階層にPDFファイルを保存します。
※8行目でパス取得・9行目で指定
PDFデータの名前はエクセルと同じ名前で保存されます。
※5行目で取得
そのままだと拡張子も保存されてしまうので、拡張子だけ消してます
※6行目で変換
PDFデータの名前を変えたければ、5行目をいじってもらえれば大丈夫です。
私は請求書とか見積書とかを作るときに5行目にコードを書き足したものを使っています。
重要なのは、このコードを「PERSONAL.XLSB」(個人用マクロブック)に登録することです。
ここに保存しないと常に使えるショートカットになりませんのでご注意ください!
ショートカットキーに登録する!
このコードを書いただけでは起動しないので、これをショートカットキーに登録します。
エクセルタブの
「開発」→「マクロ」→「savePDF」を選んでもらい、オプションを選択します。
ショートカットキーと表示があるので、そこで使いやすいキーを選んで入力してください。
※下画像参照
私は左手だけで操作したい+クイック分析は使わないので「Q」キーに設定しています。
ctrl + Jのショートカットキーは存在しないので、それを選んでも良いかもしれません。
ショートカットを押してみる
これで登録が出来たと思います。
1点注意があるとすれば、エクセル上に何も入力がない状態だとエラーになりますので注意してください。
何かしらデータが書き込んであって、それをPDF化したい目的なのでそこは問題ないと思います。
では実際にやってみた流れです。
まずデスクトップ上にテストファイルのエクセルを用意しました。
上の状態で、前もって登録していたショートカットキー「CTRL + Q」を押してみます。
すると・・・?
同じ階層にファイルができました!!
PDFファイルを見てみると、しっかり元のエクセルデータの中身のまま保存されていますね。
最速のショートカット完成
このVBAを使えば、最速1ターンで保存することができるんです。
ボタン一発で保存できるのはかなり楽です。私も毎日使ってます。
名前を毎回いじる必要はありますが、元のエクセルデータ上につけたいファイル名のデータがあれば、そこを参照すれば何の問題もないです。日付等もあれば、それも設定すればつけられます。
毎日PDF保存がめんどくさいなぁ、と思っている方。
是非使っていただきたいマクロのご紹介でした。
初めまして。
こちらのコードを使わせていただき、VBAでPDFがつくれました。
しかし、1点ご教授いただければ幸いです。
PDFにした際、「.xlsx」が残ってしまいます。
例えば、「Test1.xlsx」というExcelをPDFにすると、「Test1.xlsx.pdf」になってしまいます。
この解決方法をご教授いただければ幸いです。
よろしくお願いいたします。
ーーーーーーーーーーーーーーー
【使用したコード】
Sub SavePDF()
Dim fileName As String ‘保存先フォルダパス&ファイル名
Dim FName
FName = ActiveWorkbook.Name
dd = Replace(dd, “.xlsx”, “”)
fileName = ActiveWorkbook.Path & “\” & FName
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, fileName:=fileName
End Sub
ーーーーーーーーーーーーーーーー
コメントありがとうございます!
一部コードが古いままでしたので記事内のコードを修正しました!
新しくなっている内容で再度試してみてください!