⚙️ TypeScript × Excel 自動化入門|面倒な作業を“ゼロ秒”にする実践スクリプト解説
Excel はビジネスのあらゆる場面で使われる強力なツールですが、
毎回同じ操作を手作業で繰り返すのは、正直つらいですよね…。
「この作業、自動でやってくれたら…」と思ったことはありませんか?
そんなあなたに強力な味方となるのが、TypeScript + Excel Script API(Office Scripts)。
Excel の操作をプログラムで自動化できるため、
手作業の何十倍ものスピードで、正確に、ミスなく処理できます。
この記事では、実際に動く TypeScript コードを使って、
Excel の行を条件付きで複製し、データを書き出すスクリプトを
初心者にも分かるように丁寧に解説します。
「Excel 自動化を本気で覚えたい」
そんなあなたにとって、最初の実践ガイドになるはずです。
📋 目次
🚀 はじめに|Excel自動化のメリットとは?
Excelは便利ですが、手作業の繰り返しには限界があります。
コピー&ペースト、並び替え、抽出、複製…
毎日15分かかるルーティンが、スクリプトなら数秒で終わることも珍しくありません。
TypeScript と Excel Script API を使うと、
- データ加工の自動化
- 大量データの高速処理
- 処理の再現性を担保(ミスなし)
- クラウド(OneDrive)と相性抜群
といったメリットを得られます。
今回のサンプルでは
「特定のキーワードを含む行を、設定した数だけ複製する」
という、実務で非常に使いやすいロジックを紹介します。
🔧 前提条件(学習に必要なもの)
- TypeScript の基本文法
- Excel の基本操作(セル、行、列の概念など)
- Office Scripts が使える環境(Excel Online / Microsoft365)
これらが揃っていれば、すぐにスクリプトを動かせます。
💡 スクリプト概要|何をするコード?
今回の TypeScript コードは以下の処理を行います。
- アクティブなワークシートを取得
- A列と1行目から最終行・最終列を特定
- A列の商品名をすべて取得
- 「A/E/I」などの文字が含まれた行を複製数に応じて処理
- 複製した行を連続してシートに書き出す
つまり…
“条件付きの行複製を完全自動化する” スクリプトです。
🧾 実際の TypeScript コード
function main(workbook: ExcelScript.Workbook) {
// アクティブなワークシートを取得
let selectedSheet = workbook.getActiveWorksheet();
// 最終行の取得
let lastRow = selectedSheet.getRange('A:A').getUsedRange().getLastCell().getRowIndex();
console.log("A列の文字が入っている行数: " + lastRow);
// 最終列の取得
let lastColumn = selectedSheet.getRange('1:1').getUsedRange().getLastCell().getColumnIndex() + 1;
console.log("1行目の文字が入っている列数: " + lastColumn);
// A列の商品名を取得
let rangeA = selectedSheet.getRangeByIndexes(1, 0, lastRow, 1);
let itemValues = rangeA.getValues();
let itemName: string[] = [];
for (let i = 0; i itemValues.length; i++) {
for (let j = 0; j itemValues[i].length; j++) {
itemName.push(String(itemValues[i][j]));
}
}
// 行データ全体を取得
let range = selectedSheet.getRangeByIndexes(1, 0, lastRow, lastColumn);
let vals = range.getValues();
// 特定文字の複製数設定
const listOfItem: { [key: string]: number } = {
A: 1,
E: 2,
I: 3
};
// 書き出し位置管理
let numOfListOfItemPast = 1;
for (let i = 0; i lastRow; ++i) {
// デフォルトの複製数
let numOfListOfItem = 1;
// キーワード一致で複製数変更
for (const key in listOfItem) {
if (itemName[i].includes(key)) {
numOfListOfItem = listOfItem[key];
break;
}
}
// 行複製して書き込み
for (let j = 0; j numOfListOfItem; ++j) {
for (let k = 0; k lastColumn; ++k) {
let selectedCell = selectedSheet.getCell(numOfListOfItemPast + j, k);
selectedCell.setValue(vals[i][k]);
}
}
numOfListOfItemPast += numOfListOfItem;
}
}
🔍 スクリプト詳細|スクリプトを分解して理解しよう
① アクティブなワークシートの取得
let selectedSheet = workbook.getActiveWorksheet();
Office Scripts は「どのシートに対して処理するか」を最初に明確にします。
この一行で、現在開いているシートが操作対象になります。
② 最終行・最終列の取得
let lastRow = selectedSheet.getRange('A:A').getUsedRange().getLastCell().getRowIndex();
let lastColumn = selectedSheet.getRange('1:1').getUsedRange().getLastCell().getColumnIndex() + 1;
Excel のデータ範囲は毎回変わるため、
“どこまでがデータなのか” を動的に取得しなければなりません。
この処理により:
✔ データが何行あるか
✔ 何列まで入力されているか
を把握し、後続処理が柔軟になります。
③ A列の商品名の取得
let rangeA = selectedSheet.getRangeByIndexes(1, 0, lastRow, 1);
let itemValues = rangeA.getValues();
A列をすべて読み込んで配列化し、
扱いやすい文字列のリストに変換しています。
ここで取得した itemName を後ほど、
複製条件(A/E/I など)の判断に使います。
④ 条件に基づく複製数の判定
const listOfItem = { A:1, E:2, I:3 };
商品名に特定文字が含まれている場合、
その行を複製する回数を設定します。
例:
A → 1回
E → 2回
I → 3回
実務では以下の用途が多いです:
- 注文数にもとづく行の複製
- カテゴリ別に処理回数を変更
- 出荷ラベルの複数生成
⑤ 複製 → シート書き込み
selectedCell.setValue(vals[i][k]);
ここで実際に Excel にデータを書き込んでいます。
複製数に応じて j ループを回し、行を増やす仕組みです。
仕様どおりに「連続して」行が追加されるため、
あとから並び替える必要もありません。
🧩 まとめ|Excel 自動化で作業効率が劇的に上がる
今回のスクリプトは、
“条件に応じて行を複製する” という実務的な処理を
TypeScript で完全自動化したものです。
✔ 手作業をなくす
✔ スピードが圧倒的に速い
✔ ミスがゼロ
✔ 毎日使える
これは Excel 自動化の入り口にすぎませんが、
習得すると業務効率は劇的に向上します。
次の記事では、さらに応用して:
- フィルタ+加工の自動化
- 複数シートの一括処理
- 別ファイルの読み込み・書き出し
- JSON や API 連携との統合
など、実務レベルの Excel 自動化も取り上げていきます。
📚 付録|学習を深めるための公式ドキュメント
TypeScript × Excel 自動化は、あなたの作業時間を大幅に短縮してくれます。
楽しみながらスクリプト作成に挑戦してみてください!