いまさら聞けないExcelの使い方講座

【Excel】Web版のExcelでも作業を自動化! CopilotでOffice Scriptsを作る

Web版のExcelでも繰り返し作業を自動化したい!

 Excelで毎回同じ操作を繰り返しているなら、マクロ(VBA)による自動化が有効です。しかし、Web版Excelでは、マクロを実行できません。OneDriveやSharePointで共有しているExcelファイルをWebブラウザーで操作している場合には困りますよね。

 そこで活用したいのが、Web版のExcelでも繰り返し作業を自動化できる「Office Scripts」です。JavaScriptを拡張したプログラミング言語「TypeScript」を使って、Excelの操作を自動化する仕組みです。「アクションレコーダー」で実際の操作を記録できるほか、「コードエディター」で直接記述することもできます。

 とはいえ、プログラミングの知識がなければ、記録されたコードを修正するのは難しいでしょう。そこでCopilotの出番です。やりたいことを伝えて改修してもらいます。

今回は、Copilotを使って、指定した日付の売上明細を新しいシートに転記するOffice Scriptsを作成する

 今回は、共有している売上一覧から指定した日付の明細を抽出し、新しいシートに転記する処理を例に、Office Scriptsの基本的な使い方を紹介します。

まずはアクションレコーダーで操作を記録する

 例えば、売上一覧から1日分の明細を別シートに保存するケースを考えてみましょう。複数人で作業するため、Web版のExcelを利用しているとします。毎回、売上日でフィルタリングして、表示されたデータをコピーし、新しいシートを作成して貼り付けるのは面倒です。

 まずは「アクションレコーダー」で一連の操作を記録しましょう。デスクトップ版Excelの[マクロの記録]と同じ要領で、実際に行った操作が自動的にOffice Scriptsのスクリプトに変換されます。

 なお、Office Scriptsの利用には、対応するMicrosoft 365の環境が必要です。組織の管理者設定やブラウザーの設定によっては、[自動化]タブが表示されない場合があります。

 ここでは「売上日」列を「2026/10/13」で絞り込み、表示された明細を見出しとともにコピーします。貼り付け先の新しいシート名は「1013」とします。

[自動化]タブの[新しいスクリプト]-[レコーディングから作成]をクリックする
記録を開始すると、画面右側に「記録中」と表示される。「Officeスクリプトへようこそ」と表示された場合は[閉じる]をクリックしておく
ここでは、「2026/10/13」の日付で絞り込む
フィルターした結果をコピーしておく
月日を4桁で表した「1013」というシートを作成して、フィルターしたデータを貼り付けた。[停止]をクリックして、アクションレコーダーの記録を停止する

 これで一連の操作がOffice Scriptsのスクリプトとして記録されました。コードの内容を確認してみましょう。今回は、以下のように記録されました。

function main(workbook: ExcelScript.Workbook) {
let uriage = workbook.getTable("uriage");
// Apply checked items filter on table uriage column 売上日
uriage.getColumnByName("売上日").getFilter().applyValuesFilter([{ date: "2026-10-13", specificity: ExcelScript.FilterDatetimeSpecificity.day }]);
// Add a new worksheet with name "1013"
let _1013 = workbook.addWorksheet("1013");
let selectedSheet = workbook.getActiveWorksheet();
// Paste to range A1 on _1013 from range A1:G34 on selectedSheet
_1013.getRange("A1").copyFrom(selectedSheet.getRange("A1:G34"), ExcelScript.RangeCopyType.all, false, false);
// Auto fit the columns of range A:A on _1013
_1013.getRange("A:A").getFormat().autofitColumns();
}

 「uriage」テーブルの「売上日」列を「2026/10/13」でフィルター処理しています。このほか、新しいシートを作成する「addWorksheet()」、データをコピーする「copyFrom()」などの処理が記録されています。なお、「//」から始まる行はコメントです。

 しかし、コードをよく見ると、日付は「2026-10-13」、シート名は「1013」、コピー元の範囲も「A1:G34」と固定されています。アクションレコーダーは、基本的に操作した内容をそのまま記録するものだからです。

 このままでは、別の日のデータを転記するたびにコードを修正する必要があります。また、「1013」シートが存在していると、同じ名前のシートを作成しようとしてエラーになります。日付を指定するだけで、別の日にも使えるコードに改修しましょう。

やりたいことを正確にCopilotに伝える

 もちろん、最初からCopilotにOffice Scriptを作ってもらうことも可能です。ただ、アクションレコーダーを使えば、操作対象のテーブルや列、コピーする範囲などがコードに反映されています。実際の操作を記録したコードをCopilotに見せて指示するほうが、意図する処理を正確に伝えられます。

 また、何を入力するのか、どのデータを転記するのか、同じ名前のシートがある場合にどうするのかなど、期待する動作を具体的に指定することが重要です。今回は、以下のプロンプトを送信しました。

