【Power Automate】Officeスクリプトを用いたExcelへのデータの受け渡し編

ビジネス,Microsoft365Power Automate,Excel,Officeスクリプト

はじめまして、八咫(やた)です。
最近繰り返し行うルーティンの業務を楽にしたいな~、という思いでPower Automateを使い始めました。
その際に困った「Power Automateで得た情報をExcelへ受け渡す方法」について、今回は書いていこうと思います。

はじめに

本記事は「Power Automate」で取得したデータを「Excel」に転記する方法を記載しています。
キーワードは「Web 向け Power Automate」と「Officeスクリプト」。
どちらも初めて聞いた、という方は今回の記事の内容は難解なものになるかもしれません…。
ではまず、今回使用するツールの説明からいってみましょう。

Power Automateって何?

まず、Power Automateについて軽く説明します。
いわゆるRPA(ロボティック プロセス オートメーション)と呼ばれているものですね。
Microsoft製なので、Microsoft関連のツール(ExcelやOutlook)などと相性が良いのが特徴になります。
そんなPower Automateですが、大きく分けて2種類あります。
今回の記事ではWeb 向け Power Automateを使用します。

Web 向け Power Automate(旧Microsoft Flow)

クラウドで動作します。
なので、パソコンを切っていても動きます。
今回はこちらを使用します。

デスクトップ向け Power Automate

デスクトップ上で動作します。
Windows11のユーザーであれば無料で使えます。

Officeスクリプトって何?

OfficeスクリプトはWeb版のExcelに(しか使えない)マクロ。
Officeスクリプトは下図の赤枠「自動化」から扱う事ができます。

ちなみに、Web版のExcelからを使えるからといって必ず自動化が使える訳ではなく、ライセンスによっては「自動化」タブが扱えない事もあるので悪しからず…。
先ほど「Web版のExcelに(しか使えない)マクロ」と書きましたが、必然的に今回扱うExcelはWeb版です。
デスクトップにあるExcelファイルでは動きません※1
※1:OneDrive上、SharePoint上に保存すれば、動くようにできます。

今回やること

「はじめに」で説明した通り、「Web 向け Power Automate」と「Officeスクリプト」を用いて、「Power Automate」で取得したデータを「Excel」に転記 します。
「Web 向け Power Automate」はちょっと触った事があり、「Officeスクリプト」は初めて聞いたけどExcelは使う機会が比較的ある、位の人が理解できるように頑張って書いていきます。
Power Automateについてもっと基礎的な事が知りたい!という方は過去にアシュリーさんがPower Automateについて触れていますので、そちらを見てみるのもいいかもしれません。

・アシュリーさんの過去記事

さて、今回のおおまかな流れはこんな感じです。

ExcelとOfficeスクリプトの準備

この項目では「Excelの練習用データ」と「Officeスクリプト」の作成を行います。
まずはWeb用のExcelデータから用意していきましょう。
「あれ、いきなりStep.2から?」と思われたかもしれませんが、ちょっと理由があります。
後ほど説明しますので、今は一旦忘れましょう。
SharePoint、OneDriveのどちらかに新規データを作成して下さい。
下図はOneDrive上に作成しました。

「練習データ」ファイルの上で右クリックすると「オンラインで表示」があるのでクリックします。

うまくいけばWeb版のExcelで先ほどの練習データが開きます。
自動化」タブを押して下さい。

ここがOfficeスクリプトに関する操作をするタブです。
ここから、Officeスクリプトを作っていきます。
データを受け取る為のスクリプトを作りたいので、「操作を記録」ボタンを押します。

そして「A1」セルに「練習」と入力します。
入力した後、右に出ている「操作を記録」ウィンドウ内の「停止」を押します。

すると、先ほど操作した内容を記録して、スクリプトが作成されます。
名前は多分「スクリプト1」という名前になっていると思います。
スクリプトの内容は「A1セル」に「練習」を入力するというものです。
「▷実行」を押すと、「A1セル」に「練習」を入力するOfficeスクリプトが起動します。
ですが、今回やりたいのは「練習」の入力ではなく「Power Automateから受け取ったデータ」の入力です。
編集を押して、中身を見てみましょう。

下図が先ほど作成したスクリプトの中身です。

ちょっとしか操作していないのに、既に複雑な「何か」が記載されています。
わかるのは「"A1″」とか「"練習"」くらいですね。
ちょっと日本語にしてみましょう。
最近始めたてなので正確ではないのはご勘弁を…。

