【Excel】Excel JavaScript API(Excel-JS)とは?JavaScriptで操作・自動化する基本と活用方法
Excelの定型作業を自動化したいものの、VBA以外の方法も検討したいと考える方は少なくありません。
Excel JavaScript APIは、JavaScriptからブック、ワークシート、セル、テーブル、グラフなどを操作できる仕組みです。
Web技術と親和性が高く、Excel アドインやPower Automate、Microsoft 365の環境と組み合わせられる点が大きな特徴になります。
Excel JavaScript APIでできること
・セルの値や書式の読み書き
・表やグラフ、数式の自動作成
・Office Scriptsによるクラウド上の定型処理
・Excel アドインとしての業務機能の提供
この記事では、Excel-JSの基本的な考え方、実行環境、コードの読み方、業務での活用方法までを順に解説します。
JavaScript初心者でも、Excelの操作イメージと対応付けながら理解できる内容です。
Excel JavaScript APIによるセル操作の基本
それではまず、Excel JavaScript APIでセルを操作する基本について解説していきます。
| 商品名 | 数量 | 単価 | 金額 |
|---|---|---|---|
| ノート | 3 | 150 | 450 |
| ペン | 5 | 120 | 600 |
Excel-JSでは、画面上で選択しているセルではなく、ワークシート名とセル番地を指定して対象を取得します。
JavaScriptの命令でExcelブック内のオブジェクトを扱うという考え方を最初に押さえましょう。
Excel.runとコンテキストの役割
Excel JavaScript APIのコードは、多くの場合Excel.runから始まります。
Excel.runの中で受け取るcontextは、Excelアプリケーションとの処理を仲介するためのオブジェクトです。
セルを取得しただけでは、Excel側の実データがすぐJavaScriptへ渡るわけではありません。
必要なプロパティを読み込むよう指定し、context.syncを実行して初めてExcelと通信します。
Excel.runはExcelへの処理単位を表し、context.syncは指定した変更や読み取りをExcelへ反映するタイミングです。
非同期処理という言葉に難しさを感じるかもしれませんが、Excelの状態をまとめて更新するための仕組みと考えると理解しやすいでしょう。
大量のセルを一つずつ同期すると動作が遅くなるため、処理をまとめてから同期する設計が重要です。
【操作のポイント】Excel.run内で複数の設定を行い、最後にcontext.syncを置く流れを基本形として覚えます。
値と数式の書き込み
続いては、セルへ値や数式を書き込む方法を確認していきます。
Excel-JSではvaluesに二次元配列を代入します。
1行目にヘッダーがある売上データであれば、A1からD3の範囲へ見出しと明細をまとめて投入できます。

|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("売上"); const range = sheet.getRange("A1:D3"); range.values = [ ["商品名", "数量", "単価", "金額"], ["ノート", 3, 150, 450], ["ペン", 5, 120, 600] ]; sheet.getRange("D2:D3").formulas = [ ["=B2*C2"], ["=B3*C3"] ]; await context.sync(); }); |
valuesでは文字列、数値、日付などを設定できます。
一方で計算式を入れる場合はformulasを使い、数式は通常のExcelと同じように等号から記述します。
金額列の基本式
金額 = 数量 × 単価
D2セルの数式 =B2*C2
二次元配列の行数と列数は、指定したセル範囲の大きさと一致させる必要があります。
たとえばA1:D3を指定した場合は、3行4列の配列を渡します。
【操作のポイント】サンプルデータでは1行目をヘッダーにし、2行目以降へ数値や数式を配置すると表の構造が明確になります。
書式と範囲選択の指定
続いては、セル範囲の書式設定を確認していきます。
range.formatを使うと、塗りつぶし色、フォント、罫線、表示形式、列幅などを制御できます。
見出し行に色を付け、金額列を通貨表示にするだけでも、出力結果は実務で使いやすい表になります。

|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("売上"); const header = sheet.getRange("A1:D1"); const amount = sheet.getRange("D2:D100"); header.format.fill.color = "#217346"; header.format.font.color = "#FFFFFF"; header.format.font.bold = true; amount.numberFormat = [["¥#,##0"]]; sheet.getUsedRange().format.autofitColumns(); await context.sync(); }); |
getRangeで対象範囲を明示することが、意図しないセルの変更を防ぐ基本です。
処理対象の行数が変わる可能性がある帳票では、固定番地だけでなくgetUsedRangeやテーブルを利用する方法も検討しましょう。
【操作のポイント】データの値、数式、書式を分けて記述すると、後から保守しやすいコードになります。
Office ScriptsとExcel アドインの実行環境
続いては、Excel-JSをどこで実行するのかを確認していきます。
| 実行方法 | 主な用途 | 特徴 |
|---|---|---|
| Office Scripts | 定型作業の自動化 | Excel for the webで作成しやすい |
| Excel アドイン | 独自の画面や機能 | HTMLとJavaScriptで拡張できる |
| Power Automate | 他サービスとの連携 | 通知や承認フローと接続しやすい |
同じJavaScript系の自動化でも、利用する環境によって目的と作り方が変わります。
Office Scriptsによる定型作業の自動化
続いては、Office Scriptsの役割を確認していきます。
Office Scriptsは、主にExcel for the webで利用する自動化機能です。
記録機能を使って操作のたたき台を作り、その内容をTypeScript形式で調整できます。
毎週届くCSVを整形する、不要な列を削除する、集計表を更新するといった反復作業に向いています。

Office Scriptsは個人やチーム内の定型処理を素早く自動化したい場合に適しています。
Power Automateと連携すれば、ファイルの受信や保存をきっかけにスクリプトを実行する構成も可能です。
VBAのマクロと異なり、クラウド上のファイルを中心に扱えることがメリットです。
ただし、利用できる機能や組織の設定はMicrosoft 365の契約内容、管理ポリシーによって変わる場合があります。
【操作のポイント】単発の帳票整形から始め、処理内容が安定してからPower Automateとの連携を検討します。
Excel アドインによる機能拡張