以下は、Excelのアクションレコーダーで記録したOffice Scriptです。日付を指定して売上明細を別シートに転記できるようにこのコードを修正してください。

# 修正条件

1. スクリプトの実行時に、対象の日付を「MMDD」形式の4桁で指定できるようにしてください。ファイルは年単位で管理しているため、考慮する必要はありません。

2. テーブル「uriage」の「売上日」列を指定日でフィルターし、表示された行だけを、見出しを含めて新しいシートにコピーしてください。非表示の行はコピーしないでください。

3. データの行数が増減しても対応できるようにしてください。コピーする列は元のコードと同じA~G列です。

4. 新しいシートの名前は、指定した4桁の月日としてください。同名のシートが存在する場合は「(2)」「(3)」と連番を付けてください。既存のシートは削除・上書きしないでください。

5. 転記先には数式を残さず、計算済みの値と元の書式をコピーしてください。コピー先の列幅も自動調整してください。

6. 処理が終わったら「売上日」列のフィルターを解除してください。

7. 「//」で始まるコメントを日本語にしてください。

不要な例外処理や複雑な機能は追加せず、できるだけ短いコードにまとめてください。修正したコード全体を省略せずに出力してください。

# 元のコード

<アクションレコーダーで記録したコード>

 ポイントは、実現したい処理だけでなく、避けたい動作も指定していることです。例えば、「非表示の行はコピーしない」「既存のシートは削除・上書きしない」といった条件が該当します。また、コメントを日本語にするよう指示しておけば、生成されたコードの内容を確認しやすくなります。

上記のプロンプトを送信すると、修正されたコードが出力される

Copilotが作ったコードを実行する

 Copilotが修正したコードの一部を確認してみましょう。まず、「main()」に「targetMMDD」というパラメーターが追加されました。これにより、スクリプトの実行時に「1014」といった4桁の月日を指定できるようになっています。

function main(workbook: ExcelScript.Workbook, targetMMDD: string) {

 また、「getSpecialCells()」を使って、フィルター後に表示されているセルだけを取得する処理も追加されています。

const visibleAreas = sourceRange
.getSpecialCells(ExcelScript.SpecialCellType.visible)
.getAreas();

 新しいシートを作成する際の処理には「while」を使った繰り返し処理が追加されました。同じ名前のシートが存在する間は番号を増やし、「1014(2)」「1014(3)」のように重複しない名前を付ける仕組みです。

while (workbook.getWorksheet(sheetName)) {
  sheetName = `${targetMMDD}(${number})`;
  number++;
}

 このほか、数式を計算済みの値として転記する処理や、最後にフィルターを解除する処理も追加されました。ここまで確認できたら、Office Scriptsのコードエディターで修正後のコードに置き換え、実行してみましょう。

 まず「1014」を指定して実行してみます。「1014」シートが作成され、「2026/10/14」の明細だけが転記されることを確認します。また、「1015」シートが存在している状態でスクリプトを実行し、「1015(2)」というシートが追加されるかどうかも確認します。

 なお、Copilotが作成したスクリプトが必ず正しく動作するとは限りません。コードエディターにエラーが表示された場合は、エラーメッセージとコードをCopilotに渡して修正を依頼できます。

[スクリプトの表示]-[このブックからのスクリプト]をクリックする
[編集]をクリックする
元のコードを削除し、修正後のコードを貼り付けて、[実行]をクリックする。コードに問題がある場合は画面下部に[問題]としてエラーの内容が表示される
追加された処理によって、日付を入力するボックスが表示された。「1014」と入力して、[実行]をクリックする
スクリプトが実行されて「1014」シートが作成された。「2026/10/14」の明細が転記されている
「1015」シートが作成された状態で、同様にスクリプトを実行した。「1015」と入力して、[実行]をクリックする
「1015(2)」シートが作成された

 依頼した修正内容で正しく動作しているように見えますが、実務で利用する前に、転記された明細の日付や件数、金額が元データと一致するか、数式が値に置き換わっているかなどを確認しておきましょう。

 また、一覧に存在しない日付を指定した場合や、処理の途中でエラーが発生した場合の動作も確認しておきます。期待した結果にならない場合は、その現象を具体的にCopilotに伝えて修正してもらいましょう。

 今回のようなデータの抽出・転記だけでなく、不要な列の削除や並べ替え、書式設定なども自動化の対象になります。普段から繰り返している操作をアクションレコーダーで記録し、必要な処理をCopilotで追加してみてください。