Power AutomateでExcelの日付列の前月になったらメール送るってのを作った

あきらです。

JPAUGのユーザーグループであった質問に真面目に答えてみる。

よくある質問だけど言葉で説明するよりブログネタにしたほうがwinwinなきがする。

ので書きます。

 

とりあえずExcel作ったる

あんまりデータソースExcel使いたくないんですけどね。

理由としては

誰でも元データアクセスできちゃう

なまじ有名ソフトだから元データ簡単に編集できちゃう

 

簡単に言うと

「俺はExcel触っただけだ!アプリが動かなくなったのは俺のせいじゃない!」

ってなりそうだから大抵SPOlistかDataverseで作成しちゃう。

SPOは回避策ちょこちょこあるけどExcelはブックにアクセスできないとそもそも対処できないからねぇ。

 

というわけで今回はExcelの日付列作って、「日付列の前月になったらメール送る」ってのをやります。

(前、同じような内容でブログ書いた気がするけど・・・)

 

DatasourceのExcelはこんなんで作ります。

f:id:hanakuso365:20210908211203p:plain

 

あとでPower Automateでコネコネ条件分岐したくなかったので、下の列も追加

EMONTHで前前月末日取ってきて+1日して前月の1日表示

f:id:hanakuso365:20210909003857p:plain

なんのリミットかしらんけど、まぁなんか貸し出し→「来月期限だからな!」って通知するためのものとしましょう。

 

OneDriveに保存します。

PowerAutomateの日時コネクタでコネコネする

f:id:hanakuso365:20210908211516p:plain

スケジュール済クラウドフローから作成

んで、1ヵ月ごとに1日に自動実行させましょう。

下の感じにして「作成」

f:id:hanakuso365:20210908211639p:plain

 

作成したら自動的にしたの画面できるで、タイムゾーンとか合わせる

f:id:hanakuso365:20210908212030p:plain

 

次に変数を初期化、ってコマンドを置いてどんなふうに日付をとってくるかしらべましょう。

式を追加する→utcNow()を置いてみると

f:id:hanakuso365:20210908212426p:plain

テスト実行して帰ってくる値は今日の日付と時間が下のように帰ってくるのが分かります。

21時くらいに実行してる→12時で返ってきた

なので世界標準時の実行になってしまっているのが分かります。

f:id:hanakuso365:20210908212720p:plain

 

じゃあ九時間たせばいいじゃん!と思うかもしれませんが、日付の足し算とか時間の足し算とか定義するのメンドクサイので、コネクタで処理しましょう。

トリガーとの間に、現在時刻取得→タイムゾーン変換とおいて、タイムゾーンのoutputを変数に格納する

f:id:hanakuso365:20210908213343p:plain

 

これでテストすると現在日時がでてきます。

f:id:hanakuso365:20210908213524p:plain

 

 

時間の表示形式を変える

今のままだと上のようにyyyy-MM-dd hh:mm:ssZという表記なので、

これをyyyy/MM/ddにかえます。

下のようにfxボタンから変えますかね。

f:id:hanakuso365:20210909004628p:plain

 

テストすると下のように変更されたのがわかります

f:id:hanakuso365:20210909004601p:plain

 

Month列でフィルターかける

フィルタークエリで「Monthが変数の値を同じレコード」をフィルターします。

そしてApply to eachで1つずつメール送れば完了

f:id:hanakuso365:20210909005136p:plain

 

実行

できたー

f:id:hanakuso365:20210909010116p:plain  f:id:hanakuso365:20210909010309p:plain

 

一覧で送りたければ変数使ってあげればできますね。

 

 

Power Automateでコネコネやってもいいんですが、Excelである程度定義してあげても割と作れます。

※テストするときはExcelの日付を今日の日付に日数調整してください。

例:今日が9日だったら=EOMONTH(参照値,-2)+9

本番環境のときに1に直してくださいな

 

大事なこと

ひとつひとつコネクタ追加してテストして、出来たらまたコネクタ追加してテストして・・・を繰り返してください。

じゃないと「なんでこうなってんだ!」が解決するわけないです。

情シスという仕事を私はしていますが、

「PCが壊れた!」という問い合わせに対しては、

「アウトレットに繋がってますか?」から聞きます。

これは相手をなめているのではなく、考えられるstepを1つずつ潰していってるのです。

デバイス側に不良はない→ってことは他の要因かな?と切り分けるためです。

 

フローも一つずつやらんとどこで不良起こしてるかわからんくなるので、

1つずつ試して、output見て、自分が欲しいoutputなのか確認して、そして次に進むという動きを試していけば、なんでもできる!(なんでもできるとは言ってない)

 

あと

「関数入ってるテーブル参照してええんか!?」

って昔小一時間悩んだんですけど、

「ダメだったとしてなんなん?」

って結論です。

 

ダメになったらそん時、

「勉強になったな。○○の場合にエラー吐くんやな…せやPower Automateでコネコネしたろ!」

ってなるだけですね。

 

失敗したくないなら内製なんてしないことですわ。

エラーの無いプログラムなんてありません。

 

失敗する勇気のない人間にモノづくりする資格はないんさ。

完璧なものが生まれちゃったら、それ以上勉強できなくなるじゃないか!

なんてもったいない!

 

はい、おわり。