TypeScriptでExcel操作を自動化してみた

⚙️ TypeScript × Excel 自動化入門|面倒な作業を“ゼロ秒”にする実践スクリプト解説

Excel はビジネスのあらゆる場面で使われる強力なツールですが、
毎回同じ操作を手作業で繰り返すのは、正直つらいですよね…。
「この作業、自動でやってくれたら…」と思ったことはありませんか?

そんなあなたに強力な味方となるのが、TypeScript + Excel Script API(Office Scripts)
Excel の操作をプログラムで自動化できるため、
手作業の何十倍ものスピードで、正確に、ミスなく処理できます。

この記事では、実際に動く TypeScript コードを使って、
Excel の行を条件付きで複製し、データを書き出すスクリプト
初心者にも分かるように丁寧に解説します。

「Excel 自動化を本気で覚えたい」
そんなあなたにとって、最初の実践ガイドになるはずです。


📋 目次

  1. はじめに
  2. 前提条件
  3. スクリプト概要
  4. スクリプト詳細
  5. まとめ
  6. 付録

🚀 はじめに|Excel自動化のメリットとは?

Excelは便利ですが、手作業の繰り返しには限界があります。
コピー&ペースト、並び替え、抽出、複製…
毎日15分かかるルーティンが、スクリプトなら数秒で終わることも珍しくありません。

TypeScript と Excel Script API を使うと、

  • データ加工の自動化
  • 大量データの高速処理
  • 処理の再現性を担保(ミスなし)
  • クラウド(OneDrive)と相性抜群

といったメリットを得られます。

今回のサンプルでは
「特定のキーワードを含む行を、設定した数だけ複製する」
という、実務で非常に使いやすいロジックを紹介します。


🔧 前提条件(学習に必要なもの)

  • TypeScript の基本文法
  • Excel の基本操作(セル、行、列の概念など)
  • Office Scripts が使える環境(Excel Online / Microsoft365)

これらが揃っていれば、すぐにスクリプトを動かせます。


💡 スクリプト概要|何をするコード?

今回の TypeScript コードは以下の処理を行います。

  1. アクティブなワークシートを取得
  2. A列と1行目から最終行・最終列を特定
  3. A列の商品名をすべて取得
  4. 「A/E/I」などの文字が含まれた行を複製数に応じて処理
  5. 複製した行を連続してシートに書き出す

つまり…
“条件付きの行複製を完全自動化する” スクリプトです。


🧾 実際の 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 自動化は、あなたの作業時間を大幅に短縮してくれます。
楽しみながらスクリプト作成に挑戦してみてください!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA