【VBA・OfficeScripts】PowerAutomateでExcelマクロ実行
本記事を読んでいただき、ありがとうございます。
今回は、PowerAutometeでExcelを自動操作する方法(マクロ実行)について解説していきます。
「PowerAutomateでVBAを動かしたいけど、できない…」
「Excel操作を自動化したい!」そんな方に向けた記事になっております!!
はじめに
本記事で解決できることは、以下のような内容になっています。
- PowerAutomateでExcel自動操作
- PowerAutomateでマクロを実行する方法
- Office Scriptsの基礎
- VBAとOffice Scriptsの違い
それでは実際にサンプルコードを用いながら、OfficeScriptsでExcel自動化する方法を解説していきます。
Office Scriptsでできること
OfficeScriptsってどんなことができるのかというと、
簡単に言ってしまうと「Web版Excel VBA」です!
昨今は、Web上(Webアプリケーション)でExcelを操作することが増えてきたと思います。
その際に利用できるマクロになっています。
Excel VBA と OfficeScriptsの違い
Excel VBAはワークブックに依存してしまいましたが、Office Scriptsは、Onedriveに保存されます。
そのため、他の人とシェアしたり、Office365にログインできれば端末に依存せず使用することができます。
なにより、Power AutomateからOffice Scriptsを実行できます!
OfficeScriptsはTypeScriptをベースにして作成されているのでTypeScriptに馴染みのある方は、
比較的容易に学習できると思います。
また、Excelに関する操作に関しては、Excel VBAで開発することがある方はかなり敷居が低くなります。
サンプルコード
これから、実際にサンプルコードを用いて説明していきます!
今回のサンプルコードは、Excelの目次を作成するソースコードになります。
サンプルコードは、Officeスクリプトのドキュメントを参考に作成しております。
コメントで補足していますが、簡単に処理内容を説明いたします。
- 全ワークシートを取得する。
- 「目次」シートが既にあるか確認する。
- 既にある場合は「目次」シートを更新する。
- ない場合は、3の処理を実施する。
- 目次シートを作成する。
1//Excelの目次作成 マクロ
2function main(workbook: ExcelScript.Workbook) {
3 //ExcelScriptが実行されている、ワークシート一覧を取得する。
4 let sheets = workbook.getWorksheets();
5
6 //ワークシート一覧の名前を取得する。
7 let names = sheets.map((sheet) => sheet.getName());
8
9 // 1シート目の名前が"目次"ではない場合
10 if (names[0] != "目次") {
11 // シートを追加する。
12 let tocSheet = workbook.addWorksheet();
13 // 追加したシートの位置を1番最初に設定する。
14 tocSheet.setPosition(0);
15 // 追加したシートの名前を"目次"にする。
16 tocSheet.setName("目次");
17 //追加したシートの"A1"セルに"目次"を入力する。
18 tocSheet.getRange("A1").setValue("目次");
19 //追加したシートの"A1"セルにのフォントを太字にする。
20 tocSheet.getRange("A1").getFormat().getFont().setBold(true);
21 }
22
23
24 // 一番最初のシートを設定する。
25 let tocSheet = workbook.getFirstWorksheet();
26 // "No"と"リンク"を貼り付ける目次の位置を選択する。
27 let tocRange = tocSheet.getRange("A2:B2")
28 // 選択範囲に値を入力する。
29 tocRange.setValues([["No", "シート名"]]);
30
31 //Excelのワークシート一覧を取得する。
32 let worksheets = workbook.getWorksheets();
33 // 選択範囲を変更する
34 tocRange = tocRange.getResizedRange(worksheets.length, 0);
35
36 // ワークシートの2番目から最後まで繰り返しを実施する。
37 for (let i = 1; i < worksheets.length; i++) {
38 // シートのNoを入力する。
39 tocRange.getCell(i, 0).setValue(i);
40 // シートのハイパーリンクを入力する。
41 tocRange.getCell(i, 1).setHyperlink({
42 textToDisplay: worksheets[i].getName(),
43 documentReference: `'${worksheets[i].getName()}'!A1`
44 });
45 };
46
47 //"目次"シートを選択する。
48 tocSheet.activate();
49 }
「getCell」や「setValue」「getRange」などについて解説していますので、以下のボタンから!
PowerAutomate から OfficeScriptsを呼び出し
それでは、先ほど作成したマクロをPowerAutomateから呼び出してみましょう。
今回は、日次でOfficeScriptを実行するフローを作成していきましょう。
こちらは、Officeがサンプルとして提供しているので簡単に実装できます。
- PowerAutomateからの呼び出し方
- Excelの「自動化」タブを選択
- 「タスクを自動化する」を選択
- 「Excelで実行するOfficeスクリプトをスケジュールする」を選択
PowerAutomateのフロー編集画面に遷移したら、
実行したいExcelファイルに合わせて設定してください。
「スクリプトを実行」の設定値
- 場所:OneDrive
- ドキュメントライブラリ:実行したいExcelファイルが保存してあるライブラリ
- ファイル:マクロを実行したいExcelブック
- スクリプト:OfficeScriptsのマクロ
フローに項目値を入力できたら、右上の「テスト」から正常に動作するか「手動テスト」を実行してみましょう。
正常に実行できていれば、PowerAutomateからExcel自動操作(Officeスクリプト)が完了しました。
最後に
最後まで読んでいただきありがとうございました。
今回は、PowerAutomateとOfficeスクリプトでExcel操作を自動化しました。
本ブログでは、PowerAutomateの作業効率方法などについても紹介していますので、ぜひご覧ください。