【RPA】Excel+WinAutomationで請求書作成・PDF化・定型文にてメール送付。
6/182018
先日問い合わせをしていただいた方が、
「Excelで請求書を毎月作成して、PDF化して、メールで送信している」
とおっしゃっていました。
聞くところによると、請求書作成ソフトも検討したけれども、外資系企業のお客様の場合項目が多く(タイムチャージ形式のため)汎用フォーマットでは対応しきれないためExcelを使っているとのことでした。
ただこのような請求業務に悩まれていまるようで、
- 文字数などの関係でExcelのフォーマットが微妙に崩れる
- Excel作成・AdobeでPDF化・メール文作成・添付して送付がすべて手作業なので時間がかかる、ミスが生じる
ということでした。
会計ソフト、請求書作成ソフトで請求書を作っている会社も増えましたが、まだまだExcel対応というところも多いでしょう。
Excelは誰にでも使える、という点がメリットですがそれがかえってデメリットになることもあります。
そこで、Excel、Adobeなどのオフィス系ソフト、メールソフトを連携できるRPAソフト(WInAutomation)を使って今回の請求業務を自動化する流れを作ってみました。
Excelフォーマットの請求書のどこが問題か?
Excelで作られた請求書は、入力制限などがかけられていないものが多いです。
フォントや文字数など自由に扱える点が魅力です。
次のようなフォーマットを請求ごとにコピーして使うことができます。
ただ、こういったExcel請求書には大きな欠陥があります。
それは、「データとして使えない」ということ。
紙で作っていたものをただExcelで再現するだけのときに起きがちな例です。
データとは、1列に1データという形が整った次のようなものを指します。
こういった形になって初めてグラフやピボットテーブルといった「アウトプット」に活かすことができます。
Excelでデータを扱う時には、データ形式の「インプット」とグラフ・ピボットテーブルなどの「アウトプット」は明確に分けなければ効率化が遅れます。
そこで、今回はまず請求書データを用意し(インプット)、そちらを請求書フォーマット(アウトプット)に自動転記・PDF化する流れを作りました。
請求書をメールに添付して、送る作業にもヒューマンエラーの可能性が
請求書の内容を確認して、いざ送付というときに人がいちから宛名を入力し、メール本文を作成し、該当するファイルを添付した場合どうしてもヒューマンエラーが起こりやすくなります。
(私もやったことありますが)
- 宛先間違い
- 会社名間違い
- 本文の内容間違い
- ファイルの添付し忘れ、違うファイルの添付
など。
こういった作業もなるべく「人の手」を離れ、自動化させればミスが減ります。
そこで、宛先・会社名・メール本文もすべてExcelのデータに一元化させることによりメール送付を自動化する流れを今回作ってみました。
手順
今回のロボットの大きな流れは以下のとおりです。
データ形式の請求書一覧をExcelにて準備
↓
(ここからロボットがやります)
データ形式の請求書一覧から必要なデータをExcelの請求書フォーマットに転記する
↓
請求書をPDF化する
↓
「作成日付+会社名+”請求書”」のファイル名でPDFファイルを保存
↓
メールにて宛先、会社名、メール本文など必要なデータを請求書一覧から転記、PDFファイルを添付して送信
1 データ形式の請求書一覧をExcelにて準備
まず、データ形式の請求書一覧をExcelで準備します。
先ほど説明した1列に1データ、とった形式です。
ここで注意は、メールの宛先、メール本文、署名などメール送付に必要なデータもすべて入力しておくということです。
例えば、お客様によって文言を変えたい場合などもすべてこの一覧に反映させておけばそれがメールに反映されるので効率的です。
2 データ形式の請求書一覧から必要なデータをExcelの請求書フォーマットに転記する
ここからWinAutomationで設定しました。
先ほど作った請求一覧から、請求書フォーマットへ転記することを自動化します。
レコーディング機能(Excelでいうマクロ機能のようなもの)は使わず、今回は全部アクションを手動で設定しました。
WinAutomationの画面はこのような感じです。何度か紹介しているRPAソフトの「UiPath」と似ています。
左側に「実行したいこと」を選ぶActions、中央にロボット設計画面、右側にActionsの詳細を決める「Functions」、右下に変数を設定する「Valuables」があります。
Excelを立ち上げて、Excel範囲をコピーするまでが以下のとおりとなります。
(UiPathと違って文字が多いのが特徴です。ただ説明が詳しく書かれているのでどんなことをするのかが読めばわかります)
まずは「Launch Excel」アクションでExcelを起動します。
「Set Active Excel Worksheet」で該当するシートを選択します。
次にExcelデータの範囲を選択してコピーします。
先に「Get First Free Column/Row from Excel WorkSheet」で初めて空白になる列数・行数を取得しておきます。(それぞれFirstFreeColumn」「FirstFreeRow」という変数に格納しておく)
範囲をコピーするときは「Read from Excel Worksheet」を使います。 空白になる1つ手前の列・行なので列数は「First Free Column−1」、行数は「FirstFreeRow−1」と範囲指定します。
コピーしたデータ範囲は後で請求書に貼り付けるときに使うので、変数に「ExcelData」と入れておきます。
結果的に左端から表全体を選択・コピーできます。
次に、請求書のフォーマットに今選択した範囲のデータを貼り付けていきます。
下記のとおりに、請求書一覧からデータを転記します。
したいことは、請求一覧シートの1行目から最後の行まで、項目を転記することなので「For Each」(ある範囲のデータについて一定のことを繰り返し実行するステートメント)を利用します。
繰り返し処理を行う範囲は先ほどコピーした請求一覧の範囲である「ExcelData」を、取得した行データは変数「ExcelDataRow」に格納します。
Excelに貼り付けを行うときは「Write to Excel Worksheet」アクションを利用します。
どの項目かを指定するには「ExcelDataRow[“項目名”]」という形で指定し、かつ請求書フォーマットの貼り付け先を指定します。
3 請求書をPDF化する
請求書へのデータ貼り付けが終了したら、PDF化して、「作成日付+会社名+”請求書”」のファイル名で保存します。
ファイル名に作成日付を入れるので、「Get Current Date and Time」アクションで今日の日付を取得し、「Convert DateTime to Text」アクションでテキスト用のフォーマットに変換します。
変換後の日付を変数「FormattedDateTime」に格納します。
ファイル名を「今日の日付+会社名+請求書.pdf」にするために、「Set Variable」アクション(変数を設定するためのアクション)を使って変数「FileName」を以下のとおり作成します。
そして、いよいよPDF保存。
通常Excelファイルを「名前をつけて保存」するときはCommandキー+F12ですが、反応してくれませんでした。
そこで
ファイル(Alt+F)→エクスポート(E)→PDF/XPSドキュメントの作成(P)→PDF/XPSの作成(A)とクリックしています。(以下井ノ上陽一さんのこちらのブログ参考にさせていただきました。一人じゃできなかった・・)
ショートカットキーを使うときには「Send Keys」アクションを利用します。
保存するときは、Tabキーを一度押してp(PDF選択)を入力、Enterで保存します。
ロボットで表すと以下の通りになります。(一旦IME無変換にしてからp、Enterキー)
無事PDFが作成されます。
ファイルのある場所は、後ほどメール送信に利用するので、変数「FilePath」に格納します。
メールソフトを立ち上げ、必要なデータを請求書一覧から転記、PDFファイルを添付してメール送信
最後に、先ほど作ったPDFの請求書をメールで添付して、送信します。
メールを送信するときは「Send Email」アクションを使います。
下記のように、ExcelDataRow[項目名]とすれば、請求一覧シートから必要なデータを読み取ってくれます。ファイルパスは「FilePath」「FileName」と変数を二つ使って指定しています。
EmailソフトのSMTPサーバーの情報を入力します。
(今回はGmailをOutlookで送受信する設定にしました。)
以下のように、客先ごとに内容を変えて送付ができます。
【基本】
【追加文あり】
【英文】
以上で、WinAutomationの設定は終わりです。
動画
一連の流れを動画にしてみました。
3つの請求書を自動作成・PDF化・メール送信し、
最後にテスト用に送ったメールアドレスへの受信を確認しています。
まとめ
今回は請求書作成、PDF化、メール送信をWInAutomationで自動化しました。
PDF化まではExcelVBAでやって、メール送信だけWinAutomationでやるほうが安定するかもしれません。メール作成までして送信前だけ確認するのも。
Excelのフォーマットについては今回触れませんでしたが入力制限等かけておいてフォーマットが崩れないようにしておく、一元化させておく、など対策すると良いと思います。
編集後記
週末は、来週の引越しのために片付けを。
15年の蓄積は、結構ありました。引越し作業あるあるですが、「あ、これここにあったんだ」で作業がとまることも・・(^^;;
Today’s New
不要なものを一気に捨てる