MENU
IT
PR

【VBA・OfficeScripts】PowerAutomateでExcelマクロ実行

OfficeScript VBA Officeスクリプト
ほし
記事内に商品プロモーションを含む場合があります

本記事を読んでいただき、ありがとうございます。

今回は、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を実行できます!

Excel VBA Office Script 違い Officeスクリプト
Excel VBAとOffice Scriptsの違い

OfficeScriptsはTypeScriptをベースにして作成されているのでTypeScriptに馴染みのある方は、

比較的容易に学習できると思います。

また、Excelに関する操作に関しては、Excel VBAで開発することがある方はかなり敷居が低くなります。

サンプルコード

これから、実際にサンプルコードを用いて説明していきます!

今回のサンプルコードは、Excelの目次を作成するソースコードになります。

OfficeScripts 実行結果

サンプルコードは、Officeスクリプトのドキュメントを参考に作成しております。

コメントで補足していますが、簡単に処理内容を説明いたします。

  1. 全ワークシートを取得する。
  2. 「目次」シートが既にあるか確認する。
    • 既にある場合は「目次」シートを更新する。
    • ない場合は、3の処理を実施する。
  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 OfficeScript 呼び出し
フロー作成方法 Officeスクリプト

PowerAutomateのフロー編集画面に遷移したら、

実行したいExcelファイルに合わせて設定してください。

PowerAutomate フロー スケジュール実行
PowerAutomate 処理フローの設定値

「スクリプトを実行」の設定値

  • 場所:OneDrive
  • ドキュメントライブラリ:実行したいExcelファイルが保存してあるライブラリ
  • ファイル:マクロを実行したいExcelブック
  • スクリプト:OfficeScriptsのマクロ

フローに項目値を入力できたら、右上の「テスト」から正常に動作するか「手動テスト」を実行してみましょう。

正常に実行できていれば、PowerAutomateからExcel自動操作(Officeスクリプト)が完了しました。

最後に

最後まで読んでいただきありがとうございました。

今回は、PowerAutomateとOfficeスクリプトでExcel操作を自動化しました。

本ブログでは、PowerAutomateの作業効率方法などについても紹介していますので、ぜひご覧ください。

ABOUT ME
ほし
ほし
エンジニア
ほしコラム管理人のほしです。 20代のITエンジニアです。 PowerAutomateで業務効率化の方法を中心に紹介していきます! たまに日常生活についても記事にしていきます! ほしコラム - にほんブログ村
記事URLをコピーしました