■1行目:Officeスクリプト、始めるよ!
開始の宣言です。1行目の最後に「{」があり、5行目に「}」があります。
この間にあるスクリプトが動きます。

■2行目:今アクティブになっているシートに書こうかな
変数の宣言です。厳密にいうとここは準備しているだけで、何か動作したりする訳ではありません。

■3行目:「…
緑色はコメントアウトと呼ばれています。プログラムではなく、メモ書きです。
「Set range A1 on selectedSheet」は日本語で「選択したシートに範囲A1を設定します」。
※Google翻訳
スクリプトを書いている人が何を書いたか忘れない為に、もしくは他の人が編集してもわかるようにしています。
「//」と書かれた以降のテキストは改行されるまでコメントアウトされます。

■4行目:「A1」セルに「練習」を入力します。
ここがこのスクリプトのメイン部分ですね。
selectedSheet」は2行目で準備した変数を使用しています。
そして「getRange(“A1")」でどこに書くかを決定し、
setValue(“練習");」で何を入力するかを命令しています。

■5行目:Officeスクリプト、終わります。
おわり。

どうだったでしょうか。
意味不明だった「何か」も少しわかってきたのではないでしょうか。
どうやら4行目で行っている「setValue(“練習");」が情報の入力をしていそうです。
なら、「setValue(Power Automateから受け取ったデータ);」って書いたたら、動きそうじゃないですか?
でも「Power Automateから受け取ったデータ」はいつも同じとは限りませんよね。
Power Automateから受け取ったデータが仮に「メールの件名」だったとしたら、

「【メールマガジン3月号】今年の花粉症はヤバい!?必勝対策、教えます」かもしれませんし、
「〇〇様、〇〇のご購入ありがとうございます」かもしれません。

そんな時の為に、Officeスクリプトには何がきても入れておける箱があります。
箱は正式名称を「変数」と言い、色んな所で使われています。
身近な所では電卓もそうですね。

電卓でわかる!変数のイメージ!

例えば、電卓で「1+2」を計算したとします。
操作としては「1」を押して、「+」を押して、「2」を押しますよね。
で、「=」を押せば3になる…のはどうでもよくて、「2」を押した時に電卓から表示されている「1」が消えませんか?
でも、ちゃんと計算できている。
これは「1」というデータを変数という箱の中に入れておいて、電卓が覚えているからなんです。

これと同じ要領でPower Automateから受け取ったデータを変数に入れ、「setValue(“変数");」とすれば、Officeスクリプトは完成です。
その為に、1行目に追加で変数を受け取る処理を追加します。

変更前
■1行目:Officeスクリプト、始めるよ!
function main(workbook: ExcelScript.Workbook) {

変更後
■1行目:Officeスクリプト、始めるよ!何かデータが来たら「practice」に入れるよ!
function main(workbook: ExcelScript.Workbook, practice:string) {

これで、Power Automateから一つデータを受け取る事ができます。
追加された「practice:string」について見てみましょう。
「practice」は変数の名前です。好きな名前を付ける事ができます。
…ただし「練習」とか日本語はダメです、半角英数字を使って名前を付けて下さい。
「:string」は箱(変数)の形を決めています。
stringは変数に「文字」を入れる事ができる形にします。
プログラマ的には「変数の型を宣言する」と言ったりします。
他には「数字」を扱う型「number」などがあります。
なので、「Power Automateから数字を受け渡したい」なら、「:string」ではなく「:number」と宣言してあげて下さい。
次に、「practice」変数を出力する場所を作ります。
お察しの方は素晴らしい、「setValue(“練習");」を使います。

変更前
■4行目:「A1」セルに「練習」を入力します。
  selectedSheet.getRange(“A1").setValue(“練習");

変更後
■4行目:「A1」セルにPower Automateから受け取ったデータを入力します。
  selectedSheet.getRange(“A1").setValue(practice);

これで、Power Automateから受け取ったデータをA1へ入力ができます。
注目するポイントは「""」があるかないか。
setValue(“練習"); ⇒ 「""」がある場合は文字列を「テキスト」と解釈します。
setValue(practice); ⇒ 「""」がない場合は文字列を「変数」と解釈します。
完成!

うまくできているか確認したい所ですが、Power Automateから受け渡すデータを作らないと確認できない為、Officeスクリプトは一旦ここで完了です。

Power Automateの準備

この項目ではPower Automateを使って「フロー」を一つ作成します。
大事なポイントなので繰り返しますが、今回使うのは「Web版」のPower Automateです。

備考
作業工程のどこかで、使用するアプリケーション(ExcelとかOutlookとか)の接続認証を求められる事があります。
自動で処理を行う都合上、どのアカウントで操作を行うかを決める必要がある為です。
認証を求められたら、使用するアカウントで接続してあげて下さい。

Web版Power Automateのホーム画面に着いたら、左のナビゲーションの中から「作成」を選択します。
すると、5つの中から選ぶ画面に遷移するので、「インスタント クラウド フロー」を選択して下さい。
今回は練習なのでインスタント クラウド フロー(手動)にしますが、「特定のメールが届いたら自動的に処理して欲しい」という場合には「自動化したクラウド フロー」(条件を満たしたら起動するトリガータイプ)を使用します。

フローの名前(今回は「練習フロー」にしました)を決めます。
その後、トリガーを選択する訳ですが、今回はデータの受け渡しがうまく動くかを確認するだけなので、「手動でフローをトリガーします」を選択します。

さて、ここからフローを書いていきます。
黄線で行う処理を追加していきます。

最初に受け渡し用のデータを用意します。
実際の運用ならTeamsのチャットだったりOutlookのメールだったりすると思いますが、今回は受け渡しだけが目的なので、代わりのテキストを用意します。
検索窓に「データ操作」と入力します。
そこから「作成」アクションを探して下さい。

入力する欄があるので、「受け渡し用データ」と入力しましょう。

次はいよいよ、先ほど作ったOfficeスクリプトを呼び出します。
Excel Online」を選択して、

スクリプトの実行」を選択します。

入力欄が4つあるので、上から順に設定していきます。

まずは「場所」。
影響を与えたいExcelシート(今回は「練習データ.xlsx」)を目指して選んでいきます。
今回は「OneDrive」に保存したので、「OneDrive for Business」を選択します。

次は「ドキュメント ライブラリ」。
ここは私の場合「OneDrive」しかないので1択。

次は「ファイル」。
うまくいっていれば、自分のOneDriveフォルダのリストが表示されるので、「練習データ.xlsx」を探し出します。

最後に「スクリプト」。
Officeスクリプトを選択します。
ここでスクリプトが必要になる為、先に作った、という訳です。
作ったスクリプトの名前は「スクリプト1」なので、それを選択します。

「スクリプト1」を選択したら、新たな項目「practice」が追加されました

Officeスクリプトの1行目にデータ受け渡し用の変数を宣言したのを、覚えているでしょうか。

■1行目:Officeスクリプト、始めるよ!何かデータが来たら「practice」に入れるよ!
function main(workbook: ExcelScript.Workbook, practice:string) {

ここで設定した変数「practice」が、Power Automateに反映されたのです。
逆に言えば、ここに表示されなければ「変数の宣言に失敗した」という事になります。
さて、「practice」の項目に入れるのは、先ほど用意したデータ。

Power Automate内で用意したデータは稲妻マークの青いボタンから選択します。
ひとつ前のステップで作成した「作成」の出力を選択します。

これで全ての設定が完了しました。

うまく動作すれば、「作成」に入力したテキスト「受け渡しデータ」が練習データ.xlsxのA1セルに入力されるはずです。
動作をテストするには右上のフラスコアイコン「テスト」を押します。

左下に「保存&テスト」があるので、それを押します。

さぁ、いよいよ実行です。

エラーがなければ、無事に完了するはずです。

では、練習データ.xlsxを見に行ってみましょう。
無事に受け渡しがうまくいったようです。
「受け渡し用データ」が下図ExcelのA1シートに記載されています。

最後に

どうだったでしょうか。
難易度の事を考慮して、今回は「データの受け渡し方法」のみに絞って解説させて頂きました。
その為、今回の事ができたからといって、残念ながら何かの業務フローが改善できる訳ではありません。
Power Automateを使って業務改善をしたい!でもデータの受け渡しがわからない!」という方の手助けになれば幸いです。
では、機会があればまたお会いしましょう。
ここまで読んで下さってありがとうございました。


そんな株式会社アルタがお届けするソリューションが気になる方は…

Posted by 八咫