

はじめに

今回作成するフローのイメージ

▲図のようなフローを作成します。スクリプトの処理の内容としては、Excelファイルをテーブル化してテーブル内のデータ件数を返す処理です。
手順の概要

下記の手順で作業します。
作業手順
- Officeスクリプト作成
- Power Automateフローの作成
(Step1)Officeスクリプト(Office Scripts)の作成方法

▲図のようなテストデータを用意しました。表形式のデータです。

▲Officeスクリプトを書いていきます。Excelのタブ内にある「自動化」タブをクリックします。

▲すべてのスクリプトをクリックします。

▲「新しいスクリプト」をクリックします。

▲Officeスクリプトが新規作成されました。下図赤枠のところに処理を記述していきます。
Officeスクリプト(Office Scripts)のコード
function main(workbook: ExcelScript.Workbook) { //対象をブック内のシート1枚目にする。 let st = workbook.getWorksheets()[0]; //データ範囲を特定する。 let myUsedRng = st.getUsedRange(); //テーブル化して変数に入れる。 let myTable = st.addTable(myUsedRng, true); //テーブルのヘッダーを抜かしたデータ部分の行数を戻り値として返す。 return myTable.getRangeBetweenHeaderAndTotal().getRowCount(); }
▲STEP2の図の赤枠のところに上記コードを記述します。テーブル化する範囲を自動で特定するために、getUsedRange()メソッドを使いました。
事項からPowerAutomateでフローを作っていきます。このあとフローが完成したらまたテストを行うので適用されたテーブルは一旦解除しておいてくださいね。

VBAのUsedRange()プロパティに似ていますね(‘ω’)
コードで使用したメソッドについては後程解説します。
まずは体感してほしいので実行してみますね。
Officeスクリプトのテスト

▲コードを入力したら「スクリプトを保存」をクリックして保存し、「実行」をクリックしてテスト実行してみます。

▲実行すると図のようにテーブルスタイルが適用され見た目も変化します。テーブル化されたされたことがわかるかと思います。

これでスクリプトの実行はおわりです。次の項からコードの解説をします。
使用したOfficeスクリプト(Office Scripts)のメソッドの説明
操作するシートを指定する。
//ブック内のシート全部指定。 let st = workbook.getWorksheets(); //ブック内のシート1枚目を指定。 //getWorksheets()でブック内のすべてのシートが配列に取得されるので、 //インデックス番号の開始値である[0]を指定してシートの1枚目を指定しています。 let st = workbook.getWorksheets()[0]; //ブック内のシート1枚を名前を使って指定。 let st = workbook.getWorksheet(”シート1”);
▲シートを指定するのに下記のいずれかのメソッドを使用します。
シート内の使用されているセル範囲を指定する。
//データ範囲を特定する。 let myUsedRng = st.getUsedRange();
▲テーブル化するために、シート内の使用されているセル範囲を指定します。
getUsedRange()メソッド
はセルの値が空っぽでも、罫線が余分に引かれているとその部分のセルまで取得してしまうので注意してください。
指定したセル範囲をテーブル化する。
//基本構文 addTable(”テーブル化するセル範囲”, ”1行目をHeaderとして扱う場合はtrue、扱わない場合はfalse”); //テーブル化して変数に入れる。 let myTable = st.addTable(myUsedRng, true);
▲テーブル化するためにaddTable()メソッドを使います。
戻り値を返す。
//returnキーワードを使って戻り値を返します。 //返す値はヘッダー行を抜かしたテーブルの行数、つまりデータ数です。 return myTable.getRangeBetweenHeaderAndTotal().getRowCount();
returnキーワードを使ってPowerAutomateに戻り値を返します。
function main(workbook: ExcelScript.Workbook){}って何?
Office Scriptでは必ず必要になるおまじないです。
(Step2) Power Automateフローの作成

▲Power Automateのコンソール画面を開いたら、「作成」→「インスタントクラウドフロー」をクリックします。

▲お好きなフロー名を入力し、「手動でフローをトリガーします。」を選択し「作成」をクリックします。
スクリプトの実行アクションを追加します。

▲新しいステップをクリックします。

▲「Excel Online」を選択します。

▲スクリプトの実行をクリックします。

▲各パラメータを設定します。
- 場所: Excelファイルが保存されたSharepointサイト、あるいはグループを選択します。
- ドキュメントライブラリ: Excelファイルが保存されたライブラリを選択します。
- ファイル: Excelファイルを選択します。
- スクリプト: officeスクリプトファイルを選択します。

以上でPower Automateのフロー作成が完了です。
PowerAutomateフローをテスト実行します。

▲テスト実行して動作を確認してみます。 フローを保存しましたら、Power Automateの画面右上のテストをクリックします。

▲手動を選択してテストをクリックします。

▲フローの実行をクリックします。


▲実行結果を見てみます。
「出力」のところにある”result”が戻り値です。データ件数である「7」が正しく取得出来ました!
Office Scriptを学ぶ
Office ScriptによるExcel on the web 開発入門
Office Scriptを体系的に学ぶにはこちらの書籍の購入をおススメします。現時点ではAmazonで購入できる唯一の日本語で書かれたOfficeスクリプト(Office Script)の書籍です。(2021年11月05日時点)そもそもOffice Scriptを解説している日本語のWebサイトやYouTubeは多くありませんので貴重な解説書です。
Office Scriptのベース言語であるTypeScriptの解説から始まるのでプログラム経験のない方でもこの1冊でOffice Scriptを始めることができるかと思います。セルやシートの操作方法はもちろん、Office Scriptの一番のメリットであるPower Automateとの連携の方法(変数の受け渡し等)も解説されていて一通り網羅されているかと思います。Kindleで読んでも文字サイズやレイアウトがキレイで読みやすいのもありがたかったです。
Office scriptsを習得すればExcelデータが多い会社や組織では自動化の可能性が広がります。Excel VBAではできなかったクラウド連携やトリガー起動による自動化をぜひ体感してください。
Power Automate学習教材

▲Kindleと紙媒体両方提供されています。デスクトップフロー、クラウドフロー両方の解説がある書籍です。解説の割合としてはデスクトップフロー7割・クラウドフロー3割程度の比率となっています。両者の概要をざっくり理解するのにオススメです。

▲Power Automate for Desktopの基本をしっかり学習するのにオススメです。この本の一番のメリットはデモWebシステム・デモ業務アプリを実際に使ってハンズオン形式で学習できる点です。本と同じシステム・アプリを使って学習できるので、本と自分の環境の違いによる「よく分からないエラー」で無駄に躓いて挫折してしまう可能性が低いです。この点でPower Automate for desktopの一冊目のテキストとしてオススメします。著者は日本屈指のRPAエンジニア集団である『ロボ研』さんです。

▲Power Automate クラウドフローの入門書です。初心者の方には図解も多く一番わかりやすいかと個人的に思っています。
Microsoft 365/ Power Automate / Power Platform / Google Apps Script…
▲Udemyで数少ないPower Automateクラウドフローを主題にした講座です。セール時は90%OFF(1200円~2000円弱)の価格になります。頻繁にセールを実施しているので絶対にセール時に購入してくださいね。満足がいかなければ返金保証制度がありますので安心してご購入いただけます。
まとめ

PowerAutomateフローからofficeスクリプトを実行し戻り値を取得することが出来ました。

今回作成したスクリプトはExcelファイルに保存されるわけではなく、スクリプトファイルとして別に保存されます。つまり他のExcelファイルでもコピペすることなくそのまま使用可能です。

VBAではブックにプログラムコードが保存されるので、他のブックでプログラムを使用する場合にはコピペするなどの対応が必要でした。この点はVBAより便利だにゃ

次の記事では受信メールに添付されたExcelファイルをofficeスクリプトを使って分析や加工を試してみたいと思います(*’ω’*)