続いては、Excel アドインの特徴を確認していきます。
Excel アドインは、Excelの右側に作業ウィンドウを表示したり、リボンのコマンドから独自機能を起動したりできる仕組みです。
HTML、CSS、JavaScriptで画面を作成できるため、社内システムの検索画面や入力支援画面をExcelへ組み込めます。
Excel-JSはセル操作のAPIであり、アドインはそのAPIを利用するアプリケーションの形態と整理すると混乱しません。
アドインでは、ユーザーがボタンをクリックしたときにデータを読み込み、チェック結果をセルへ書き戻すような設計ができます。
認証や外部API連携を行う場合は、情報セキュリティ、権限、個人情報の扱いも設計段階で確認しましょう。
【操作のポイント】セル操作だけで完結するならOffice Scripts、入力画面や外部サービス連携が必要ならアドインを候補にします。
VBAとExcel-JSの使い分け
続いては、VBAとExcel-JSの使い分けを確認していきます。
VBAはデスクトップ版Excelで長く使われてきた自動化手段であり、既存資産が多いことが強みです。
Excel-JSはWeb技術との統合、複数プラットフォームへの展開、クラウド連携を意識しやすい選択肢です。
使い分けの目安
・既存の複雑なVBA資産を改修する場合はVBA
・Microsoft 365とWeb連携を重視する場合はExcel-JS
・繰り返しのWeb版Excel作業はOffice Scripts
どちらが常に優れているかではなく、配布先、利用端末、保守できる人材で選ぶことが大切です。
既存マクロをすべて置き換えるのではなく、新しい業務からExcel-JSを採用する進め方も現実的でしょう。
【操作のポイント】まず利用者のExcel環境とファイル保存場所を確認してから、技術を決めます。
ワークシートと表を自動生成する手順
続いては、ワークシートと表を自動生成する手順を確認していきます。
| 月 | 売上 | 目標 | 達成率 |
|---|---|---|---|
| 4月 | 850000 | 800000 | 106.3% |
| 5月 | 760000 | 800000 | 95.0% |
ここでは売上集計用のシートを用意し、見出し、数式、テーブル書式を設定する例を扱います。
ワークシートの取得と追加
続いては、ワークシートを取得または追加する方法を確認していきます。
既存シートを扱うときはworksheets.getItemを使い、名前を指定します。
新しい集計シートが必要なときはworksheets.addを使います。
すでに同名のシートがある状態で追加するとエラーになるため、運用では存在確認を行う設計が必要です。
シート名は利用者が変更する可能性もあるため、固定名称へ依存しすぎない工夫も役立ちます。
【操作のポイント】新規作成と既存取得を区別し、誤って元データを上書きしないよう対象シートを明確にします。
テーブル化と列名の活用
続いては、セル範囲をテーブルとして扱う方法を確認していきます。
テーブルは見出しを持つデータ範囲であり、フィルター、集計、構造化参照を利用しやすくなります。
データが増減する帳票では、セル番地だけで処理するよりテーブルを使うほうが安定しやすい場面があります。
|
1 2 3 4 5 6 7 8 9 10 11 |
await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("売上集計"); const source = sheet.getRange("A1:D3"); const table = sheet.tables.add(source, true); table.name = "SalesTable"; table.getHeaderRowRange().format.fill.color = "#217346"; table.getHeaderRowRange().format.font.color = "#FFFFFF"; await context.sync(); }); |
tables.addの第2引数をtrueにすると、先頭行をヘッダーとして扱います。
サンプルデータの1行目がヘッダーであることを前提にする場合、この指定を忘れないようにしましょう。
達成率の数式
達成率 = 売上 ÷ 目標
D2セルの数式 =B2/C2
表示形式は0.0%を指定すると、比率を百分率で確認できます。
【操作のポイント】行が追加される予定のデータは、テーブル化して列名で参照できる状態にすると管理しやすくなります。
数式の設定とオートフィル
続いては、数式を設定して下方向へ展開する方法を確認していきます。
Excel-JSでは先頭セルに数式を書き込み、そのセルから対象範囲へfillDownを実行できます。
これは手作業でフィルハンドルを下へドラッグするオートフィルと同じ発想です。
|
1 2 3 4 5 6 7 8 9 10 11 |
await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("売上集計"); const firstFormula = sheet.getRange("D2"); const formulaRange = sheet.getRange("D2:D100"); firstFormula.formulas = [["=B2/C2"]]; formulaRange.fillDown(); formulaRange.numberFormat = [["0.0%"]]; await context.sync(); }); |
先頭セルの相対参照を基準にして、後続行へ数式を自動コピーできるため、数式を何十行も配列で書く必要はありません。
ただしD2:D100のように余分な行まで範囲を指定すると、空白行にも数式が入ります。
実際のデータ件数に合わせて最終行を求めるか、テーブル列へ数式を設定する方法を選ぶとよいでしょう。
【操作のポイント】数式は先頭セルへ設定してからオートフィルし、相対参照が意図通り変化するかを必ず確認します。
データ取得と非同期処理の考え方
続いては、ExcelのデータをJavaScriptで取得する際の非同期処理を確認していきます。
| 商品名 | 在庫数 | 発注点 |
|---|---|---|
| ノート | 12 | 20 |
| ペン | 35 | 15 |
読み取り処理ではloadとcontext.syncの順序が重要です。
loadによる値の読み込み
続いては、セルの値をJavaScript側へ読み込む方法を確認していきます。
range.valuesを参照する前に、range.loadで必要なプロパティを指定します。
その後にcontext.syncを実行すると、取得結果を使えるようになります。
|
1 2 3 4 5 6 7 8 9 10 |
await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("在庫"); const range = sheet.getRange("A2:C100"); range.load("values"); await context.sync(); const rows = range.values; console.log(rows); }); |
loadは読み込み予約、context.syncは予約したデータの取得と捉えると、コードの順番を覚えやすくなります。
セルの表示文字列が必要ならtext、数式そのものが必要ならformulasを読み込む選択肢もあります。
【操作のポイント】読み取りたいプロパティを先にloadし、同期が終わる前に値を使わないよう注意します。
条件判定とセルの強調表示
続いては、取得した値を条件判定してセルを強調する方法を確認していきます。
在庫数が発注点を下回った商品を赤系の色で表示すれば、確認作業を効率化できます。
条件付き書式を利用すると、データが変化した後もルールに応じた表示を維持できます。
在庫判定の考え方
在庫数が発注点未満なら要発注
在庫数が発注点以上なら通常在庫
値を一度読み込んでJavaScriptで判定する方法と、Excelの条件付き書式へ判定を任せる方法があります。
単純な色分けは条件付き書式、外部サービスへの通知や複雑な判定はJavaScript側の処理が向いています。
【操作のポイント】見た目の警告だけでよい処理はExcelの機能を活用し、業務フローへつなげる処理をJavaScriptで補います。
エラー処理と処理速度の管理
続いては、エラー処理と速度の管理を確認していきます。
シート名の誤り、保護されたブック、存在しない範囲の指定などは実行時エラーの原因になります。
tryとcatchを使い、利用者へ分かりやすいメッセージを返すようにすると保守しやすくなります。
セルを一つずつ処理して同期を繰り返す設計は、件数が増えると処理時間を悪化させます。
値をまとめて配列へ読み込み、JavaScript上で判定し、更新内容もまとめて書き戻す流れが基本です。
【操作のポイント】Excelとの同期回数を減らし、エラー時には対象のシート名や処理内容を確認できるようにします。
Excel-JSを活用した業務自動化の例
続いては、Excel-JSを業務自動化へ活用する例を確認していきます。
| 処理前 | 自動処理 | 処理後 |
|---|---|---|
| CSVの列順がばらばら | 列削除と見出し統一 | 集計用の形式へ整形 |
| 毎月の売上明細 | 数式とグラフの更新 | 報告書を作成 |
自動化の効果は、単にクリック回数を減らすことだけではありません。
作業手順を統一し、転記ミスや集計漏れを抑えられる点にも価値があります。
CSV整形とデータクレンジング
続いては、CSV整形への活用を確認していきます。
外部システムから出力したCSVには、不要列、空白行、表記ゆれ、日付形式の違いが含まれることがあります。
Excel-JSで必要な列だけを残し、日付や金額の形式を揃え、テーブル化する処理を作れば、毎回の手作業を減らせます。
入力データを整える工程を自動化すると、後続の集計やグラフ作成も安定します。
ただし、元データを直接変更する前に、処理対象のコピーを作る運用が安全です。
【操作のポイント】自動化前に入力パターンを複数確認し、例外データが来たときの扱いを決めます。
集計表とグラフの更新
続いては、集計表とグラフの更新を確認していきます。
月次売上のような定期報告では、明細の取り込み後に集計表、前年比、グラフを更新する流れがよくあります。
Excel-JSでは値の貼り付け、数式の展開、書式設定、グラフの作成や更新を一連の処理として実装できます。
売上前年比の数式例
前年比 = 当月売上 ÷ 前年同月売上
前年同月売上が0の場合は、IFERRORなどで表示を調整します。
報告書では数値の正しさに加えて、どの期間と条件で集計したかを明示することも重要です。
自動化した処理ほど、集計条件をコードやシート内へ残しておくと監査や引き継ぎに役立ちます。
【操作のポイント】グラフは元データ範囲と連動させ、更新漏れが起きない構成にします。
Power Automateとの連携
続いては、Power Automateとの連携を確認していきます。
Office ScriptsをPower Automateから呼び出すと、メール添付の受信、SharePointへの保存、Teamsへの通知などとExcel処理をつなげられます。
たとえば、指定フォルダにファイルが追加されたら売上シートを整形し、完了後に担当者へ通知する流れを作れます。
Excelだけで閉じない業務フローを設計できることが、クラウド連携の強みです。
一方で、ファイルが同時編集されている場合、実行権限がない場合、入力形式が変わった場合などを想定する必要があります。
【操作のポイント】最初は通知なしのテストフローで動作を確認し、処理結果と失敗時の連絡先を明確にします。
Excel-JS導入時の注意点と学習の進め方
続いては、Excel-JS導入時の注意点と学習の進め方を確認していきます。
| 確認項目 | 確認する内容 |
|---|---|
| 実行環境 | Windows、Web、Macなどの利用状況 |
| 権限 | アドイン導入やクラウド接続の制限 |
| 保守 | 担当者、手順書、エラー時の対応 |
技術的に作れることと、組織内で安全に運用できることは別の観点です。
要件セットと対応環境の確認
続いては、対応環境の確認をしていきます。
Excel JavaScript APIには、機能ごとに利用可能なクライアントや要件セットがあります。
開発時に使えたAPIが、利用者の古いExcel環境では使えないケースも考えられます。
対象ユーザーのExcelバージョンと利用端末を先に把握することが、導入後のトラブルを減らします。
とくに社内配布するアドインでは、Windows版だけでなくExcel for the webやMac版での動作方針を決めましょう。
【操作のポイント】作り始める前に対象環境を一覧化し、使うAPIが対応しているかを確認します。
セキュリティと権限管理
続いては、セキュリティと権限管理を確認していきます。
アドインが外部サービスへ接続する場合、認証情報、送信するデータ、アクセス権限を明確にする必要があります。
業務データを扱うなら、テスト用データと本番データを混在させない運用も欠かせません。
利用者が意図せず広範囲のデータを更新しないよう、対象シート、対象範囲、実行前の確認画面を設ける考え方も有効です。
安全な導入の基本
・最小限の権限で運用する
・本番前にコピーしたブックで検証する
・更新対象と処理日時を記録する
【操作のポイント】自動化の便利さとデータ保護を両立するため、権限と更新範囲を必要最小限に設定します。
小さな自動化から始める学習手順
続いては、学習を進める順序を確認していきます。
最初から複雑なアドインを作るより、選択範囲の値を読む、見出しを装飾する、数式を入力するといった小さな処理から始める方法がおすすめです。
次にテーブル、グラフ、外部データ連携へ広げると、APIのオブジェクト構造が自然に身に付きます。
Excel操作を一つずつJavaScriptの命令へ置き換える練習が、最も実践的な学習方法です。
処理ごとに入力、出力、例外ケースをメモし、再利用できる関数へ整理していきましょう。
【操作のポイント】最初の目標は大規模な業務システムではなく、5分かかる定型操作を確実に再現することです。
まとめ JavaScriptで操作するExcel APIの基本と活用方法
Excel JavaScript APIは、JavaScriptからExcelのセル、ワークシート、テーブル、書式、グラフなどを操作するための仕組みです。
セルへの値や数式の書き込みでは、valuesやformulasへ二次元配列を設定し、書式はformatを通じて制御できます。
Excel.run、context、context.syncの関係を理解することが、Excel-JSを使う第一歩になります。
定型作業の自動化にはOffice Scripts、独自の画面や外部サービス連携にはExcel アドイン、既存環境の保守にはVBAというように、目的に合わせて使い分けましょう。
大量データを扱うときはExcelとの同期回数を抑え、値をまとめて読み書きする設計が処理速度の改善につながります。
また、対応環境、組織の権限、情報セキュリティ、エラー時の運用も導入前に確認することが大切です。
まずは見出しの自動作成や数式のオートフィルなど、身近なExcel作業を一つ選んで試してみましょう。
小さな成功を積み重ねることで、Excel-JSを業務の自動化と標準化へ活かせるようになります。