Power Automateを活用して電子帳簿保存法に対応する為に社内改善したこと

はてなブログ アイキャッチ画像 はてブ Blog.png

電子帳簿保存法への対応如何ですか?

電子帳簿保存法が令和4年1月から改正されましたが、皆さんの会社の対応は如何でしょうか? 個人的に、去年は電子帳簿保存法への対応準備で、翻弄された1年ではなかったかと思います。

弊社バックオフィスサービス

image.png

弊社では、バックオフィスはMoney Forwardの製品郡で統一していて、図のようにできる限り転記作業や間違いなどを防ぐ為に自動取込をおこない、仕訳帳を入力せず振込までを完結できる状態で運用しています。

コロナ禍でも課題になっていた、

  • 経費精算の紙の領収書提出
  • 郵送されてくる紙の請求書・発注書の類

この辺りも電子帳簿保存法への対応で電子化できると、リモートワーク時でもデジタル申請が行えて、かなり幸せになれそうです。 電子帳簿保存法への保存要件も確認して、関連サービスの黄色い枠の「クラウドBox」に電子データを保存することにしました。

■電子帳簿保存法への保存要件 https://www.nta.go.jp/law/joho-zeikaishaku/sonota/jirei/05.htm


共有メールボックスの作成は、Microsoft365管理センターの「チームとグループ」にあります。「共有メールボックスを追加」から作成してください。 なおメールボックスが作成されるまで時間がかかりますので、事前に作成することをおすすめします。 また、共有メールボックスにご自身のアクセス権限の付与を忘れずにしましょう。

電子保存の課題

クラウドBOXのアカウントを各スタッフに配布して、請求書を電子化して保存することも検討しましたが、経理担当者から「一覧にまぎれてしまって、どのファイルが当月末支払いの請求書なのかわかりにくく、支払い漏れが発生しそう」との意見があり、共有メールボックスに送ってもらって、その添付ファイルを自動的に保存させる仕組みをPower Automateのクラウドフローで実現してみようということになりました。

クラウドBOX画面 image.png ※保存するとタイムスタンプを付与してくれます。詳細な検索機能もついていて、とても便利です。 ファイルのプレビューは見れますが、保存する際のファイル命名規則をルール化しないと、わからなくなってしまいそうです。

やりたいことを整理

まずは、やりたいことを整理します。 請求書送付用の共有メールアドレスにメールが到着したら、フォルダ振分の設定の記載されたエクセルファイルを参照して、送付元のメールアドレスと同じメールアドレスを見つけたら、自動的に当月のフォルダ内に会社ごとにフォルダを作成して、添付ファイルを保存してくれるようにします。

image.png

本来は「承認を飛ばしてクラウドBOXへ自動保存」と行きたいところですが、念の為に経理担当者の確認をもって手動で登録することにしました。 経理データとは、外注費の仕分けを作成した際に、クラウドBOXに保存されたデータを指定することで、関連付けします。

Power Automateを作成する

ここから実際のPower Automateで、どのように設定しているのかを解説します。

image.png

1.新しいメールが共有メールBOXに届いたとき(V2)

まずはトリガーとして、共有メールボックスにメールが届いたら、処理を開始します。

image.png

元のメールボックスのアドレス:共有メールボックスのメールアドレスを入力します。

フォルダ:Inbox ↑受信ボックスのことです。

必ず忘れていけないのが、「添付ファイルを含める」「はい」にすることです。 これを設定しないと、OneDriveに保存したファイルが「壊れている」と言われて慌てます😁やりがちなので注意しましょう。


共有メールボックスの作成は、Microsoft365管理センターの「チームとグループ」にあります。「共有メールボックスを追加」から作成してください。 なおメールボックスが作成されるまで時間がかかりますので、事前に作成することをおすすめします。 また、共有メールボックスにご自身のアクセス権限の付与を忘れずにしましょう。

2.表内に存在する行を一覧表示

image.png

請求書を保存するOneDriveのフォルダにエクセルファイルに記載しておいて、送信元の担当者メールアドレスや会社名を記載した設定ファイルとして読み込んで利用します。 このような形にすると、誰でも簡単にメンテナンス出来て便利です。

場所:ご自身のご契約のOneDriveを選択してください

ドキュメントライブラリ:ご自身のご契約のOneDriveを選択してください

テーブル:エクセルファイルのシートに設定したテーブル名を指定します

※エクセルファイルのテーブルは、このような内容になっています。 image.png

3.日時変数(変数を初期化する)

image.png

当月のフォルダを作成する為に変数を作成します。日付を取得して文字列を加工しています。

名前:日付変数

種類:文字列

値:formatDateTime(convertTimeZone(utcNow(), 'UTC', 'Tokyo Standard Time'),'yyyy年MM月') ↑現在の日時を取得して、〇〇〇〇年〇〇月という文字列を作成しています。

4.表データ配列(変数を初期化する)

image.png

後で利用するのですが、エクセルファイルに記載のないメールアドレスから送信があった場合を想定して、判断する条件に使用するため、アレイ(配列)にエクセルのデータを入れています。

名前:表データ配列

種類:アレイ

値:表内に存在する行を一覧表示の「Value」を指定します。

