はじめに
この記事では、 ほぼすべての企業で行っている業務、請求書発行業務のPower Automate Desktopによる自動化についてご説明します。この作業、なぜかはわかりませんが、請求書のフォームが企業によっても違い、また、同一企業内でも部門によって違うという状態になっています。最近、クラウドで請求書自動化作成が提供されていますが、お客様のそういったニーズに対応するためにはアドイン(カスタムメイド)が必要になり割高になってしまう、という問題も出ています。一方アメリカはというと、昔からこの業務を提供するインテュイットというサービスがほぼ独占していて、アメリカのほとんどの企業の請求書のフォームがインテュイットのフォームになっているというなんともアメリカらしい状態になっています。この作業を自動化することで、作業効率化がはかれ、これまで費やしてきた時間をもっとクリエイティビティな仕事に振り向けられるようになります。
請求書作成業務を自動化しました
この請求書の作成業務、この時代にそもそも人がやるものではありません。請求書作成作業自動化をPower Automate Desktopで実現しましたのでご紹介します。 フローコード も詳しく解説します。ご活用ください。
Power Automate Desktop(以下PAD)とは
PADはMicrosoft社が提供しているRPA ツールです。 RPA とは「Robotic Process Automation(RPA)」の略で、「パソコンで行っている業務を自動化ツール」のことです。当社では、PCを使って行っていた業務の80%をRPA化しています。しかも、そのPCはメルカリで、8,000円で買った中古のHP T520シンクライアントだったりします。従業員5人を雇うのにかかっていたコストと比較すると 、そのインパクトは計り知れません(ここは経営者の方以外は読み飛ばしてください)。
この業務を自動化できれば
・見積書を自動作成
・発注書を自動作成
・納品書を自動作成
・領収書を自動作成
ということも可能です。自動化する 請求書 などの 帳票 を増やせば増やすほど、効率効果も高くなりますよ。
ほぼ無償版で十分のPAD
このPADは有償版、無償版があります。普通、こういった場合、無償版はあくまで有償版の御試しで、実用に使えるものではないのですが、PADは無償版十分に実務レベルとして使いこなすことができます。当社でも無償版を活用しており、なくてはならない基幹PCの必須ツールです。
請求書作成の具体的な手順
では、PADを使って、請求書の自動作成に取り組んでみます。
作成に必要なアプリは、
・PAD
・Excel
・PDF作成アプリ
です。
請求書に記載するデータは二種類のデータに分けることができます。ひとつは請求書が変わっても共通のデータ、たとえば社名、住所、電話番号など、もう一つは請求書ごとに変わるデータ、たとえば品名、数量、単価、合計金額などです。両方ともあらかじめExcelデータとして用意しておきます。そして、もうひとつの共通のデータはテンプレートとして用意します。一つ目を請求書テンプレート.xlsx、二つ目を請求データ台帳.xlsxとします。そして、これら二つのデータをPADで読み取っていったんデータの入ったExcelシートを作成し、PDFとして出力します。
請求書テンプレートを作成する
まず請求書テンプレートを作成します。下記のようなフォーマットご用意しました。
こちらはダウンロードしてお使いできます。
F5セル:会社名
F6セル:住所
F7セル:TEL
F8セル:FAX
F9セル:担当
F10セル:登録番号
F36セル:振込先情報
は情報をあらかじめ入力しておきます。
F列の金額は単価x金額 =D21*E21
F26セルは小計 =sum(F21:25)
F27 セルは消費税(10%) =INT(F26x0.1)
F28セルは合計 =F26+F27
C17セルは =F28
とします。今回はこれをデスクトップに保存します。
請求台帳データを作成する
次に、個別の件名ごとのデータを保存するExcelファイルを作成します。
A列:No.
B列:請求書番号
C列:お客様名
D列:件名
E列:品名
F列:数量
G列:単価
です。
今回は、件名ごとに登録できる品物の数は5件としました。
フロー作成手順
それでは、自動化の手順をご紹介します。
変数設定
まず、請求データ台帳でデータ記入個所の最初の行番号を設定します。請求データ.xlsxでは2行目から開始されているのでこれを変数として扱います。
変数名:%data_start_line%、値:2
とします。
ではPADで作成します。フロー名:請求書作成 としてフローを作成し、フロー編集画面を表示してください。
画面左側のアクション 「変数」―「変数の設定」をドラッグして画面中央のペインにドロップします。すると、変数の設定というウインドウが表示されるので、変数のNewVarという値をクリックして、
data_start_lineに書き換え、値に半角数字の2を入力します。この後、複数回の処理を繰り返しますので、データの先頭行の値を変数にしておきます。保存をクリック。
右側のペインにフローが保存されました。
次に、請求書の発行日をデータとして取得します。基本的にこのプログラムを稼働させた日=今日を発行日とします。
画面左側のアクション 「日時」―「現在の日時を取得」をドラッグして画面中央のペインにドロップします。
すると、変数の設定というウインドウが表示されるので、取得を「現在の日付のみ」に書き換え、保存をクリック。
右側のペインにフローが保存されました。
6
次に日付のデータを“yyyy年M月d日”というフォーマットに書き換えます。
画面左側のアクション 「テキスト」―「datetimeをテキストに変換」をドラッグして画面中央のペインにドロップします。
使用する形式を「カスタム」に、カスタム形式をyyyy年m月d日に書き換え、保存をクリック。FormattedDateTimeという変数が作成されました。
右側のペインにフローが保存されました。
Excelの起動
次に請求台帳データ.xlsxを開いてデータを読み込みます。
画面左側のアクション 「Excel」―「Excelの起動」をドラッグして画面中央のペインにドロップします。
「Excelの起動」というウィンドウが開くので、
Excelの起動:次のドキュメントを開く
ドキュメントパス:請求データ台帳が保存されているフォルダ
を選びます。ドキュメントパスは、この欄の右側をクリックすると、二つの青いアイコンが表示されるので、左側のフォルダアイコンをクリックします。そして保存をクリック。
右側のペインにフローが保存されました。
Excel ワークシーのセルから値を読み取る
まず、データの番号を取得します。
アクションから「Excel」―「Excelワークシートから読み取る」をドラッグして右側のペインにドロップします。「Excelワークシートから読み取る」ウィンドウが開きます。
先頭列をA,先頭行に変数%data_start_line%、そして生成された変数を「number」として、保存をクリック。
右側のペインにフローが保存されました。
次に件名の請求書番号を取得します。
アクションから「Excel」―「Excelワークシートから読み取る」をドラッグして右側のペインにドロップします。「Excelワークシートから読み取る」ウィンドウが開きます。
ここで、先頭列をB,先頭行に変数%data_start_line%、そして生成された変数を「seikyusho_number」として、保存をクリック。
右側のペインにフローが保存されました。
これで請求書番号を変数として取得することができます。
同じように「お客様名」を変数として取得します。「Excelワークシートから読み取る」のフローをドラッグアンドドロップして、先頭列をA,先頭行に変数%data_start_line%、そして生成された変数を「customer_name」として、保存をクリック。
右側のペインにフローが保存されました。
これでお客様名を変数として取得することができます。
「件名」を変数として取得します。「Excelワークシートから読み取る」のフローをドラッグアンドドロップして、先頭列をD,先頭行に変数%data_start_line%、そして生成された変数を「kenmei」として、保存をクリック。
右側のペインにフローが保存されました。
これで件名を変数として取得することができます。
動作チェックしてみましょう
これで6つのフローを生成することができました。
初めて変数というものに触れた方も大変多いと思います。ですので、ここで、変数が一体何でどういう挙動をするのかということを実際にプログラムを動かしてみてみます。
ただ、このプログラムをこのまま動かすと、ExcelがPADによって開かれたままになるのであまりよろしくないです。ですので、このチェックの時だけアクションから「Ecxel」―「Excelを閉じる」をペインにドラッグアンドドロップしてください。
ここは、保存クリックだけでOKです。
右側のペインにフローが保存されました。
では、プログラムを動かしてみます。その前に、せっかく作ったプログラムを失わないように画面左上の保存をクリック。
画面がいったん暗くなり、明るくなったら保存完了です。そして、PC上で開いている他のアプリがあったら終了してください。
では、その隣の実行をクリック。
すると、画面が切り替わり、上の1行目から1行ずつフローが実行されたと思います。
実行途中で、エラーが出た場合、メッセージに従ってエラー個所を修正します。この作業をデバッグといいます。
無事終了したら、画面右側の変数をご覧ください。下側にフロー変数という欄があり、今まで設定した変数が並んでいるのがわかります。
たとえば、customer_name をダブルクリックしてみましょう。
ここには、設定し通り「株式会社X」というお客様の名前が入っていることがわかります。また、この値はテキスト値であるということもPADは自動的にデータの型を読み取ってくれます。
このように変数とは、プログラム内でデータを一時的に保存するための名前付きの場所です。例えば、数値や文字列などを格納し、後で利用できます。変数を使うことで、プログラムの柔軟性が増し、同じデータを何度も入力する手間を省けます。変数には名前を付けることができ、その名前を使ってデータにアクセスしたり、変更したりすることができます。例えば、x = 5という変数を作成すると、xという名前で数値5を保存できます。その後、xを使って計算を行ったり、表示したりすることができます。変数はプログラミングの基本的な概念であり、効率的なコードを書くために欠かせない要素です。
Excelセル範囲からの値の取得
前のトピックでは、単一のセルからの値を取得するだけでした。今度は複数のセルから値を取得します。
株式会社Xのデータを見てみましょう。品名、数量、単価のデータは5セットあります。これを、ひとまとまりのデータとして保存します。
ここは、これからPADを使いこなすにあたって毎回出てくるテクニックなので、何回も読み込んでください。
まず品名データを読み取ります。アクション「Excel」―「Excelワークシートから読み取る」をペインにドラッグアンドドロップします。ここで、取得の欄を「セル範囲の値」に変更します。先頭列をE,先頭行を%data_start_line%、最終列をE、最終行を%data_start_line4%、生成された変数をhinmeiとします。保存をクリック。
右側のペインにフローが保存されました。
ここで、先ほどと同じようにプログラムを保存して、実行してください。すると、画面右側のフロー変数にhinmeiの変数が表示されています。5行1列という表示が見えます。
hinmeiをクリックしてください。
ここもポイントです。注文書番号は単一の値しかもっていませんでしたが、hinmeiは5個の値を持っていることがわかります。しかもdatatableという属性というものを持っています。
この変数というものは、一つの変数に複数の数の情報を持つことができるのです、ということを理解してください。エクセルのテーブルも複数のデータを持っています。同じようにプログラミングの世界ではこのように変数に複数の情報を持たせています。
そして、もう一つ覚えていただきたいのは、取り出し方も決まりがあるということです。
上の変数の表の横に#という欄がありますが、これは番号です。これを使います。
一番目の変数 himmei[0]=製品A代金
二番目の変数 himmei[1]=製品B代金
・・・
五番目の変数 himmei[0]=製品B代金
このように 「変数[#]」という表現で変数を取り出します。人間の直観に反するのですが、変数のn番目のデータは[n-1]として取り出します。同じように、数量・単価も変数に格納しましょう。
アクション「Excel」―「Excelワークシートから読み取る」をペインにドラッグアンドドロップします。ここで、取得の欄を「セル範囲の値」に変更します。先頭列をF,先頭行を%data_start_line%、最終列をF、最終行を%data_start_line4%、生成された変数をsuryoとします。保存をクリック。
右側のペインにフローが保存されました。
アクション「Excel」―「Excelワークシートから読み取る」をペインにドラッグアンドドロップします。ここで、取得の欄を「セル範囲の値」に変更します。先頭列をG,先頭行を%data_start_line%、最終列をG、最終行を%data_start_line4%、生成された変数をtankaとします。保存をクリック。
右側のペインにフローが保存されました。
これで、請求データ台帳の1つ目の請求書番号INV_0001の必要なデータを入手す弦事ができました。最終的には、この処理を複数回ループしてINV_0003までのデータ、全部で3つの請求書を作成しますが、まずは一つ目をPDFにするところまで先にご紹介します。
ここで一旦開いたエクセルを閉じましょう。
これを最終行に配置してください。
ここまで順境に来ていれば下のようにフローが作られています。
請求書 テンプレート.xlsxを起動する
これまでの処理で読み取り、変数に格納した値を 請求書 に転記していきます。そのためには、請求書 テンプレート.xlsxを開きます。
フローのコピーテクニック
ここで、時短テクニックをご紹介します。フローを作るとき、左のメニューからドラッグアンドドロップで作る方法のほかに、前に作ったフローをコピペして使うことができます。
請求書 テンプレート.xlsxを開くので、2番目のフローをコピペして使います。このエクセルファイルは、請求データ台帳.xlsxと同じようにデスクトップにおいてください。
2番目のフローをクリックして、フローをグレーアウトし、右端の・三つが重なったようなアイコンを右クリックします。
メニューが現れるので、コピーをクリック。
そして、最終行の下で右クリックを押すとメニューが出るので貼り付けをクリック。すると2行目がコピペされました。このテクニックぜひ覚えてください。
そしてこのフローをクリックして、ドキュメントパスを修正してください。また、変数のExcelIinstaneはExcelIinstane2に変更してください。
下記のようにフローを変更してください。
請求書 テンプレート.xlsxに読み取った変数を転記します。
アクション「Excel」―「Excelワークシートに書き込む」をペインにドラッグアンドドロップ
Excelインスタンス:%ExcelINstance2%
書き込む値:No: %seikyusho_number%
列:F
行:4
とします。ここで書き込む値は変数の前にNo:がついています。これは書類番号なのですが、これを生かすようにこのように入力します。
保存をクリックします。
右側のペインにフローが保存されました。
次に、お客様名、件名、発行日、品名、数量、単価のデータも転記します。書類番号と同じ方法で、
<お客様名>
書き込む値:%customer_name%
列:B
行:5
<件名>
書き込む値:%kenmei%
列:C
行:9
<発行日>
書き込む値:発行日:%FormattedDateTime%
列:F
行:12
<品名>
書き込む値:%hinmei%
列:C
行:21
<数量>
書き込む値:%suryo%
列:D
行:21
<数量>
書き込む値:%tanka%
列:E
行:21
ここで、PADの便利さが垣間見えます。品名、数量、単価はそれぞれ5個のデータを持っていましたが、一番最初のセルだけを指定すれば、残りの4つは自動的に縦に埋めてくれます。プログラミングの世界では、ここは縦に5個繰り返しの行を作って、1つずつ書き込んでいくのですが、変数複数→セルを縦に埋めると読み替えて実行してくれます。とても便利な機能です。
ここまで順調にくれば下記の通りのフローになります。
請求書も無事完成です。
作成した請求書をエクセルとPDFで保存する
作成した請求書は、社内で保管するためにエクセル形式、お客様に送付するためにPDF形式のファイルにすることが多いかと思います。ここでは、その二つの方法をご説明します。
まず、エクセルファイル形式で保存する方法をご説明します。保存する際ファイル名を請求書番号+お客様番号.xlsxの形式で保存します。ここでは、このエクセルファイルを保存するフォルダ名+ファイル名を変数として作成します。
アクション「変数」―「変数の設定」をドラッグしてペインにペーストします。
変数:excelpath
値:C:\Users\xxxxx\Desktop\%seikyusho_number%%customer_name%.xlsx
として保存をクリック。
右側のペインにフローが保存されました。
次にエクセルファイルを名前を付けて保存します。
アクション「Excel」―「Excelを閉じる」をドラッグしてペインにドロップ。
Excelインスタンス:%ExcelInstance2%
Excelを閉じる前:名前を付けてドキュメントを保存
ドキュメント形式:Excelブック(.xlsx)
ドキュメントパス:%excelpath%
として、保存をクリック。
右側のペインにフローが保存されました。
次にPDFファイルを作成します。PADには、エクセルファイルをPDFにするアクションは執筆時にはありません。
対応策として、Microsoftが代替え方法を提案してくれています。
VBScript を使用して Excel を PDF に変換する
VBScript を使用して Excel を PDF に変換する – Power Automate | Microsoft Learn
PADからVBAを実行させて、エクセルファイルをPDFに出力する方法です。
まず、PDFのフォルダパスを設定します。先ほどの変数excelpath作ったフローをコピペします。
変数:pdfpath
値:C:\Users\xxxxx\Desktop\%seikyusho_number%%customer_name%.pdf
として保存をクリック。
右側のペインにフローが保存されました。
次に、PADからVBAを実行するフローを作成します。
アクション「スクリプト―VBscriptの実行」をドラッグしてペインにドロップします。
実行するスクリプトに以下のコードをペーストします。
Dim Excel
Dim ExcelDoc’Opens the Excel file’
Set Excel = CreateObject(“Excel.Application”)
Set ExcelDoc = Excel.Workbooks.open(“%excelpath%”)
‘Creates the pdf file’
Excel.ActiveSheet.ExportAsFixedFormat 0, “%pdfpath%” ,0, 1, 0,,,0’Creates the pdf file’
Excel.ActiveWorkbook.Close
Excel.Application.Quit
この時、WINDOSの設定でプリンタの設定を確認してください。必ず、「Microsoft Print to PDF」を既定のプリンタに設定してください。
ここまでで、請求書データ台帳.xlsxから、請求情報を読み取り、請求書テンプレート.xlsxにデータを転記し、請求書番号+会社名でエクセル、PDFファイルを出力することができました。
繰り返し処理
ですが、上記で作成したフローだけでは契約管理表( Excel )のうちの1社(株式会社A)の情報しか 請求書 化できていません。なので、契約管理表( Excel )に記載のある全ての情報を 請求書 化できるようにアクションを追加していきます。次のステップとして「繰り返し」のフローに改造します。
この「繰り返し」という操作は、プログラミングでは必須スキルです。このフローをリストの会社分書くということは合理的ではありません。繰り返しのループを作り、ループごとに変数を変えていくということで繰り返し処理ができます。PADのアクションのループをクリックしてください。
For each, Loopという二種類のループが組み込まれています。ですが、このアクションを使うと、操作が複雑になり、エラーになりやすいので、今回はもう一つ別の方法を
1社ごとの処理は、5行目「Excelワークシートから読みとる」―25行目「VBscriptの実行」ですので、25行目の処理が終わったら5行目にもどる、というフローを追加します。
まず、4行目と5行目の間に「フローコントロール」―「ラベル」をドラッグしてペインにドロップします。
ラベルを「処理開始」として保存をクリック。
右側のペインにフローが保存されました。
ここで、4行目が1行追加されましたので、全体の行は26行になります。
26行目の処理が終わったら4行目に戻る処理を入れるのですが、この状態では変数%data_start_line%の値は2です。このままでは、株式会社Xの処理に戻ってしまいます。
次のデータは7行目なので、%data_start_line%に+5してあげます。
そうすると、次の処理は%data_start_line%=7となり、株式会社Rの処理をしてくれます。この処理をインクリメントと呼びますので覚えてください。
最終行にアクション「変数」―「変数を大きくする」をドラッグしてペインにドロップします。
変数名を%data_start_line%、大きくする値を5(半角数字)として保存をクリック。
右側のペインにフローが保存されました。
ラベルに移動を「処理開始」として保存をクリックします。
右側のペインにフローが保存されました。
次に処理終了のラベルを作成します。
アクション「フローコントロール」―「ラベル」をドラッグしてペインにドロップします。
ラベル名を「処理終了」として「保存」をクリックします。
右側のペインにフローが保存されました。
このプログラムを動かすと、PADは処理すべきエクセルのデータがなくても、繰り返し処理を続け、いわゆる「無限ループ」に入ってしまいます。そのループを抜けるための仕組みを入れることが必要です。
今回のデータでは、株式会社Cのデータが終了すると、次に17行目のデータを読みます。ここには変数として読み込んだ%customer_name%にデータが入っていませんので、読み込んだセルにデータがない場合、ループを抜けるという処理を組み込みます。
変数%customer_name%を読み取るフローの下に、アクション「条件」―「If」をドラッグしてペインにドロップします。
ここで、最初のオペランドは「%customer_name%」、演算子は「と等しい(=)」、2番目のオペランド「%’’%」です。この%’’%はデータが空白ということを意味します。
注意!シングルクオーテーション(‘)を二つ続けてください。ダブルクオーテーション一つ(“)ではありません。
右側のペインにフローが保存されました。
この形のフローは初めて登場しました。これは「もし%customer_name%が空白ならば、以下のフローを処理する」という意味です。ですので、次にIfのフローの下に行いたいフローをドロップします。アクション「フローコントロール」―「移動先」をドラッグしてペインにドロップします。
ラベルに移動を「処理終了」とし、保存をクリックします。
右側のペインにIF処理フローが保存されました。
フロー作成の途中にエクセルを閉じる(インスタンスはExcelInstance)がありますが、これは、最後の行に移動してください。フローをドラッグして、マウスでつまんだまま下にスクロールして、一番下の行でドロップします
完成しました!フローを実行してみましょう
行数にするとわずか32行でしたが、解説を見ながら作ると2-3時間かかるかと思います。大変お疲れさまでした。今回のプログラムを実行すると、デスクトップに3つエクセルファイルとPDFファイルが生成されます。
無事でき上ると感動しますね!!
まとめ
今回は、PADの実践テクニックとして、Power Automate Desktop で 請求書を自動で作成する。をお伝えしました。このテクニックは執筆日2025年3月14日時点の最新版のPADで動作確認できています。長時間おつきあいくださりまして誠にありがとうございます。
無料サービス
<フロープログラム無料進呈>
PADはフロープログラムをテキストにいったんコピーしてペインにペーストすると、利用することができます。このテキスト、実際に使ったエクセルファイルふたつを無料で進呈しています。下のボタンをクリックいただくと、テキストプログラムのダウンロードリンクを入手できます。
POWER AUTOMATE DESKTOP関連記事
- 【完全解説・コピペOK】Power Automate Desktop で 請求書を自動で作成する
- Power Automate Desktopフローのコピー
- Power Automate DesktopでPDFを読み込んでエクセルに転記する
- Power Automate for desktopをインストールする
- Power Automate Desktopを使ってOUTLOOKメールを自動で送る②
- Power Automate Desktop を使ってOutlookメールを自動で送る①
Power Automate Desktop利活用支援サービスのご案内
Power Automate Desktopを会社で運用したいが、リソースがたりないというお悩みはございませんか?
当社ではPower Automate Desktop利活用支援サービスをご提供しております。