- プログラミングは分からないけど自動化したい
- PowerAutomateの使い方がイマイチ分からない
- 第2火曜日や、第1水曜日などの条件で日付を求めたい
無料ツールでさらにノンプログラミングで自動化ができるならぜひやってみたい!
この記事では、そんな方に向けて第1~5○曜日の日付を求める方法を3ステップで説明します。
- 第○何曜日を求めるフローの動き
- 第○何曜日を求める仕組み
- フローを作る
この記事を読めば、第○水曜日などを求めるのも簡単にできるようになります。
1行で第2火曜日を求める式
addDays(startOfMonth(●日付●),add(if(greater(dayOfweek(startOfMonth(●日付●)),●求めたい曜日0-6●),add(sub(●求めたい曜日0-6●,DayOfweek(startOfMonth(●日付●))),7),sub(●求めたい曜日0-6●,DayOfweek(startOfMonth(●日付●)))) ,mul(sub(●求めたい第○週●,1),7)))
式の●には求めたい日付/曜日/週を入力します。
- ●日付● ・・’2022/01/01’ ※年月を指定する為に必要
- ●求めたい曜日0-6● ・・2
- ●求めたい第○週● ・・2
この式を使ったフローがこちら。
結果の入力に式を使っています。
フローを動かした結果です。
2022年1月の第2火曜日は11日と表示されました。
アクションの追加にある「自分のクリップボード」を開いてこのコードを貼り付けて使用してください。
{"id":"37078220-0cac-40e9-b0b4-7eb905e77b83","brandColor":"#8C3900","connectionReferences":{},"connectorDisplayName":"制御","icon":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDMyIDMyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPg0KIDxwYXRoIGQ9Im0wIDBoMzJ2MzJoLTMyeiIgZmlsbD0iIzhDMzkwMCIvPg0KIDxwYXRoIGQ9Im04IDEwaDE2djEyaC0xNnptMTUgMTF2LTEwaC0xNHYxMHptLTItOHY2aC0xMHYtNnptLTEgNXYtNGgtOHY0eiIgZmlsbD0iI2ZmZiIvPg0KPC9zdmc+DQo=","isTrigger":false,"operationName":"スコープ","operationDefinition":{"type":"Scope","actions":{"基準日":{"type":"Compose","inputs":"2022/01/01","runAfter":{},"metadata":{"operationMetadataId":"7dd80a50-353c-4bfb-b9b1-3f0247b2134c"}},"第○":{"type":"Compose","inputs":2,"runAfter":{"基準日":["Succeeded"]},"metadata":{"operationMetadataId":"d7099826-b5dc-4b78-88ce-7d5e5290e394"}},"曜日0-6":{"type":"Compose","inputs":2,"runAfter":{"第○":["Succeeded"]},"metadata":{"operationMetadataId":"afe77fd3-0a31-4b44-8410-7f06f9d8344b"}},"結果":{"type":"Compose","inputs":"@addDays(startOfMonth(outputs('基準日')),add(if(greaterOrEquals(dayOfweek(startOfMonth(outputs('基準日'))),outputs('曜日0-6')),add(sub(outputs('曜日0-6'),DayOfweek(startOfMonth(outputs('基準日')))),7),sub(outputs('曜日0-6'),DayOfweek(startOfMonth(outputs('基準日')))))\n,mul(sub(outputs('第○'),1),7)))","runAfter":{"曜日0-6":["Succeeded"]},"metadata":{"operationMetadataId":"5684aa23-eaaa-4c40-b0fc-d1b48f0892f9"}}},"runAfter":{},"metadata":{"operationMetadataId":"34865aa7-bdb3-4a92-bdbf-ccf780c801e9"}}}
ここからは日付を求める考え方について説明します。
上で紹介した式で満足した方は読まなくても大丈夫です。
第○何曜日を求める(例:第2火曜日)
フローの作成で設定する条件は2つです。
- 第何週目か指定する(1~5の数字)
- 目的の曜日を指定する(0~6の数字)
0:日 1:月 2:火 3:水 4:木 5:金 6:土
今回は第2火曜日を求めるので2と2を設定しておきます。
- 第何週目:2
- 目的の曜日:2
0:日 1:月 2:火 3:水 4:木 5:金 6:土
※設定方法は後で説明します。
実際に動かしてみます。2022年7月の第2火曜日は7月12日です。
フロー全体。
フローの内容は後で説明するので、この数で動くんだ。くらいで見ておいてください。
(1)フロー実行は7月11日
フローを試しに動かした日付です。
(2)第2週を指定
フローの設定で2を指定したので、2になっています。
※フローの設定は後で説明します。
(3)火曜日を指定 0:日 1:月 2:火 3:水 4:木 5:金 6:土
フローの設定で2を指定したので、2になっています。
※フローの設定は後で説明します。
(4)結果7月12日「第2火曜日」
第2火曜日の2022/7/12が表示されました。
結果を求める為に使った条件は3つです。
- フローの実行日(2022/7/11)
- 第○週の指定(2)
- 曜日の指定(2)
この3つから第2火曜日を求めることができました。
動きは分かりましたが、どうやっているのか。その仕組みを次の項目で説明します。
仕組みには重要なポイントが沢山あるのでしっかり見てください。
第○何曜日を求める仕組み
最初に第1何曜日かを求めます。第1の日付がわかると第2は+7するだけなので計算は単純です。
問題は第1です。
第1曜日を求めるためには曜日を計算したいので、ゼロを日曜にして曜日を0~6の数字で表します。
0:日 1:月 2:火 3:水 4:木 5:金 6:土
求めたい曜日から月初の曜日を引くとその差が月初からの日数になります。
月初が金曜(5)で求めたい曜日が土曜(6)の場合は6-5=1です。
文字だけだと分からないのでこちらを見てください。
7/1(金)→5 ★月初 ・・5-5=0 月初に+0した日付になる
7/2(土)→6 6-5=1 月初に+1した日付になる
7/3(日)→0 0-5=ー5 マイナスなので+7して2 月初に+2した日付になる
7/4(月)→1 1-5=ー4 マイナスなので+7して3 月初に+3した日付になる
7/5(火)→2 2-5=ー3 マイナスなので+7して4 月初に+4した日付になる
7/6(水)→3 3-5=ー2 マイナスなので+7して5 月初に+5した日付になる
7/7(木)→4 4-5=ー1 マイナスなので+7して6 月初に+6した日付になる
繰り返しになりますがもう一度。
7/2(土)は土曜日なので6
月初は金曜日なので5
6-5をすると1です。金曜の次は土曜ですから+1ですよね。
月初が7/1(金)なら1を足すと7/2(土)になります。
ちなみに引き算の結果がマイナスになると月初から遡って前月になってしまうので、+7します。
ここの考え方が重要なので、理解できるまで繰り返し読んでください。
第2は7を足します。
第1土曜日が7/2だと分かれば第2土曜日は+7でもとめられます。
第3は14を足す。
第4は21を足す。
第5は28を足す。という感じになります。
次は月初や曜日を数字にする方法について説明します。
こちらにあるPowerAutomateの関数を使います。
- 月初を求める・・startOfMonth
- 曜日を求める・・dayOfweek
- 日付を足す・・addDays
- 足し算する・・add
- 引き算する・・sub
- 掛け算する・・mul
関数は値を指定すると関数に応じた処理をして別の値を返すものです。
使い方は動的なコンテンツの右にある「式」へ関数とその値を入力するだけです。
例で月初を求めるstartOfMonthを使ってみます。値には「’2022-07-11T00:00:00’」を入れてみます。
startOfMonth(‘2022-07-11T00:00:00’)
フローをテストで動かすとこの結果になります。
2022-07-01T00:00:00.0000000
関数は組み合わせる事もできます。
先ほどの関数をさらにdayOfweekで囲みます。
dayOfweek(startOfMonth(‘2022-07-11T00:00:00’))
結果は5です。
5
dayOfweekは曜日を数字にする関数なので2022/7/1の金曜日を5にしてくれました。
今回はこれらの関数を組み合わせてフローを作っていきます。
フローを作成
今回作るフローです。トリガーを除くと5つのアクションがあります。
条件の中に「はいの場合」と「いいえの場合」のアクションが2つあるので計7アクションです。
今回使うアクションは4種類です。
- アクション:変数を初期化する(条件:第○、条件:○曜、第1加算日数)
- アクション:条件
- アクション:変数の設定 ※条件の中にあります。
- アクション:データ操作(作成)
使い方は作りながら見ていきましょう。それではフローを作っていきます。
まだ画面を開いていない方はMicrosoftの公式サイトからPowerAutomateを開いてください。
画面左にある作成から「インスタントクラウドフロー」を選択。
次の画面で「手動でフローをトリガーします」を選び作成します。
「変数を初期化する」を選択します。
3つ同時に設定するので後2回繰り返してください。
作成した「変数を初期化する」のアクション3つにそれぞれ設定を入れます。
アクション名は右側の「…」から名前の変更を選ぶと設定できます。
1つ目 | 2つ目 | 3つ目 | |
---|---|---|---|
アクション名 | 条件:第○ | 条件:○曜 | 第1加算日数 |
名前 | 第○ | ○曜 | 第1加算日数 |
種類 | 整数 | 整数 | 整数 |
値 | 2 | 2 | 0 |
1つ目と2つ目の値は好きな数字にして下さい。
0:日 1:月 2:火 3:水 4:木 5:金 6:土
この例だと第2火曜日です。
ステップを追加して「コントロール」の「条件」を選びます。
条件を設定します。
左:動的なコンテンツにある「○曜」
中:次の値以上
右:式へ dayOfweek(startOfMonth(triggerBody()[‘key-button-date’]))
曜日の引き算を行う前にマイナスかそうで無いかここでチェックします。
マイナスにならない場合は「はい」マイナスになる場合は「いいえ」に進みます。
フローの実行日が2022年7月11日であれば月初の曜日を数字で表します。
月初は2022年7月1日(金)なので5になります。
0:日 1:月 2:火 3:水 4:木 5:金 6:土
「はいの場合」でアクションの追加を押して「変数の設定」をクリック。
2か所設定します。
名前:第1加算日数
値:式へ sub(variables(‘○曜’),dayOfweek(startOfMonth(triggerBody()[‘key-button-date’])))
マイナスにならない場合なので+7はしません。普通に引き算をします。
「いいえの場合」もアクションの追加を押して「変数の設定」をクリック。
2か所設定します。
名前:第1加算日数
値:式へ sub(add(variables(‘○曜’),7),dayOfweek(startOfMonth(triggerBody()[‘key-button-date’])))
マイナスになるので+7します。
この時点で第1何曜日は求められています。
次のアクションで第2以降であれば+7、+14などの足し算を行います。
「はいの場合」と「いいえの場合」の下にある新しいステップで「データ操作」を選択。
2つの分岐がここに戻ってくるフローになります。
式を設定 addDays(startOfMonth(triggerBody()[‘key-button-date’]),add(variables(‘第1加算日数’),mul(sub(variables(‘○曜’),1),7)))
第2の場合は2−1*7をして+7になるようにしています。
第3の場合は3ー1*7で+14になります。
このアクションで第1〜5何曜日を求めることができます。
第2火曜日を指定して2022年7月に実行した結果
まとめ
第1~5○曜日の日付を求める方法を3ステップで説明しました。
- 第○何曜日を求めるフローの動き
- 第○何曜日を求める仕組み
- フローを作る
第○何曜日を求めるならまず第1を求める所が肝心だとわかったと思います。第○何曜日に会議予定を入れるとか作業するとか何だかんだ使うんですよね。この記事のフローは日付を求める部分だけなので、必要に応じて「フローを作る」部分をあなたの作っているフローに当てはめて使ってください。
PowerAutomateのおすすめ記事
人気ページ
Apply to eachの使い方
アレイのフィルター処理の使い方
日付関数の使い方
エラーを無視する方法
メールの内容をExcelへ転記
メール本文から名前を抽出
>>PowerAutomateの記事一覧を見る<<
お気に入り必須!公式ページ
Microsoft Power Automate
式関数のリファレンス
コネクタのリファレンス
Excel Online (Business)のリファレンス