PowerAutomateからはExcelのマクロを実行することができませんが、代わりにTypeScriptを実行することができます。

(1)「自動化」でTypeScriptを使おう!
利用するには、WEB版Excelの画面中央上にある「自動化」をクリックしてみましょう。

「え~!マクロ使えないの~!」とショックを受けた方も多いはず。でも、ご心配なく、TypeScriptでもちゃんと操作の記録は健在です。コードに詳しくない方でも、やりたい作業を記録してコードに起こし、一部を改変して必要な機能を組み込むことができます。

前回作ったフローでは毎日上書きされてしまうので、スクリプトの記録を使ってその日の記録を削除するスクリプトを作成しました。

方法は簡単。①「操作を記録」をクリック。②消したい範囲を選択。③Deleteキーでクリア。④赤い「停止」ボタンを押して記録をやめる。⑤「編集」をクリックしてコードを編集したり、名前を変更する。

①その日の入力をクリアするスクリプト”Clear_Status_Remind”

超簡単にできたのが以下のスクリプトです。
=========
//Clear_Status_Remind
function main(workbook: ExcelScript.Workbook) {
let sheet1 = workbook.getWorksheet(“Formより”);
// Clear ExcelScript.ClearApplyTo.contents from range C2:D54 on selectedSheet
sheet1.getRange(“C2:j54”).clear(ExcelScript.ClearApplyTo.contents);
}
=========
本当に記録だけで作成してしまいました。

②その日の記録を別のシートに名前を付けてBackUpを取るスクリプト”BackUp”

次のスクリプトは「記録」で作成したあと、手を加えて必要な機能を実現しました。
==========
//BackUp
function main(workbook: ExcelScript.Workbook) {
let selectedSheet = workbook.getActiveWorksheet();
// Duplicate worksheet
let sheet1__2_ = selectedSheet.copy(ExcelScript.WorksheetPositionType.before, selectedSheet);
var now = new Date();
var Year = now.getFullYear();
var Month = now.getMonth() + 1;
var Day = now.getDate();
 let ymd = (Year10000 + Month100 + Day*1)
// Rename worksheet to “20220623”
sheet1__2_.setName(“記録” + ymd);
}
=============

上のスクリプトは、操作の記録で”Formより”のシートをコピーして名前を変更した後、手書きでコードをいじりました。

シートに日付の分かる名前を付けてバックアップしていきたかったので、var now = new Date();で現在の日付を取得し、Yearに10000、Monthに100をかけて、Dayと合算し、20220623という数列を作り出しています。型の変更を行うのが面倒だったので、シートの名前にするときに”記録”という文字列を足して、数値をシートの名前にできないことで生じるエラーを回避しています。

もっと効率のいい方法があるんでしょうが、とにかく手探りなのでこんなもんです。
(基礎からちゃんと勉強したい!)

(2)PowerAutomateからスクリプトを自動実行
「新しいフロー」から「スケジュール済みクラウドフロー」を作成し、Excelのスクリプトを実行します。
このフローでは、1つ目のアクションでスクリプト”BackUp”を実行し、シートを複製、日付の名前を付けます。
2つ目のアクションではスクリプト”Clear_Status_Remind”を実行し、”Formより”シートに入力されたデータを一旦クリアしています。

これでFormsで健康観察を受け付け、8:30までに回答がなかった方に催促し、23:55にその日の回答のバックアップを取ってから一覧表をクリアする作業の自動化が完成しました。

ちゃんと勉強して、もっと役に立つフローができたらまたお知らせします。

もっとかっこいいやり方があったらぜひ教えてください。
有益なコメントを待っています。