5.表の行数変数(変数を初期化する)

image.png

「4.表データ配列」でなぜ変数を作成したかというと、行数をカウントするために作成しています。 この「表の行数変数」の「値」で配列の個数を保存しています。

名前:行数変数

種類:整数

値:length(variables('表データ配列')) ↑lengthは配列の数をカウントする関数です。

6.ループカウント変数(変数を初期化する)

image.png

後の工程でエクセルの行にあるメールアドレスと合うものがないのか、毎回ループして確認するのですが、合致してない時だけこの「ループカウント変数」を増加させて、「5.表の行数変数」の数と比較して、登録のない人からのメールが届いているか判断します。

名前:ループカウント変数

種類:整数

7.ユーザーの@mention トークンを取得する

image.png

登録のないユーザーからメール送信があった場合に、Teamsのチームにメッセージを送りたいので、その際にメンションをつけるために作成しています。

ユーザー:メンションを通知したい方のメールアドレスを指定してください。

8.全行ループ(Apply to each)

image.png

ここからループをして、送信者のメールアドレスがエクセルファイルに記載されたメールアドレスと合致しているか1行ごとに調べて、

  • 合致していたら:添付ファイルをOneDriveに保存

  • 合致してなかったら:変数ループカウントを増やします。 ループする中で、エクセルの行数を保存した変数とループカウントの数が合致したら、メールアドレスが存在しなかったことになるので、Teamsのチームに投稿してお知らせします。

ここのセクションは長いので分割して解説します。

8-1.全行ループ(Apply to each)

image.png

以前の手順から出力を選択:「2.表内に存在する行を一覧表示」の「Value」を指定します。これでエクセルの行数分ループしてくれます。

8-2.条件2(コントロール→条件)

image.png

メールの差出人をエクセルに設定した「メールアドレス」に合致しているのか条件設定しています。

左の値:「1.新しいメールが共有メールBOXに届いたとき(V2)」で取得できる「差出人」

右の値:「2.表内に存在する行を一覧表示」で取得できる「メールアドレス」

8-2-1.「はい」の場合

image.png

メールの添付ファイルが複数あったら、全て保存したいのでループして添付ファイルをすべて保存します。

Apply to each

以前の手順から出力を選択:「1.新しいメールが共有メールBOXに届いたとき(V2)」の「添付ファイル」を指定します。

ファイルの作成(OneDrive)

フォルダーのパス:自身のOneDriveに作成した保存用フォルダを指定します。フォルダパスに「日付変数」で〇〇〇〇年〇〇月の文字列、さらにエクセルにある「会社名」の文字列を繋げることでフォルダを作成しています。

ファイル名:「1.新しいメールが共有メールBOXに届いたとき(V2)」の「添付ファイル名前」

ファイルコンテンツ:「1.新しいメールが共有メールBOXに届いたとき(V2)」の「添付ファイルコンテンツ」

8-2-2.「いいえ」の場合

image.png

いいえの場合には「ループカウントを増やす」で数をカウントして、条件で「ループカウント変数」と「行数変数」が等しいか判断して、「はいの場合」にはTeamsのチームにメンションつけて投稿します。

ループカウントを増やす

image.png

名前:「6.ループカウント変数」を指定します。

値:「1」 ↑1づつカウントアップしたいので1を指定しています。

条件

image.png

左の値:「6.ループカウント変数」の「ループカウント変数」

右の値:「5.表の行数変数」の「行数変数」

はいの場合

image.png

#チャットまたはチャンネルでメッセージを投稿する

投稿者:フローボット

投稿先:チャンネル

チーム:ご自身の使いたいチームを指定してください。

チャネル:ご自身の使いたいチャネルを指定してください。

メッセージ:投稿するメッセージを作成します。 メンションをつけて通知したいので、「7.ユーザーの@mention トークンを取得する」から「@mention」を指定します。 件名には「1.新しいメールが共有メールBOXに届いたとき(V2)」の「件名」 本文には「1.新しいメールが共有メールBOXに届いたとき(V2)」の「本文」 を指定して、メールの文章がわかるようにしています。

9.終了

image.png

終了した場合に、成功したのか失敗したのか判断したい場合に設置しますが、今回は作成してもしなくても動きます。別で処理を行う場合を想定して暫定で作成しています。

以上で、Power Automateの作成は終了です。


テストを忘れずに! 試しに添付ファイルをつけて共有メールBOXにメールを送ってテストしてみましょう。 「新しいメールが共有メールBOXに届いたとき」のトリガーは発動するのに少し時間がかかります。

最後に

メールで送られてくる添付ファイルをフォルダに保存するシンプルな自動化ですが、請求書の送付者にCCで共有メールアドレスに入れてもらうだけで、社名フォルダごとに保存されるので、非常に手間が軽減されますね。

この記事を読んでいただいた皆さんの会社でも、ぜひ活用してみてください。

弊社では、Money Forward製品の取り扱いも開始いたしました。 このような自動化に興味のある企業からのご連絡をお待ちしております。

お気軽にご依頼・ご相談ください

前へ

フロッグポッドの社内オンライン勉強会の改善をやってみた

次へ

Azure DevOpsでPower AppsのGit管理をするぞ。