Office Scripts(Officeスクリプト)は、Excelの操作をTypeScriptで記述して自動化する機能です。日本語の解説には「Excel on the web専用で、デスクトップ版では動かない」と書いたものが今も残っていますが、現行仕様では誤りです。Microsoftの公式ドキュメントは、Excel on the webに加えてExcel for Windows(バージョン2210以降)とExcel for Macを対応環境に挙げています。この記事では、VBAとの違い、できることとできないことの境界、スクリプトの共有と保存場所、Power Automateから実行したときに挙動が変わる点を、公式仕様に沿って整理します。
まとめ
- 実体:Excel専用の自動化機能。言語はTypeScript 4.0.3で、WordやPowerPointでは使えません。
- 動作環境:Excel on the web/Excel for Windows 2210以降/Excel for Mac。iOS版Excelと、Web版以外のTeamsは対象外です。
- 利用条件:法人・教育機関向けの対象ライセンス10種とOneDrive for Businessが必要です。個人・ファミリー向けMicrosoft 365はプレビュー提供で、スクリプトボタンとブック経由の共有は使えません。
- VBAとの決定的な差:ブックの外に手が届かず、Excelのイベントでも起動できません。その代わり、Power Automateのクラウドフローから「スクリプトの実行」で直接呼び出せます(VBAはPCで動くデスクトップフロー経由)。
- 保存場所:スクリプトはブックの中ではなく、OneDriveの
/Documents/Office Scripts/に.ostsファイルとして保存されます。 - 上限:Excel on the webでは1回のやり取りが5MB・500万セルまで。Power Automate経由では同期実行120秒でタイムアウトし、実行回数は1ユーザー1日1,600回までです。
- 要注意:Excel上では動く
fetchによる外部API呼び出しが、Power Automate経由の実行では失敗します。
Office Scriptsの実体と、使い始めるための利用条件
TypeScriptで書き、ブックの外に保存される自動化
スクリプトはTypeScriptで書き、第1引数にExcelScript.Workbook型を取るmain関数から始まります。この関数が入口で、Excelはここから実行します。
function main(workbook: ExcelScript.Workbook) {
const sheet = workbook.getActiveWorksheet();
console.log(sheet.getName());
}
VBAのマクロがブックの中(.xlsm)に埋め込まれるのに対し、Office Scriptsのコードはブックとは別のファイル(.osts)としてOneDriveに保存されます。マクロ付きファイルを配り歩く運用が要らなくなるのは、この保存場所の違いから来ています。保存と共有の詳しい仕組みは後の章で扱います。
言語には制約があります。公式の「TypeScript の制限」によれば、Office ScriptsのTypeScriptはバージョン4.0.3で、それ以降に追加された言語機能は使えません。any型は明示・暗黙とも禁止、evalは非対応、ジェネレーター関数とArray.sortの中ではOffice Scripts APIを使えず、配列メソッドのコールバックはアロー関数しか渡せません。Excel・ExcelScript・consoleは予約語で、変数名に使えません。TypeScript本体の最新動向はTypeScript 6.0とは|5から6への移行手順とts5to6・7.0との違い【6.0.3対応】で扱っていますが、Office Scripts側は4.0.3から動いていない点を押さえておいてください。
ライセンスと動作環境の要件(デスクトップExcelでも動く)
公式の「プラットフォームの制限と要件」が挙げる法人・教育機関向けの必須条件は次の4つです。
| 要件 | 内容 |
|---|---|
| アプリ | Excel on the web/Excel for Windows(2210以降)/Excel for Mac |
| ストレージ | OneDrive for Business(組織内共有リンクの有効化が必要) |
| ライセンス | 下記10プランのいずれか |
| 接続 | 接続されたエクスペリエンスが有効なインターネット接続 |
対象ライセンスは、Office 365 Business、Office 365 Business Premium、Office 365 ProPlus、Office 365 ProPlus デバイス用、Office 365 A3、Office 365 A5、Office 365 Enterprise E1、Office 365 Enterprise E3、Office 365 Enterprise E5、Office 365 F3 の10プランです。「Business Standard以上が必要」という説明を見かけますが、一覧にはE1やF3も入っています。プランの選び分けそのものはMicrosoft 365 Business Standardとは|Basic・Premiumとの違いと選び方を参照してください。
Power AutomateからOffice Scriptsを呼ぶにはビジネスライセンスが必要です。E1とF3はPower Automateからスクリプトを使えますが、Excelの画面内にあるPower Automateとの直接統合は使えません。個人・ファミリー向けMicrosoft 365では、Excel on the webかExcel for Microsoft 365を使い、Microsoft 365 Insiderプログラムに参加することを条件にプレビューとして提供されています。
「自動化」タブが出ないときの確認順
Office Scriptsは、Excelのリボンの「自動化」タブにあります。条件を満たしているのにタブが出ない、または押せない場合は、次の順に確認すると原因を切り分けられます。
- ブラウザーのCookie:Excel on the webでは、サードパーティCookieが有効でないとタブ自体が表示されません。プライベートブラウズでは毎回設定し直す必要があります。
- 管理者の設定:Microsoft 365の管理者向けドキュメントによると、Office Scriptsは既定でオンです。オフにされていないか、特定のグループだけに許可されていないかを確認します。設定変更の反映には最大48時間かかります。なお、この設定は管理センターからCloud Policyサービスへ移行しており、2025年10月27日以降は管理センター側の旧設定を変更できません。
- グループポリシー:デスクトップ版Excelでは、グループポリシーでOffice Scriptsを止められます。この場合は「自動化」タブ自体は表示されるものの、項目が灰色になり、「Office スクリプトにアクセスできません」というメッセージが出ます。
- 条件付きアクセス:認証コンテキストを設定しているテナントでは、Excel on the webのOffice Scriptsがサポートされません。Excel for WindowsかExcel for Macで使います。
- 提供対象外の環境:GCC High以上の政府機関向けクラウドでは非対応です。Teams内のExcelは、Teams on the webでしか使えません。
VBAマクロとの違いと、VBAを残すべきかの判断基準
公式が示す機能差:クラウド向けとデスクトップ向け
Microsoftの「Office スクリプトと VBA マクロの違い」は、両者の基本的な違いを「VBA マクロはデスクトップ ソリューション用に開発され、Office スクリプトはセキュリティで保護されたクロスプラットフォームのクラウドベースのソリューション用に設計されている」と説明しています。この設計思想の差が、そのまま機能差になります。
| 観点 | Office Scripts | VBAマクロ |
|---|---|---|
| Excel on the web | 動作する | 動作しない |
| Excel以外のOffice製品 | 非対応 | 対応 |
| Power Automate | クラウドフローから呼べる | デスクトップフロー経由 |
| COMアドイン/OLE | 不可 | 可能 |
| アクセス範囲 | ブックのみ | デスクトップ全体 |
| Excelのイベント | 非対応 | 対応 |
| 保存場所 | OneDrive・SharePoint(.osts) | ブック内(.xlsm) |
特に効くのがイベント非対応です。Office Scriptsは、ユーザーが手動で起動したときか、Power Automateのフローが呼び出したときにしか動きません。逆にVBAはクラウドフローのコネクタから呼べず、Power Automateで動かすにはPC上のデスクトップフローで「Excel マクロの実行」アクションを使うことになります。「セルが変更されたら自動で走る」というVBAのWorksheet_Changeのような処理は、Office Scripts単体では書けません。一方で同じ比較ドキュメントは、Office ScriptsがExcel on the webのほぼすべてのシナリオに対応し、Webに新機能が出ればアクションレコーダーとAPIの両方で対応するとしています。
VBAを残すべきケースの判断基準
「VBAは古いから全部Office Scriptsへ」と考えがちですが、次に当てはまる処理は移行対象から外してください。動かないものを作り直す時間を丸ごと失います。
- Excel以外のOfficeアプリを操作している:Word・PowerPoint・Accessを触るマクロは、Office Scriptsでは書き直せません。
- ローカルのファイルや他アプリをCOM/OLEで操作している:Office Scriptsはブックの外に手が届きません。
- イベント駆動やUserFormでの入力に依存している:どちらもOffice Scriptsには無い仕組みです。
- 閉じたネットワークでオフライン運用している:Office Scriptsはインターネット接続とOneDriveを前提にしています。
逆に、Web版Excelでも動かしたい、Power Automateで定時実行したい、マクロ付きファイルの配布とセキュリティ警告をやめたい、という動機ならOffice Scriptsが合います。Power QueryやCopilotまで含めてExcel業務の自動化手段を選び分けたい場合は、Excel・Office業務の自動化|Power Query・Officeスクリプト・Copilotの使い分けが判断の地図になります。
VBA資産の移行手順と自動変換ツールの不在
VBAをOffice Scriptsへ変換する公式ツールはありません。言語も実行モデルも別物なので、書き直しは手作業です。ただし、Office Add-insのJavaScript APIで必要だったload()/sync()の明示的な呼び出しは、Office Scriptsでは要りません。現実的な手順は、対象のVBA処理をExcel上の手動操作として再現し、アクションレコーダーで記録して土台のコードを作り、そこに条件分岐やループを足していく流れです。Googleスプレッドシート側の同種の仕組みと比べたい場合はGAS(Google Apps Script)とは?できること・制限・始め方を開発者目線で解説を参照してください。
VBA廃止時期の非公表と、移行を急ぐべき処理の見極め
「VBAはいつまで使えるのか」に対する事実は、MicrosoftがVBAの廃止時期を公表していないことです。比較ドキュメントも「現時点では、VBA では、特にデスクトップ クライアントで使用できる Excel 機能のより完全なカバレッジが提供されています」と書いており、機能面でVBAが劣った扱いになったわけではありません。
ただしOutlookでは状況が違います。新しいOutlook for WindowsはVSTOアドインとCOMアドインをサポートせず、MicrosoftはOutlook Webアドインへの移行を案内しています。これはOutlookの話で、ExcelのVBAについて同様の非対応が示されたわけではありません。Excelについては、動作環境の要件で優先順位を決めるのが合理的です。Web版Excelでも動かす処理と、Power Automateで無人実行したい処理から先にOffice Scriptsへ寄せ、デスクトップ内で完結する既存VBAは急いで触らない。期限から逆算して全面移行を計画するより、動作環境の要件が変わった処理だけを選んで移すほうが失敗しません。
Office Scriptsでできることと、できないことの境界
対応する操作範囲:セル・書式・テーブル・グラフ・ピボット
ExcelScript APIはExcelの画面構造に対応しており、ブック→ワークシート→範囲(Range)の階層でセルにアクセスします。Rangeは値・数式・書式を持ち、getValues/setValues、getFormulas/setFormulas、getFormatで操作します。テーブル(addTable)、グラフ(addChart)、ピボットテーブル、図形、コメント、画像もAPIの対象です。
function main(workbook: ExcelScript.Workbook) {
const sheet = workbook.getActiveWorksheet();
const headerRange = sheet.getRange("B2:E2");
headerRange.setValues([["Product", "Quantity", "Unit Price", "Totals"]]);
headerRange.getFormat().getFill().setColor("#4472C4");
const dataRange = sheet.getRange("B3:D5");
dataRange.setValues([
["Almonds", 6, 7.5],
["Coffee", 20, 34.5],
["Chocolate", 10, 9.54]
]);
const totalRange = sheet.getRange("E3:E6");
totalRange.setFormulas([["=C3 * D3"], ["=C4 * D4"], ["=C5 * D5"], ["=SUM(E3:E5)"]]);
totalRange.setNumberFormat("$0.00");
sheet.addTable("B2:E5", true);
}
このスクリプトはB2:E6の既存の値を上書きし、同じ場所にテーブルを作るので、空のシートで実行してください。2回目以降はテーブルが重なって作成に失敗するため、次の章の例のように既存テーブルを確かめてから作り直します。総計を入れたE6は、テーブル範囲(B2:E5)の外に置いています。テーブルに総計行を持たせたい場合はTable.setShowTotalsを使います。
Excel専用という制約(PowerPoint・Wordでは使えない)
名前に「Office」と付くため他のアプリでも使えると誤解されがちですが、比較ドキュメントは「Office スクリプトは Excel でのみ使用できる」と明記しています。PowerPointのスライド生成やWordの差し込み文書は、Office Scriptsでは自動化できません。Excel以外を含む自動化には、Power AutomateのアクションかOffice Add-ins、あるいはVBAを使います。
外部JavaScriptライブラリの非対応
公式の「コード エディター環境」は、外部のサードパーティJavaScriptライブラリをサポートしないと明記しています。npmのパッケージを読み込んで日付処理やCSV解析を任せる、といった書き方はできません。使えるのはOffice Scripts APIと、MathやJSONのような組み込みオブジェクトだけです。重い集計や統計処理をExcel上で回したいなら、Python in Excelの使い方|有効化・xl()・ライブラリと制限を公式仕様で整理のように別の手段を選ぶほうが素直です。
5MB・500万セルというデータ転送の上限
Excel on the webからスクリプトでブックを呼び出す場合、1回の要求・応答は5MBまで、範囲は500万セルまでです。超えると「応答ペイロードのサイズが制限を超えました」というエラーになります。公式の回避策は、大きな範囲を複数の小さな範囲に分けるか、Range.getSpecialCellsで対象セルを絞り込むことです。1回の読み書きが5MBか500万セルを超える設計なら、最初から範囲を分けて処理する前提で組んでください。
最初のスクリプトを作る手順とコードの書き方
アクションレコーダーでの記録と不要な処理の整理
「自動化」タブの「操作の記録」からアクションレコーダーを起動すると、セルの編集・書式変更・テーブル作成といった操作がスクリプトとして記録されます。最初の1本は次の順で作れます。
- テスト用のブックを開き、「自動化」タブの「操作の記録」を選ぶ
- 自動化したい操作(列の削除・書式設定・テーブル作成など)を手で行う
- 記録を停止すると、スクリプトとして保存される
- 「自動化」タブのスクリプト一覧から記録したスクリプトを開き、作業ウィンドウの「実行」を選ぶ
- セルの値や書式が目的どおりに変わったかを確かめる
スクリプト全体を保存せずにコードだけ取り出したいときは「コードとしてコピー」ボタンを使います。
記録されたコードは、まずテスト用のブックで実行して結果を確かめます。目的どおりに動けばそのまま使えますが、操作の途中で発生した選択やアクティブ化、やり直した書式変更まで残っていることが多く、実行速度と読みやすさを落とします。整理するときに残すのは「値を設定する」「書式を当てる」「テーブルを作る」といった、結果に直結する行だけです。
記録の代わりに、AIにスクリプトの下書きを作らせる方法もあります。Microsoftサポートの「Excel の Office スクリプトの概要」は、この機能をプレビュー段階で、すべてのユーザーが使えるわけではないと説明しています。生成されたコードも、記録したコードと同じく、不要な行を削って動作を確かめてから使ってください。
コードエディターでの条件分岐とループの追加
アクションレコーダーではif/elseやループを記録できないため、コードエディターで書き足します。対象の有無を確かめるときは、getTableが指定した名前のテーブルを見つけられないとundefinedを返す仕様を使います(戻り値やエラー時の動きはメソッドごとに違うため、使うメソッドのリファレンスで確認してください)。
function main(workbook: ExcelScript.Workbook) {
const sheet = workbook.getWorksheets()[0];
const oldTable = sheet.getTable("MyTable");
// 既存テーブルがあれば作り直す(名前の衝突を避ける)
if (oldTable) {
oldTable.delete();
}
const newTable = sheet.addTable("A1:G10", true);
newTable.setName("MyTable");
}
セルの値を計算に使うときの型アサーション(TypeScript 4.0.3で実測)
Office Scriptsでつまずきやすいのが、セルから読んだ値をそのまま計算に使えないことです。公式の型定義ではgetValue()の戻り値がstring | number | booleanになっており、数値だと決めつけた計算は型エラーになります。Microsoftの公開リポジトリにある型定義(excelscript.d.ts。このファイルを最後に変更したコミットは2026年1月15日の df42dc4)とTypeScript 4.0.3を使い、tsc --noEmit --strictで次のコードを検査しました。
function main(workbook: ExcelScript.Workbook) {
const price = workbook.getActiveWorksheet().getRange("B2").getValue();
const total: number = price * 1.1;
console.log(total);
}
error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.
直し方は2つあります。1つはtypeof price === "number"で数値かどうかを確かめてから計算する型ガードで、数値以外が入っていたときに止められます。もう1つはgetValue() as numberと書く型アサーションで、こちらもエラーは消えますが、値を数値に変換するわけではなく、実行時の確認もしません。セルに文字列や空白が入りうるなら型ガードを使い、範囲をまとめて読むgetValues()でも要素ごとに確かめるのが安全です。getValues() as number[][]のようなアサーションは、全セルが数値だと保証できる範囲に限ってください。
function main(workbook: ExcelScript.Workbook) {
const price = workbook.getActiveWorksheet().getRange("B2").getValue();
// 数値以外が入っていたら計算せずに止める
if (typeof price !== "number") {
throw new Error(`B2が数値ではありません: ${price}`);
}
const total: number = price * 1.1;
console.log(total);
}
この型ガード版と、この記事に載せた他のコード例5本も、同じ条件でコンパイルが通ることを確認しています。これはコンパイルの検査で、Excel上での実行結果ではありません。
外部データを取得するfetchの書き方と制限
Excel上で実行する場合に限り、fetchで外部のWebサービスからデータを取得できます。非同期処理になるためmainをasyncにし、戻り値をPromiseにします。anyが使えないので、受け取るJSONの形に合わせたinterfaceを定義します。
async function main(workbook: ExcelScript.Workbook): Promise<void> {
const fetchResult = await fetch("https://jsonplaceholder.typicode.com/todos/1");
const json: JSONData = await fetchResult.json();
console.log(JSON.stringify(json));
}
interface JSONData {
userId: number;
id: number;
title: string;
completed: boolean;
}
制約は厳しめです。公式の「外部 API 呼び出しのサポート」によると、OAuth2のサインインは使えず、APIキーを安全に保管する仕組みもありません。localStorage・sessionStorage・document cookieも非対応です。取得先のCORS設定がAccess-Control-Allow-Origin: *でない場合、Office Scriptsランタイムのオリジンは予告なく変わるため、呼び出しが失敗することがあります。SharePointに保存したスクリプトからは外部呼び出し自体ができません。Chromium系ブラウザーのExcel on the webでローカルネットワーク宛てにfetchする場合は、実行時にユーザーの許可が要ります。
スクリプトの共有・ボタン・保存場所
ブックへの関連付けとスクリプトボタン
作ったスクリプトを同僚に使ってもらうには、スクリプトの詳細画面にある「このスクリプトを共有」で「ブックに関連付ける」をオンにします。公式の「ボタンで Office スクリプトを実行する」によると、これでブックへの書き込み権限を持つ全員がスクリプトを使えるようになり、「ワークシートにボタンを追加」でシート上に実行ボタンを置けます。
- シート上のボタンを削除しても、スクリプトとブックの関連付けは残ります。共有をやめるときは関連付けのトグルをオフにします(ボタンもまとめて消えます)。
- OneDriveの共有が組織のポリシーで制限されていると、関連付けもボタン作成もできません。
- Office Scriptsに対応していない古いExcelで開くと、ボタンは表示されますが押しても何も起きません。
- 個人・ファミリー向けのプレビューでは、スクリプトボタンも、ブック経由の共有も使えません。
公式の「ファイルの記憶域と所有権」によると、スクリプトは既定でOneDriveの/Documents/Office Scripts/フォルダーに.ostsファイルとして保存されます。Excelが認識するのは、OneDrive・SharePoint・ブックとの共有のいずれかにあるスクリプトだけで、ローカルディスクから読み込むことはできません。ブックで共有されたスクリプトを実行しても、コピーは作られず、本体は作成者のOneDriveに残ります。
チームで保守するスクリプトは、SharePointに移すとチームの所有になります。コードエディターでスクリプト名をクリックし「移動」を選べば移せます(反映に最大1分程度かかります)。ただし前の章のとおり、SharePointに置いたスクリプトは外部呼び出しができません。fetchを使うスクリプトは置き場所を変えると動かなくなる点に注意してください。Power AutomateからSharePoint上のスクリプトを呼ぶときは、既定の「スクリプトの実行」ではなく、既定の保存場所以外にあるスクリプト用の「Run script from SharePoint library」アクションを使います。
削除したスクリプトの復元と、作成者が退職したときの扱い
スクリプトを削除すると、OneDriveまたはSharePointのごみ箱に入ります。復元すれば「すべてのスクリプト」の一覧に戻りますが、ブックとの共有は外れた状態で戻るため、共有し直す必要があります。Power Automateのフローは、復元後もそのまま動きます。
見落としやすいのが所有者の問題です。Office ScriptsはOneDriveとSharePointの保持・削除ポリシーに従うため、作成者が組織から削除されたとき、その人のOneDriveにあるスクリプトがどうなるかはOneDriveの保持設定で決まります。業務で使い続けるスクリプトは、作った時点でSharePointへ移しておけば、個人アカウントの整理に左右されません。管理者は、コンプライアンスセンターの監査ログを「.osts」で絞り込むと、誰がスクリプトを作成・変更しているかを確認できます。
Power Automate連携で挙動が変わる落とし穴
Office Scriptsの価値の多くはPower Automateとの組み合わせにあります。その一方で、Excel上で動いたスクリプトがフローでは動かない事故が起きやすい領域でもあります。Power Automate自体の位置づけはPower Automateとは?基本・できること・料金・導入判断まで解説で整理しています。
引数と戻り値によるフローとのデータ受け渡し
フローからスクリプトへ値を渡すには、mainの第2引数以降に引数を足します。結果をフローに返すには、mainに戻り値の型を書きます。公式の「Power Automate でスクリプトとの間でデータを受け渡す」によると、戻り値は「スクリプトの実行」アクションの動的コンテンツに「result」という名前で出てきます。
/**
* 指定シートで、しきい値以上の数値が入ったセルを数えて返す
* @param sheetName 集計するシート名
* @param threshold 比較に使う値(省略時は100)
* @param unit 戻り値の文に付ける単位
*/
function main(
workbook: ExcelScript.Workbook,
sheetName: string,
threshold: number = 100,
unit: "円" | "千円" = "円"
): string {
const sheet = workbook.getWorksheet(sheetName);
if (!sheet) {
throw new Error(`シートが見つかりません: ${sheetName}`);
}
// シートが空だと getUsedRange は undefined を返す
const used = sheet.getUsedRange(true);
if (!used) {
return `${threshold}${unit}以上のセルは0個`;
}
let count = 0;
for (const row of used.getValues()) {
for (const cell of row) {
if (typeof cell === "number" && cell >= threshold) {
count++;
}
}
}
return `${threshold}${unit}以上のセルは${count}個`;
}
この書き方には公式の決まりがいくつか効いています。「スクリプトのユーザー入力を取得する」によると、引数と戻り値に使える型はstring・number・boolean・unknown・objectと、それらの配列、条件を満たすオブジェクト型です。threshold: number = 100のように既定値を書けば入力欄に値が入った状態になり、"円" | "千円"のように同じ型のリテラルを並べた型は、フローでもボタンからの実行でもドロップダウンになります。JSDoc形式のコメントは、実行する人への説明として表示されます。
注意点は1つです。フローに「スクリプトの実行」を置いた後でスクリプトの引数や戻り値の型を変えたら、そのアクションを作り直す必要があります。型の情報はアクションを作った時点で読み込まれるからです。
Power Automate実行時のfetch失敗
公式の「外部 API 呼び出しのサポート」には「スクリプトが Power Automate を介して実行されると、外部 API 呼び出しは失敗します」とあり、エラーは「ランタイム エラー: 行 X: フェッチが定義されていません」です。Excel上で試して通ったスクリプトを、そのままフローに組み込むと落ちます。外部サービスとのやり取りはPower Automate側のHTTPアクションで行い、その結果を上の引数でスクリプトへ渡す設計にしてください。
120秒・1日1,600回・28.6MBという運用上の壁
| 制限 | 値 |
|---|---|
| 同期Power Automate操作のタイムアウト | 120秒 |
| スクリプト実行アクションの呼び出し | 1ユーザー1日1,600回(UTC 0時にリセット) |
| スクリプト実行アクションの頻度 | 10秒あたり3回 |
| スクリプトへ渡すパラメーターの最大サイズ | 30,000,000バイト(28.6MB) |
1回のスクリプト呼び出しが120秒を超えるとタイムアウトします。長く掛かる処理について、公式はスクリプトの最適化か、複数回の呼び出しへの分割を勧めています。ISO厳密形式で保存されたブックは、Excel Online(Business)コネクタの「スクリプトの実行」でサポートされず、BadGatewayエラーになります。標準のブック形式で保存し直してください。Excel Online(Business)コネクタのリファレンスには、スクリプトの実行が10秒あたり3回までという頻度の制限と、GCCを含む政府機関向けクラウドではこのアクション自体が使えないことも書かれています。ループの中で1行ずつスクリプトを呼ぶ設計は、この頻度制限にすぐ当たります。コネクタの行アクションとスクリプトのどちらで処理するかは、Power AutomateのExcel操作とは?テーブル必須の制約・256行の壁・調整制限から実装を設計するで、行数と調整制限から選び分ける方法を解説しています。
スケジュール実行機能の一時的な無効化
コードエディターからスクリプトのスケジュール実行を設定する機能は、公式の概要ページで一時的に無効とされています(既存のスケジュール済みスクリプトは引き続き実行されます)。新しく定時実行を組むなら、Power Automateでスケジュールフローを作り、その中からスクリプトを呼び出します。「Office Scriptsだけで毎朝の自動更新ができる」と書いた解説は、この変更前の情報です。フロー設計からライセンスの組み方まで含めて社内に定着させたい場合は、Power Platform(PowerApps)導入支援サービスで支援しています。
よくある質問
Office ScriptsはPowerPointやWordでも使えますか?
使えません。公式ドキュメントはOffice ScriptsをExcelでのみ使えると明記しています。PowerPointやWordの自動化には、Office Add-ins、Power Automate、VBAのいずれかを検討します。
個人のMicrosoftアカウントでも使えますか?
個人・ファミリー向けMicrosoft 365ではプレビューとして提供されています。Excel on the webまたはExcel for Microsoft 365を使い、Microsoft 365 Insiderプログラムに参加することが条件です。プレビューではスクリプトボタンとブック経由の共有が使えないため、業務で配布する用途には法人・教育機関向けライセンスを前提にしてください。
デスクトップ版のExcelでも動きますか?
動きます。Excel for Windowsはバージョン2210以降、Excel for Macも対応しており、アクションレコーダーも使えます。ただし新しいAPIやWeb専用の機能を使うスクリプトは古いデスクトップ版では実行できず、「このスクリプトは現在、Excel for the webで実行する必要があります」という警告が出ます。iOS版Excelは対応していません。
Web版のExcelでVBAマクロは動きますか?
動きません。Excel on the webはVBAマクロを実行できず、.xlsmファイルを開くことはできてもマクロは走りません。Web版でも動かす必要がある処理は、Office Scriptsで書き直すことになります。
Office Scriptsは何から勉強すればよいですか?
公式の「コード エディター環境」は、プログラミングが初めてなら、先にJavaScriptの基礎(変数・制御フロー・関数・データ型)を学び、次にTypeScriptの型を押さえる順を勧めています。そのうえで公式チュートリアルでアクションレコーダーとコードエディターを一通り触り、サンプル集から自分の業務に近いものを改造するのが近道です。記録したコードを読んで不要な行を削る練習は、APIの名前を覚えるのにも役立ちます。