Office ScriptsでExcelテーブル操作!行の条件抽出とフィルタリングの基本をマスター
生徒
「仕事でExcelの大きな表から特定のデータだけを探すのが大変なんです。Office Scriptsで自動的に条件に合う行だけを抜き出したり、フィルタをかけたりする方法はありますか?」
先生
「もちろんです!Office Scriptsの『ListObject(リストオブジェクト)』という機能を使えば、テーブルの中にある大量のデータから、特定の条件に一致する行だけをサッと抽出できますよ。」
生徒
「ListObjectって何だか難しそうですね。プログラミングをやったことがない私でも、フィルター機能のように簡単に操作できるんでしょうか?」
先生
「大丈夫ですよ。Excelのボタンをクリックしてフィルターをかける操作を、そのままコードに書き換えるイメージです。まずはテーブルの基本から、具体的な条件抽出の書き方までゆっくり学んでいきましょう!」
1. Office Scriptsとは?
Office Scripts(オフィススクリプト)は、Microsoft 365のExcel Onlineなどで利用できる業務自動化のためのツールです。これまでExcelの自動化といえば「VBA(マクロ)」が主流でしたが、Office Scriptsはより現代的で、Webブラウザ上でもスムーズに動作するのが特徴です。
このスクリプトは「TypeScript(タイプスクリプト)」というプログラミング言語をベースにしています。プログラミング未経験の方には少し難しく聞こえるかもしれませんが、実は「セルの値を変える」「表を並べ替える」といった日常的な操作を、決まった形式の命令文として書くだけで動かすことができます。特に、大量のデータを扱う際に、人間が手作業で行う「探す」「選ぶ」「コピーする」といった作業を、一瞬でミスなく終わらせてくれるのが最大のメリットです。
2. 「テーブル」と「ListObject」の関係を知ろう
Excelでデータを整理するとき、ただセルに文字を入力するだけでなく、「挿入」タブから「テーブル」を作成することがありますよね。Office Scriptsの世界では、この「テーブル」のことを専門用語で「ListObject(リストオブジェクト)」と呼びます。
なぜ普通のセル範囲(Range)ではなくテーブルを使うのでしょうか?それは、テーブルにしておくことで、データの範囲がどこからどこまでなのかをプログラムが自動的に認識してくれるからです。例えば、新しくデータが行に追加されたとしても、テーブルであれば自動的に範囲が広がるため、コードを書き直す必要がありません。自動化において「テーブル(ListObject)」を使うことは、非常に効率的でエラーを防ぐ重要なポイントになります。
3. テーブル全体を取得する一番シンプルなコード
まずは、Excelシートの上にあるテーブルをプログラムで見つけるところから始めましょう。スクリプトが「どの表を操作すればいいか」を理解できなければ、条件抽出もできません。以下のコードは、アクティブな(今開いている)シートにある1番目のテーブルを取得して、その名前を表示する基本の形です。
function main(workbook: ExcelScript.Workbook) {
// 1. 今開いているシートを取得します
const sheet = workbook.getActiveWorksheet();
// 2. シート内にある最初のテーブル(ListObject)を取得します
const table = sheet.getTables()[0];
// 3. もしテーブルが見つかったら、その名前をログに出力します
if (table) {
console.log("見つかったテーブルの名前: " + table.getName());
} else {
console.log("テーブルが見つかりませんでした。");
}
}
解説:
sheet.getTables()[0] という部分は、「シートにあるテーブルを全部数えて、その中の0番目(プログラミングでは1番目を0と数えます)を連れてきて!」という意味です。これを const table という名前の箱に入れて、後で使いやすくしています。
見つかったテーブルの名前: テーブル1
4. オートフィルターで特定の値を抽出する方法
Excelでよく使う「フィルター」機能をOffice Scriptsで再現してみましょう。例えば、商品リストの中から「カテゴリ」が「家電」のものだけを表示させたい場合です。これには getAutoFilter() という命令を使います。
function main(workbook: ExcelScript.Workbook) {
const sheet = workbook.getActiveWorksheet();
const table = sheet.getTables()[0];
// テーブルのフィルター機能(AutoFilter)を取得します
const filter = table.getAutoFilter();
// 0列目(一番左の列)を対象に「家電」という文字でフィルタリングします
filter.apply({
columnIndex: 0,
criteria: {
filterOn: ExcelScript.FilterOn.custom,
criterion1: "家電"
}
});
}
解説:
columnIndex: 0 は、左から数えて何番目の列にフィルターをかけるかを指定しています。criterion1 は「条件1」という意味で、ここに抽出したいキーワードを入力します。これを実行すると、Excelの画面上で一瞬にして「家電」以外の行が隠されます。
5. 数値の条件で抽出する(○以上、○以下など)
文字列だけでなく、数値を使って「売上が50,000円以上の行だけを出したい」といった抽出も可能です。比較演算子(ひかくえんざんし)と呼ばれる記号を使いますが、これは算数の授業で習った「不等号(ふとうごう)」と同じ考え方です。
function main(workbook: ExcelScript.Workbook) {
const table = workbook.getActiveWorksheet().getTables()[0];
const filter = table.getAutoFilter();
// 2列目(左から3番目)が「1000」以上の行を抽出します
filter.apply({
columnIndex: 2,
criteria: {
filterOn: ExcelScript.FilterOn.custom,
criterion1: ">=1000" // 「1000以上」という条件
}
});
}
解説:
>= という記号は「以上」を表します。他にも <= (以下)、> (より大きい)、< (より小さい)などが使えます。これを組み合わせることで、予算オーバーの項目を見つけたり、在庫が少なくなっている商品だけを表示させたりする自動化が実現できます。
6. 条件に一致する行のデータを「取得」して処理する
フィルターで見た目を変えるだけでなく、条件に合うデータをプログラムの中で「中身だけ取り出して加工したい」という場面もあります。これには「配列(はいれつ)」というデータの集まりを操作するテクニックを使います。初心者の方には少し手強く感じるかもしれませんが、一列ずつ順番に中身をチェックしていく「繰り返し処理」の基本です。
function main(workbook: ExcelScript.Workbook) {
const table = workbook.getActiveWorksheet().getTables()[0];
// テーブルの中身(データ行)をすべて取得します
const rows = table.getRangeBetweenHeaderAndTotal().getValues();
// 条件に合うデータだけを入れる新しい箱(配列)を用意します
let filteredData = [];
// 1行ずつ順番にチェックします(ループ処理)
for (let i = 0; i < rows.length; i++) {
let status = rows[i][3]; // 4列目の「ステータス」を確認
if (status === "完了") {
filteredData.push(rows[i]); // 「完了」なら箱に入れる
}
}
// 抽出された結果の数を表示します
console.log("完了したタスクの数: " + filteredData.length);
}
解説:
getRangeBetweenHeaderAndTotal() は、見出し(ヘッダー)と合計行を除いた、純粋なデータ部分だけを指す便利な命令です。for という言葉は「データの数だけ同じ作業を繰り返してね」という合図です。このように書くことで、画面上のフィルター機能を使わずに、プログラムの内部で自由にデータを仕分けすることができます。
7. 条件抽出でよく使う用語とテクニックの解説
ここで、Office Scriptsを学ぶ上で避けて通れない用語をいくつか整理しておきましょう。これらを理解しておくと、ネットで調べ物をする際にもぐっと理解が深まります。
- メソッド(Method):
getTables()やapply()のように、対象を動かすための「命令文」のことです。 - 引数(Parameter): 命令に渡す詳しい設定値のことです。例えば「フィルターをかける」という命令に対して、「どの列に?」「何の文字で?」といった具体的な情報を指します。
- インデックス(Index): データの順番を表す番号です。Office Scriptsでは「0」から数え始めるのがルールです。1列目は「0」、2列目は「1」となります。
- ブール値(Boolean):
true(はい)かfalse(いいえ)の2つの状態を表す値です。条件に合っているかどうかを判断する際によく使われます。
8. エラーを防ぐためのポイント:テーブルが存在するか確認
プログラムを作って動かしたとき、一番困るのは「エラーで止まってしまうこと」ですよね。特にテーブル操作で多いのが、「操作しようとしたテーブルがシートに無かった」というパターンです。これを防ぐために、あらかじめ「もしテーブルがあったら処理をする」という「条件分岐(じょうけんぶんき)」を書いておくのが、プロのような丁寧な書き方です。
if (table) { ... } という書き方を使うと、テーブルが見つからない場合に「テーブルがありません!」と優しく教えてくれるようになり、突然エラーで画面が真っ赤になるのを防げます。パソコンを使い慣れていない方でも、こうした丁寧な作り込みをしておくことで、安心して自動化ツールを使うことができます。
9. 複数の条件を組み合わせて抽出する応用
「カテゴリが家電」かつ「価格が5000円以上」のように、複数の条件で絞り込みたいこともありますよね。Office Scriptsでは、フィルターの命令を複数回書いたり、プログラムの判断基準(if文)の中で && (かつ)や || (または)という記号を使うことで、複雑な条件抽出も自由自在になります。
手作業で何度もフィルターをかけ直すのは時間がかかりますが、スクリプトなら一瞬です。一度書き方を覚えてしまえば、毎日10分かかっていたデータ整理が、ボタンひとつで0秒になります。これが「Excel自動化」の本当の凄さです。