Officeスクリプトの実行について

Web版ExcelのOfficeスクリプトの実行方法とその注意点について

OfficeスクリプトはWeb版のExcelで利用可能な機能です
またこれは組織アカウントなので個人アカウントだけでは利用できません
とはいえ、この機能を個人で利用したい場面は少ないので、問題はないと思います

それよりもタイトルにありますように、この機能のパッとしない点が実行方法が限定的である点です
何よりExcelを利用している時にこの機能で何かをしようというのは現時点では現実的では無いかもしれません

その最大の理由がイベント処理が無い点です

VBAをある程度触ってきた人には良くわかると思いますが、このイベント処理が無いというのは結構大変です
処理の開始は常に手動実行以外の方法が無いからです

しかもVBAと比べるのも土俵が違いすぎるかもしれませんが、処理速度が目で追えるレベルです
まだまだ発展途上の機能ではあるので、いずれはイベントも対応するかもしれません

が、現時点ではWeb版Excelとしては手動実行のみです
しかもこのスクリプトはブックとは別に存在しているので、ブックを渡せば処理が実行できるわけではありません
その処理ファイルが必要となります

これ自体は一長一短かとは思うので、VBAのイメージでいくと面倒に感じる部分もあるかもしれませんが、仕様と割り切って良いでしょう

あと気になるのが、所持してるスクリプトが全て表示されるので数が多くなってくるとちょっと管理が面倒です
これも何か対応を検討して欲しいな、と思ってます

自動実行(PowerAutomate)について

実行は手動のみと上記で記載しましたが、あくまでもWeb版のExcel単独でいうと
ということになります

と、いうのも
PowerAutomateから実行することが可能です

ちなみにDesktop版のPowerAutomateではスクリプトは実行できません
だってExcelがDesktop版の操作になるので

そして、このPowerAutomateからの実行では引数を渡して、返し値を受け取ることも可能です
これを応用すれば、PowerAutomate経由でPowerAppsでExcelデータを制限を受けずにデータの取得を行うことが出来ます

またPowerAutomateによりトリガーを設定することで、何かしらのイベントでスクリプトを実行することが出来ます
メールを受信したらその内容をExcelに転記したり、OneDriveにファイルが作成されたらファイル情報を転記したり等々

さらにこのスクリプトを併用することで、PowerAutomateではExcelのデータ入力はテーブル機能に対してしか行えなかったのが、任意のセルに入力することが出来ます
これが現状では最大の利用点かと思います

ただ、残念なことがあります
それはPowerAutomateでは2次元配列が作成出来ない点です
もちろん静的なものはコードの書き方で可能ですが、動的なものは作成できません

VBAでも同じですが、データの入力は配列で一括処理が早いので良く利用されます
これが引数として渡せないのです
もちろんスクリプト自体は多次元配列を引数に受け取ることも可能ですし、処理も可能です

そして、この処理時間に関して結構重要で最近ハマったのですが
PowerAutomateのアクションのタイムアウトの存在です
これがネックとなります

つまり、PowerAutomateでスクリプトを実行するアクションを実行した後に
その処理時間がタイムアウトの時間を超えてしまうと、PowerAutomate側でエラー終了となりスクリプト側でエラーは発生していないにも関わらずフローが失敗します

スクリプトをWeb版Excelで手動実行したら、エラー無く処理が完了するのに
PowerAutomateから実行するとエラーでフローが停止する

この現象に悩まされました

結果としてはタイムアウトが絡んでいることが分かったのですが
その設定を伸ばしても処理の引数が可変であった場合、どこまで保険を置くかは判断が難しいです

なので、タイムアウトの設定は変更せず
その時間内で処理が完了できるように調整する必要があります

例えば、全行の処理を実行したいのならば
スクリプト側で全行の処理にするのではなく、数百行ずつ実行する、といった処理の分割を行う必要があります
これが出来ない処理であれば、もはや現時点では仕様として対応出来ません

2000行ほどある処理を実行しようとした場合にタイムアウトとなっていたので
それを少しずつ減らして検証を行っていきました
結果として300行ほどがギリギリのラインであることが分かったので、処理は200行ずつ実行するようにしました
もちろんこれは処理内容によるので、ここに記載した数字には全く何の意味もありませんのであまり気には留めないで下さい
2000行だと毎回エラー終了するけど、200行ずつの分割実行にしたらエラー終了は無くなったという事が重要な点です

もう一つこの方法で重要なのが、返し値に処理が終端に達したことを知らせる必要があることです
その返し値になるまでPowerAutomateではループ処理を実行することになります

この辺はおいおい説明します

今回としてはWeb版Excelでは手動実行しかできない
PowerAutomateから自動実行は出来るがタイムアウトに注意する

ここを念頭において作成を進めてください