【PowerAutomate】第何何曜日(第2火曜日など)の日付を取得。1行で取得する方法も!

スポンサーリンク




作業を自動化する
  • プログラミングは分からないけど自動化したい
  • 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加算日数
種類整数整数整数
220

1つ目と2つ目の値は好きな数字にして下さい。
0:日 1:月 2:火 3:水 4:木 5:金 6:土
この例だと第2火曜日です。

ステップを追加して「コントロール」の「条件」を選びます。

条件を設定します。

左:動的なコンテンツにある「○曜」
中:次の値以上
右:式へ dayOfweek(startOfMonth(triggerBody()[‘key-button-date’]))

曜日の引き算を行う前にマイナスかそうで無いかここでチェックします。
マイナスにならない場合は「はい」マイナスになる場合は「いいえ」に進みます。

式の説明

dayOfweek(startOfMonth(triggerBody()[‘key-button-date’]))

  • triggerBody()[‘key-button-date’] フローの実行日付を返します。
  • startOfMonth ()の中にある日付の月初を返します。
  • dayOfweek ()の中にある日付の曜日を数字で返します。

フローの実行日が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はしません。普通に引き算をします。

式の説明

sub(variables(‘○曜’),dayOfweek(startOfMonth(triggerBody()[‘key-button-date’])))

  • triggerBody()[‘key-button-date’] フローの実行日付を返します。 上の式だと2022-07-11
  • startOfMonth ()の中にある日付の月初を返します。 上の式だと2022-07-01
  • dayOfweek ()の中にある日付の曜日を数字で返します。上の式だと5
  • variables ()の中にある変数名の値を返します。 上の式だと2
  • sub ()の中の数字で引き算した答えを返します。例:sub(2,1)だと2-1で1

「いいえの場合」もアクションの追加を押して「変数の設定」をクリック。
2か所設定します。

名前:第1加算日数
値:式へ sub(add(variables(‘○曜’),7),dayOfweek(startOfMonth(triggerBody()[‘key-button-date’])))

マイナスになるので+7します。

式の説明

sub(add(variables(‘○曜’),7),dayOfweek(startOfMonth(triggerBody()[‘key-button-date’])))

  • triggerBody()[‘key-button-date’] フローの実行日付を返します。 上の式だと2022-07-11
  • startOfMonth ()の中にある日付の月初を返します。 上の式だと2022-07-01
  • dayOfweek ()の中にある日付の曜日を数字で返します。上の式だと5
  • variables ()の中にある変数名の値を返します。 上の式だと2
  • add ()の中の数字で足し算した答えを返します。例:add(2,1)だと2+1で3
  • sub ()の中の数字で引き算した答えを返します。例:sub(2,1)だと2-1で1

この時点で第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になります。

式の説明

addDays(startOfMonth(triggerBody()[‘key-button-date’]),add(variables(‘第1加算日数’),mul(sub(variables(‘○曜’),1),7)))

  • triggerBody()[‘key-button-date’] フローの実行日付を返します。 上の式だと2022-07-11
  • startOfMonth ()の中にある日付の月初を返します。 上の式だと2022-07-01
  • dayOfweek ()の中にある日付の曜日を数字で返します。上の式だと5
  • variables ()の中にある変数名の値を返します。 上の式だと2
  • add ()の中の数字で足し算した答えを返します。例:add(2,1)だと2+1で3
  • sub ()の中の数字で引き算した答えを返します。例:sub(2,1)だと2-1で1
  • mul ()の中の数字で掛け算した答えを返します。例:mul(2,1)だと2*1で2
  • addDays ()の中にある日付に日数を足します。 例:addDays(2022-07-01,11)だと2022-07-12

このアクションで第1〜5何曜日を求めることができます。

第2火曜日を指定して2022年7月に実行した結果

スポンサーリンク

まとめ

第1~5○曜日の日付を求める方法を3ステップで説明しました。

  • 第○何曜日を求めるフローの動き
  • 第○何曜日を求める仕組み
  • フローを作る

第○何曜日を求めるならまず第1を求める所が肝心だとわかったと思います。第○何曜日に会議予定を入れるとか作業するとか何だかんだ使うんですよね。この記事のフローは日付を求める部分だけなので、必要に応じて「フローを作る」部分をあなたの作っているフローに当てはめて使ってください。

PowerAutomateのおすすめ記事
人気ページ
Apply to eachの使い方
アレイのフィルター処理の使い方
日付関数の使い方
エラーを無視する方法
メールの内容をExcelへ転記
メール本文から名前を抽出

>>PowerAutomateの記事一覧を見る<<

お気に入り必須!公式ページ
Microsoft Power Automate
式関数のリファレンス
コネクタのリファレンス
Excel Online (Business)のリファレンス

最後まで読んで頂き、ありがとうございます。

「この記事が参考になった」「お礼でコーヒー代をプレゼントしよう」という方がいましたらチップ(15円〜)をお願いいたします。

Amazonギフト券- Eメールタイプ - Amazonベーシック

メールのあて先は 「mizusibuki8080@gmail.com」です。
※上記のアドレスは投げ銭受け取り専用です。他のメールは受け取れない設定にしてあるのでご注意ください。

作業を自動化する
ネットワークエンジニアになった人
タイトルとURLをコピーしました