Power Automateを動画で学ぼう!Udemyキャンペーン中

Power AutomateからExcelファイルにOfficeスクリプトを実行する方法

目次

はじめに

じょじお

今日は、Web版Excel(Excel Online)のマクロであるOfficeスクリプトをPowerAutomateから実行する方法について、作成しながら解説します。

今回作成するフローチャート図

作成するPowerAutomateのフロー図

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

手順

じょじお

下記の手順で作業します。

  • Officeスクリプト作成
  • Power Automateフローの作成

(Step1)Officeスクリプト(Office Scripts)の作成方法

STEP
テストExcelデータを用意します。
テスト用Excelファイルの中身プログラム実行前

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

STEP
Officeスクリプトを新規作成します。
Excelの自動化タブの場所

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

Officeスクリプトの新規作成方法1

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

Officeスクリプトの新規作成方法2

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

Officeスクリプトを記述するところの説明

▲Officeスクリプトが新規作成されました。下図赤枠のところに処理を記述していきます。

STEP

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()プロパティに似ていますね(‘ω’)
コードで使用したメソッドについては後程解説します。
まずは体感してほしいので実行してみますね。

STEP

Officeスクリプトのテスト

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){}って何?

VBAで必ずSub ~ End Subって書いてその中にプログラムを書いてましたよね。あれと同じおまじないだと思ってください。

(Step2) Power Automateフローの作成

STEP
Power Automateのコンソール画面を開きます。

Power Automateのコンソール画面(こちらのページ)を開きます。

STEP
インスタントクラウドフローを作成します。
PowerAutomateフロー新規作成方法1

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

Power Automateフローの作成方法2

▲お好きなフロー名を入力し、「手動でフローをトリガーします。」を選択し「作成」をクリックします。

STEP

スクリプトの実行アクションを追加します。

Power Automateフローの作成方法4

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

Power Automateフローの作成方法3

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

Power Automateフローの作成方法3

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

PowerAutomateフローでofficeスクリプトを実行する

▲各パラメータを設定します。

  • 場所: Excelファイルが保存されたSharepointサイト、あるいはグループを選択します。
  • ドキュメントライブラリ: Excelファイルが保存されたライブラリを選択します。
  • ファイル: Excelファイルを選択します。
  • スクリプト: officeスクリプトファイルを選択します。
じょじお

以上でPower Automateのフロー作成が完了です。

STEP

PowerAutomateフローをテスト実行します。

PowerAutomateフローのテスト方法

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

Power Automateのテスト方法2

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

Power Automateテスト方法3

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

Power Automateフローの実行画面
STEP
実行結果ログを確認します。
PowerAutomateフローの実行結果

▲実行結果を見てみます。

「出力」のところにある”result”が戻り値です。データ件数である「7」が正しく取得出来ました!

まとめ

じょじお

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

じょじお

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

ぽこがみさま

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

じょじお

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

ノンプログラマーでも自動化スキルを身につける。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
URLをコピーする
URLをコピーしました!
目次
閉じる