最近はちょっと嫌われ者な Excel 方眼紙。なにかしらの業務の入力フォームとして、Excel 方眼紙を利用されていることは、まだまだ少なくないのではないでしょうか?入力フォームを作成できるサービスは、Microsoft 365 の中にも、Microsoft Forms や Power Apps などがありますが、Excel 方眼紙で作成してきたフォームを、それら別のサービスで一度に作り替えるのは大変な作業になることもあります。

Excel 方眼紙の問題点は、ユーザーによって入力された情報を、リスト化しデータとして活用するのが難しい点にあると思っています。せめて、Excel 方眼紙から情報を抜き出し、SharePoint リストなどに入れてリスト化できれば…、ずっとそう考えていました。

そうした運用が、Office スクリプトと Power Automate を組み合わせることで実現できそうだったので、さっそく試してみました。

Office スクリプト

Office スクリプトとは、主にブラウザ版 Excel で利用することができる機能で、Excel 内のデータ操作を自動化できる仕組みです。さらに面白いのが、Power Automate のクラウドフローと組み合わせて利用できる点で、フローに対して値の受け渡しをすることができます。

Excel の Office スクリプト - Office Scripts | Microsoft Docs
https://docs.microsoft.com/ja-jp/office/dev/scripts/overview/excel

こうした特徴から、Excel 方眼紙の情報を Office スクリプトで読み取り、Power Automate のクラウドフローに渡してさえしまえば、あとは、SharePoint リストなりなんなりに情報を渡して処理することができると考えました。

Excel 方眼紙から値を読み取るスクリプト

まず、今回対象とする Excel 方眼紙は、次のようなものにしました。Excel 方眼紙としては、ごく単純なものです。

この読み取りたい Excel 方眼紙のレイアウトに基づき、次のようにスクリプトを作成しました。作業は、ブラウザ版 Excel の [自動化] タブにある [新しいスクリプト] から始めます。

コード エディターでは、次のようなスクリプトを作成しました。

function main(workbook: ExcelScript.Workbook) {
  let 利用目的 = workbook.getWorksheet("Sheet1").getRange("F9").getValue();
  let 責任者氏名 = workbook.getWorksheet("Sheet1").getRange("H12").getValue();
  let メールアドレス = workbook.getWorksheet("Sheet1").getRange("H13").getValue();

  let data: Data = {
    purpose: 利用目的.toString(),
    supervisor: 責任者氏名.toString(),
    mail: メールアドレス.toString()
  };

  return data;
}

interface Data {
  purpose: string;
  supervisor: string;
  mail: string;
}

うひゃー、プログラムのコードだ…、難しそう…と感じますが、書いている内容は単純です。2 行目~ 4 行目で、getRange() によって読み取りたいセルを指定し、getValue() で値を読み取ります。読み取った結果は、let 利用目的 のように変数に入れておきます。

次に Power Automate に値を渡すために必要なのが、どの値を渡すかを決めるところです。15 行目~ 19 行目にある interface の記述でこれを定義します。この場合は、purpose、supervisor、mail の 3 項目を、それぞれ文字列型で渡すものとして定義しました。また、このデータをまとめて、Data と呼ぶことにしています。

あとは、Data として定義した項目に沿って、Excel から読み取ったデータを当てはめていきます。6 行目~ 10 行目の部分ですね。let data: Data は、変数 data は、先ほど定義した Data の項目を含みますよという意味です。それに続く {} の中では、purpose、supervisor、mail のそれぞれの項目に対して、Excel から読み取った値を当てはめています。それぞれの値は文字列型なので、.toString() を付けています。

最後に、これらの値を Power Automate に渡しますよという意味で、12 行目の return data があります。

Power Automate から呼び出す

さて、このスクリプトを実行するには、Power Automate のクラウドフローから呼び出す必要があります。利用できるアクションは、Excel Online (Business) コネクターにある「スクリプトの実行」アクションです。先ほど作成したスクリプトの処理を適用したいファイルを選択し、実行するスクリプト名を指定します。設定はこれだけですね。

無事に実行されると、次のような形で Excel 方眼紙の中の情報を読み取れていることが確認できます。

思ったよりも簡単だった!というのが、個人的な感想でした。

業務での応用

さて、実際の業務を考えると、ユーザーが情報を入力した Excel 方眼紙を、何かしらの方法で提出してもらう必要があります。メールに添付して送ってもらうか、または、SharePoint のライブラリに直接アップロードしてもらうかなどがあります。ここは、昔ながらにメールに添付してもらう想定をしましょう。

Power Automate を利用すると、届いたメールから添付ファイルを抜き出すことができ、それを任意の SharePoint ライブラリに保存しておくことができます。そうしてライブラリに保存された Excel 方眼紙に対して、Office スクリプトを実行することで、SharePoint リストにデータの一覧を作成してみましょう。

作成したフローは、次のようになりました。

そして、フローが実行されると、リストには、次のようにデータが入っていきます。

うんうん、良い感じだと思います。

このように、Office スクリプトは Excel ファイル自体に紐づいているわけではないので、任意の Excel ファイルに、作成した Office スクリプトを実行できるのも特長ですね。

さいごに

以前から利用されることも多かった Excel 方眼紙の申請書に、Office スクリプトと Power Automate といった新しい機能を組み合わせることで、ユーザーからのオペレーションを大きく変えることなく、業務の改善や効率化を行える可能性を垣間見ることができました。

今回、Office スクリプトをはじめて触ってみたのですが、ちょっと興味が出てきたので、今後も機会があればいろいろと試してみたいなと思いました。Office スクリプトをちょっと学ぶには、下記のチュートリアルが参考になりました。

Excel on the web で Office スクリプトを記録、編集、作成する - Office Scripts | Microsoft Docs
https://docs.microsoft.com/ja-jp/office/dev/scripts/tutorials/excel-tutorial

なかなか奥は深そうではあります。