![見出し画像](https://assets.st-note.com/production/uploads/images/96298933/rectangle_large_type_2_57ed2e647384f4e6f42a86490db159ee.png?width=1200)
【Power Automate×Officeスクリプト】毎月特定の日以降に書類未提出者の一覧をメールし続けるフロー
こんにちは。aliceです。
寒いですね。冷蔵庫の中に住んでいるのではないかというくらい寒いですね。
今日はPower AutomateとOfficeスクリプトを使って、「毎月特定の日以降に書類未提出者の一覧をメールし続けるフロー」のはなしです。
具体的には「毎月25日以降」の「平日」に「書類の未提出者の一覧」を取得して、「この人はまだ書類を提出していないよ!」というメールを送信するフローです。
全員が提出するまで毎日(月が変わるまで)メールを送信し続けます。
![](https://assets.st-note.com/img/1674461208231-6U4geKiDl0.png)
まずこのようなExcelの表があります。
![](https://assets.st-note.com/img/1674460870040-EmofeRRpMG.png?width=1200)
この表から未提出者(提出日が書かれていない人(芋))の一覧を取得します。
この場合は「べにはるかさん」と「シルクスイートさん」ですね。
そして、毎月25日以降に未提出者がいるときはメールを送信します。
下のカレンダーでいうと〇が付いている日です。
![](https://assets.st-note.com/img/1674453999450-uvBCub67Kp.png?width=1200)
こんな感じのメールが届きます💦
![](https://assets.st-note.com/img/1674460160716-LcCzG5LHlK.png?width=1200)
このメールを未提出者がいなくなるまで、そして月がかわるまで毎日送信します。
はい、怖いですね😱
外も寒いので凍えレベルが2倍になりますね。
寒い冬にはぴったりのフローです。
![](https://assets.st-note.com/img/1674508758211-29C7ccViIK.png)
ということで実際に作ったのがこちらです。
今回はなるべくOfficeスクリプトで書けるところはOfficeスクリプトで書きました。
コードを書けるところはなるべく書きたい派なのです。
![](https://assets.st-note.com/img/1674456630762-XobJJq012Z.png?width=1200)
それでは、中身を見ていきましょう。
あたたかい飲み物とともにどうぞ。
![](https://assets.st-note.com/img/1674508783335-enwXY3BLyi.png)
Officeスクリプト編
ではでは、まずはOfficeスクリプトから見ていきましょう。
未提出者を取得する
まずは、未提出者を取得します。
このようなExcelの表から未提出者(提出日が記入されていない人(芋))を取得します。
![](https://assets.st-note.com/img/1674457812127-VSEzVMeN4D.png?width=1200)
ということで書いてみました。
function main(workbook: ExcelScript.Workbook): string {
const sheet = workbook.getWorksheet('提出確認');
const values = sheet.getUsedRange().getValues();
values.shift();
const array: string[] = [];
for (let value of values) {
if (value[3] === '') array.push(value[1] + ' ' + value[2]);
}
const message = array.join('<br>');
return message;
}
arrayという配列に「部署名+スペース+名前」を要素として入れます。
["いも課 べにはるか", "いも課 シルクスイート"]
このような配列ができました。
そして、メールに一覧として表示したいので「いも課 べにはるか」という形式で取得します。
joinメソッドを使って、配列arrayの要素を「<br>」で結合した文字列にします。
いも課 べにはるか<br>いも課 シルクスイート
これで、メールで送信するときに改行してくれます。
Power Automateのアクションを少しでも減らす作戦です。
![](https://assets.st-note.com/img/1674458136742-c4GZeAs6fB.png?width=1200)
メールアドレスを取得
次にメールアドレスを取得します。
先ほどの未提出者の取得とほとんど同じです。
こちらはこのままメールの宛先として使用したいので、作成した配列をjoinメソッドを使って「;」で結合しました。
function main(workbook: ExcelScript.Workbook):string {
const worksheet = workbook.getWorksheet('送信先一覧');
const values = worksheet.getUsedRange().getValues();
values.shift();
const records = values.map(record => record[1]);
const address: string = records.join(';');
return address;
}
![](https://assets.st-note.com/img/1674458518288-Qtntzs1YCK.png?width=1200)
Excelからデータを取得できたので、次はPower Automateでフローを作っていきます。
Power Automate編
ここからは、Power Automate編です。
繰り返し
まずは平日は繰り返すというトリガーを作成します。
平日なので設定曜日を月曜日から金曜日にします。
今回は朝6時に実行してみました。ここらへんはお好みです。
![](https://assets.st-note.com/img/1674458665916-GhrihTts2l.png?width=1200)
変数を初期化する
実行日の日付を取得する変数を作成します。
dayという名前の変数に実行日の日付を取得して入れます。
例えば1月23日だったら「23」という整数です。
![](https://assets.st-note.com/img/1674458790588-S29zqV8lKJ.png?width=1200)
数式はこちら
int(convertTimeZone(utcNow(),'UTC','Tokyo Standard Time','dd'))
実行時の日付のタイムゾーンを東京にして、日付だけ取得します。
そして、convertTimeZone関数の戻り値は文字列型なので、数値型に変換します。
スクリプトの実行
先ほど作成したスクリプトを実行していきましょう。
場所などは作成した場所から選択してください。
![](https://assets.st-note.com/img/1674459022152-FOe5jhAqJV.png?width=1200)
条件
条件を設定します。
「毎月25日以降」の「平日」に「書類の未提出者の一覧」を送信したいので次のとおり設定します。
日付が25日以降(変数dayの値が25以上)
未提出者がいる場合(未提出者取得のスクリプトの戻り値がないときを除いく)
![](https://assets.st-note.com/img/1674509528365-CiopxeNklE.png?width=1200)
「平日」にというのはトリガーで設定しましたので、ここでは不要です。
全体像はこちら。
![](https://assets.st-note.com/img/1674459371424-zGbnDi1pWj.png?width=1200)
メールの送信
条件に一致するときはメールを送信します。
![](https://assets.st-note.com/img/1674459546825-OC0MeDz9Nh.png?width=1200)
フローはこれで完了です。
あとはテストして実行してみましょう。
フローの実行
それでは、フローを実行してみます。
無事にメールが送信されました。
![](https://assets.st-note.com/img/1674460160716-LcCzG5LHlK.png?width=1200)
ガクブルですね。
![](https://assets.st-note.com/img/1674509675092-ql8chJFAsX.png)
参考
convertTimeZone関数はようさんのブログがわかりやすかったです。
いつも気ままに勉強会でお世話になっているようさん。
ありがとうございます!!
Officeスクリプト記事まとめ📝
『Officeスクリプト入門講座』を書きました📝