こんにちは、おかちゃんせんせいです!
これまで業務効率化する上で、作業を自動化する方法の一つとしてWebスクレイピングの記事を書いたことがありました。

この時はExcel VBAを選択しましたが、自動化する方法として紹介した方法のうち、前回紹介していない自動化ツール『Power Automate』を今試験運用しています。
まだ初心者でほとんど理解できていないことも多いですが、初心者なりに試行錯誤してチャレンジしてみて、なかなかドンピシャな内容の記事がなかったので、記事にまとめておくことにしました。
※なお、今回の記事については、実機がMacでPower Automate Desktopがインストールできないため、クラウド上で実行するPower Automateだけを使用した方法になります。
目次
今考えている構想をPower Automateで実現できるかどうか?
現在、管理しているデータのうち特定の日付データが実行日になったら、ある処理を自動処理するフローを構想しています。
ある処理とは、たとえば条件を満たしたらメッセージを送ったり、別サービスに処理を流したり、請求書を発行したり。
とにかく、他のアプリと連携してデータを定期的にチェックして、条件次第で自動反映させる処理を考えているのです。
その上で、日付のジャッジが重要になるわけですが、、、
Power AutomateとExcelの開発元は同じMicrosoftなのに、調べていくうちにとても厄介なことが判明。
それが、取得する日付データの書式が両者で違うと、いう最も厄介な展開です。
書式が違うだけで異なるデータと認識する
Excelを操作していてよくありがちなのが、見た目同じ値に見えても、数式では異なるデータとして認識されているケースです。
よくあるのが書式が『数値』の認識でいるけど、Excelでは『文字列』として認識されてしまっているパターンです。

あと、時々あるのが『日付』としてデータに取り込んだのに、なぜか5桁の数値として取り込まれてしまっているパターンです。
これは、Excelでは日付はシリアル値で表現され、表示形式が『日付』のように見せているためです。
この現象が、なんとPower AutomateとExcel間で起きてしまうのです・・・。
1900年1月1日を「1」とした連番のこと
自作で作ったプログラムならいざ知らず、両方とも天下のMicrosoftのアプリなのにー!!
——と嘆いても仕方ないので、どちらかの書式に合わせて認識させてあげるしかありません。
Step1:Power Automate側の処理実行日の日時データを取得する
まず最初に行うのが、Power Automateで処理が実行された日付のデータを取得することです。
- 新しいアクションを追加する。
- 「組み込み」→「変数」→「変数を初期化する」というアクションを選択する。
- 名前:日付変数(任意)、種類:文字列、値:convertTimeZone(utcNow(), ‘UTC’, ‘Tokyo Standard Time’)を入力する。

ポイントは、値を式(convertTimeZone(utcNow(), ‘UTC’, ‘Tokyo Standard Time’))で表現することです。
まず、convertTimeZone(utcNow(), ‘UTC’, ‘Tokyo Standard Time’) というところで、現在の時刻を取得し、時刻を世界標準時間から日本時間に変換します。
自動的に処理を実行した地域の時間が取得されないのが要注意ポイントで、日本以外の場所で処理を実行したい場合には3番目の引数を変える必要があります。
Step2:取得した日時データを加工する
次に、取得した時刻を0000-00-00(年-月-日)のデータに加工するために、substringで必要な部分だけを抽出します。
- 新しいアクションを追加する。
- 「組み込み」→「変数」→「変数を設定する」というアクションを選択する。
- 名前:日付変数、値:substring(variables(‘日付変数’),0,10) を入力する。
なぜこの処理をしたいのかというと、あくまで判断基準にしたいのは日付であって、時刻データは必要ないからです。
utcNow()で取得するデータは、例えば “2022-08-25T12:34:56.7890000” のように時・分・秒だけでなくミリ秒まで表示された文字列データになります。
なので、左から数えて10文字分の文字列だけ抽出するために、substring(variables(‘日付変数’),0,10) と入力することで、この部分 “2022-08-25” のみ取得したデータを変数に設定します。
補足として、variables(‘日付変数’) の部分は手入力してもいいですが、画面上で選択することで表示させることもできます。

※カーソルは1番目の引数の部分に入れておく。



今回で言えば、「日付変数」を選択すると、variables(‘日付変数’) が自動的に入力されます。
Step3:Excelで取り込んだ日付データの書式を変更する
- 新しいアクションを追加する。
- 「組み込み」→「日時」→「時間への追加」というアクションを選択する。
- 基準時間:1899/12/30、間隔:契約日(※Excelで取り込んだデータ)、値:日 を入力する。

Excelから取り込むデータは、アクション『時間への追加』を追加するだけで済みます。
この設定をすることで、取り込んだ日付データはISO8601形式である “2022-08-25T00:00:00.0000000” として変換されるので、最後に “2022-08-25” の形に変換させます。
Step4:Step3のデータを加工する
- 新しいアクションを追加する。
- 「コントロール」→「条件」というアクションを選択する。
- 比較元のデータにsubstring(body(‘時間への追加’),0,10) と入力する。

Step2と同じように、形式を“2022-08-25” の形に変換させます。
そうすることで、時・分・秒を考慮しない形で、日付のみで比較することが可能になります。
全体フローを見直して完成!
日付の調整さえできれば、あとは『条件』アクションで条件分岐させればOK!
下図のフローは、サンプルで作ったものです。

まだPower Automateを触り始めて1ヶ月も経っていないような初心者ですので、もしもっと簡単にできる方法(Power Automate Desktopを使わずに)がありましたら、ご教示いただけますと幸いです。
今後のPower Automateのアップデートで簡単に日付比較ができるようになるのを願っています。
最後まで読んでいただき、ありがとうございました!