Office Scriptsの基本!Excel自動化でテーブル行の追加・削除をマスターする
生徒
「Excelのテーブルに毎日データを追加するのが面倒なんです。Office Scriptsでこの作業を自動化できますか?」
先生
「もちろんです!Office Scriptsを使えば、ボタン一つでテーブルの最後に新しい行を足したり、不要なデータを消したりできますよ。」
生徒
「プログラミングは初めてですが、テーブル(ListObject)を操作するコードって難しいんでしょうか?」
先生
「大丈夫です。まずは基本の型を覚えるだけで、Excelが魔法のように動き始めます。一緒にステップバイステップで学んでいきましょう!」
1. Office Scriptsとは?
Office Scripts(オフィススクリプト)は、Microsoft 365のExcel Onlineやデスクトップ版Excelで利用できる、業務自動化のための最新ツールです。これまでExcelの自動化といえば「VBA(マクロ)」が主流でしたが、Office ScriptsはWebでの動作に特化しており、TypeScript(タイプスクリプト)という世界的に人気のあるプログラミング言語を採用しています。
このツールの最大の特徴は、一度スクリプトを作成すれば、ブラウザ上のExcelでも、インストール版のExcelでも同じように動くことです。さらに、Microsoft Power Automate(パワーオートメイト)という連携ツールを使えば、「毎日決まった時間にスクリプトを実行する」といった高度な自動化も可能になります。プログラムが初めての方でも、セルの操作から少しずつ慣れていくことで、複雑な事務作業をボタン一つで終わらせることができるようになります。
2. 「テーブル(ListObject)」って何のこと?
Excelには、単なる「セルの集まり」と、特定の範囲をひとまとめにした「テーブル」という機能があります。プログラミングの世界(Office Scripts)では、このテーブルのことをListObject(リストオブジェクト)と呼びます。自動化を行う上で、普通のセル範囲ではなく「テーブル」を使うことには大きなメリットがあります。
例えば、普通のセル範囲だと「データがどこまで続いているか」をプログラムで探す必要がありますが、テーブル形式にしておけば、スクリプトに対して「『売上表』という名前のテーブルの最後に行を追加して!」と直感的に指示を出すことができます。データの増減に強く、管理がしやすいのがテーブルの魅力です。初心者の方はまず、「Excelの挿入メニューから作った表 = ListObject」と覚えておけば間違いありません。
3. テーブルを取得する基本の書き方
スクリプトでテーブルを操作するには、まず「どのテーブルを触るか」をパソコンに教えてあげる必要があります。これを「オブジェクトを取得する」と言います。Excelファイル(ブック)の中からシートを選び、そのシートの中にある特定のテーブルを指定するという流れになります。
以下は、最も基本的な「テーブルを取得して、その名前を画面に表示する」コードです。まずはここからスタートしましょう。
function main(workbook: ExcelScript.Workbook) {
// 1. アクティブな(今開いている)ワークシートを取得します
const sheet = workbook.getActiveWorksheet();
// 2. シート内にある「Table1」という名前のテーブルを取得します
const myTable = sheet.getTable("Table1");
// 3. テーブルの名前を確認のためにログ(出力パネル)に表示します
console.log("操作するテーブルの名前は: " + myTable.getName());
}
【解説】
・const:これから使うデータに名前をつけるためのキーワードです。ここでは「sheet」や「myTable」という名前をつけています。
・getTable("Table1"):テーブルの名前を指定して呼び出しています。Excel側でテーブル名を変更している場合は、その名前に書き換えてください。
4. テーブルに新しいデータを追加する方法
次に、実際にテーブルにデータを追加してみましょう。テーブルの最後に行を追加するには addRow(アド・ロウ)という機能を使います。Row(ロウ)は「行」という意味です。追加したいデータを「[ ](角括弧)」で囲んで渡してあげます。
例えば、[日付, 商品名, 金額] という3列のテーブルがある場合、以下のように記述します。
function main(workbook: ExcelScript.Workbook) {
const sheet = workbook.getActiveWorksheet();
const myTable = sheet.getTable("Table1");
// テーブルの最後に1行追加します
// [ ] の中に、列の順番通りにデータを並べます
myTable.addRow(-1, ["2026/01/28", "リンゴ", 150]);
}
【解説】
・addRow(-1, ...):最初の「-1」は、「一番最後に追加してね」という合図です。もし「0」にすると、見出しのすぐ下の最初の行に追加されます。
・["値1", "値2"]:このようにカンマで区切ってデータを並べる形式を「配列(はいれつ)」と呼びます。お弁当箱の仕切りの中に、おかずを順番に詰めていくイメージです。
実行結果は以下のようになります。
(Excelのテーブルの最下行に「2026/01/28」「リンゴ」「150」という新しい行が追加される)
5. 特定の行を削除するスクリプト
データの追加ができるようになったら、次は「削除」に挑戦しましょう。間違えて入力したデータや、古くなったデータを消す作業も自動化できます。行を消すには deleteRows(デリート・ロウズ)を使います。
注意点として、プログラムの世界では数は「1」からではなく「0」から数え始めます。つまり、1行目は「0番目」、2行目は「1番目」となります。これをインデックスと呼びます。
function main(workbook: ExcelScript.Workbook) {
const sheet = workbook.getActiveWorksheet();
const myTable = sheet.getTable("Table1");
// テーブルの「データ部分」の1行目(インデックス 0)を削除します
myTable.getRangeBetweenHeaderAndTotal().getRow(0).delete(ExcelScript.DeleteShiftDirection.up);
}
【解説】
・getRangeBetweenHeaderAndTotal():少し長い名前ですが、「見出し(ヘッダー)」と「合計行」を除いた、純粋なデータ部分だけを指定する魔法の言葉です。
・delete(ExcelScript.DeleteShiftDirection.up):行を消した後に、下の行を上に詰めなさい、という指示です。これを書かないと穴が空いてしまいます。
6. 応用編:複数の行をまとめて追加する
実務では、1行だけでなく、複数のデータを一気に登録したいことがあります。その場合は、配列を二重に重ねることで実現できます。入れ物の中に、さらに入れ物が入っているような構造です。
function main(workbook: ExcelScript.Workbook) {
const sheet = workbook.getActiveWorksheet();
const myTable = sheet.getTable("売上リスト");
// まとめて追加するデータのリストを作成します
const newDatas = [
["2026/02/01", "バナナ", 100],
["2026/02/02", "ミカン", 200],
["2026/02/03", "ブドウ", 500]
];
// addRows(複数形)を使って一気に追加!
myTable.addRows(-1, newDatas);
}
このように、一つ一つの作業を自動化するスクリプトを書いておくことで、手入力によるミスを防ぎ、大幅な時短につなげることができます。最初はエラーが出てしまうかもしれませんが、それは「パソコンとの対話」が始まった証拠です。一つずつ文字を確認していけば必ず動きます。
7. 初心者がつまずきやすいポイントと解決策
Office Scriptsを書き始めると、いくつか共通の壁にぶつかることがあります。まず最も多いのが「テーブル名が違う」というエラーです。Excelの「テーブルデザイン」タブで設定されている「テーブル名」と、コードの中の getTable("名前") が完全に一致しているか確認してください。全角と半角の違いや、余計なスペースが入っていても動かなくなります。
次に、「シート名」です。getActiveWorksheet() を使えば今見ているシートを対象にしますが、特定のシート(例えば「設定シート」など)からデータを取得したい場合は getWorksheet("シート名") を使う必要があります。どの場所の、どの箱(テーブル)を操作したいのかを明確に伝えることが、自動化のコツです。
また、データ型にも注意が必要です。数字の「150」と、文字としての「"150"」はプログラムでは別物として扱われます。計算に使いたい場合は引用符を付けず、ただのテキストとして表示したい場合は引用符で囲む、というルールを意識してみましょう。
8. テーブル操作を自動化するメリット
なぜ普通のセル操作ではなく、テーブル操作(ListObject操作)を推奨するのでしょうか。それは、プログラムのメンテナンスが圧倒的に楽になるからです。普通のセルだと「A2からC10まで」と範囲を固定してしまいがちですが、データが増えて11行目になった瞬間にプログラムが正しく動かなくなります。しかし、テーブルを使えば「テーブルの範囲」が自動で伸び縮みするため、プログラム側で範囲を気にしなくて済むのです。
また、テーブルにはフィルターや並べ替えの機能が備わっているため、スクリプトでデータを追加した後に「金額が高い順に並べる」といった処理も簡単に追加できます。ビジネスの現場でExcelを使うなら、テーブルとOffice Scriptsの組み合わせは最強の武器になります。まずは今回紹介した「追加」と「削除」を自分のExcelファイルで試して、自動で動く感動を味わってみてください。それが、DX(デジタルトランスフォーメーション)への第一歩になります。