Office Scriptsで行列追加・削除を自動化!Excelセル操作を初心者向けにやさしく解説
生徒
「Office ScriptsでExcelの操作を自動化したいんですが、どんなコードを書けばいいんですか?」
先生
「Office ScriptsはTypeScriptという言語を使ってExcelのセルやシートを操作できますよ。簡単なコードで Excel を動かせます。」
生徒
「どんなふうにExcelを自動化するんですか?」
先生
「それでは、Office Scriptsの基本的な書き方を一緒に見ていきましょう!」
1. Office Scriptsとは?
Office Scriptsは、Excel Onlineで使える自動化スクリプトです。Excelの「自動化」タブからスクリプトを実行でき、セルの値の変更、シートの作成、表(テーブル)の追加など、多くの作業を自動で行えます。プログラムが初めての人でも、身近なExcelの操作をコードに置き換えるだけで便利な処理が書けるようになります。
これまでは、Excelの自動化といえば「VBA(マクロ)」が主流でした。しかし、Office Scriptsはブラウザ版のExcelでも動作し、Microsoft 365の他のサービス(Power Automateなど)と連携しやすいという大きなメリットがあります。クラウド上で動くため、インストール作業も不要で、どこからでも最新の自動化処理を共有・利用することが可能です。プログラミング未経験の方にとって、最初の壁となる環境構築が必要ない点は、学習を始める上で非常に大きな魅力と言えるでしょう。
2. セルへのデータ入力と取得の基本をマスターしよう
まずは、Excel操作の基本中の基本である「セルに値を書く」ことと「セルの値を読み取る」方法について学びましょう。プログラムの世界では、値を書くことを「セット(Set)」、値を読み取ることを「ゲット(Get)」と呼ぶことが多いです。Excelの特定のマス目(セル)を指し示すには、住所のような役割を果たす「アドレス」を使います。例えば、一番左上のマス目は「A1」と呼びますね。
Office Scriptsでセルを操作する際は、まず「今開いているワークブック(ファイル全体)」を捕まえ、次に「特定のシート」を選び、最後に「セル(レンジ)」を指定するという順番で命令を出します。これは、大きな図書館から、特定の棚を探し、その中の一冊の本を手に取るようなイメージです。
function main(workbook: ExcelScript.Workbook) {
// 1. 現在アクティブな(開いている)シートを取得します
let sheet = workbook.getActiveWorksheet();
// 2. A1セルに「Hello World」という文字を書き込みます
sheet.getRange("A1").setValue("Hello World");
// 3. B1セルに数字の「100」を書き込みます
sheet.getRange("B1").setValue(100);
}
上記のコードを実行すると、Excelの画面上に文字や数字がパッと現れます。`setValue`という命令が、指定した場所に値を置く役割を担っています。逆に、セルにある情報をプログラム側に取り込みたいときは、次のようなコードを書きます。
function main(workbook: ExcelScript.Workbook) {
let sheet = workbook.getActiveWorksheet();
// A1セルの値を取得して、変数「val」に保存します
let val = sheet.getRange("A1").getValue();
// 取得した値をコンソール(ログ出力画面)に表示します
console.log("A1セルの内容は:" + val);
}
このように、`getValue()`を使うことで、Excelの中にある情報をプログラムの中で再利用できるようになります。これが自動計算や条件分岐の第一歩となります。
3. 行の追加と削除!表の形を自由に変える
データを整理していると、新しいデータを入れるために行を挿入したり、不要なデータを一行丸ごと消したりする作業が発生します。これを手作業で行うのは面倒ですが、Office Scriptsなら一瞬で終わります。行の操作を行う際は、`insertRow`(行の挿入)や`delete`(削除)といった命令を使います。
「行」は英語で「Row(ロウ)」、「列」は「Column(カラム)」と言います。これらは非常によく使う用語なので、セットで覚えておくと便利です。例えば、2行目の上に新しい空行を作りたい場合は、2行目の範囲を指定して「ここに追加して!」という命令を出します。列の場合も同様で、特定の列を指定して追加・削除が可能です。
function main(workbook: ExcelScript.Workbook) {
let sheet = workbook.getActiveWorksheet();
// 3行目に新しい行を1行挿入します
// ExcelScript.InsertShiftDirection.down は「既存の行を下にずらす」という意味です
sheet.getRange("3:3").insert(ExcelScript.InsertShiftDirection.down);
// C列を削除します
// ExcelScript.DeleteShiftDirection.left は「右側の列を左に詰める」という意味です
sheet.getRange("C:C").delete(ExcelScript.DeleteShiftDirection.left);
}
ここで出てきた`InsertShiftDirection`や`DeleteShiftDirection`という難しい言葉は、「データをどっちの方向にずらすか?」を決めるための設定です。行を追加したら下の行はさらに下に下がりますし、列を消したら右側の列が左に寄ってきますよね。その動きをプログラムに詳しく教えてあげているのです。
4. レンジ(範囲)を指定して一気に計算する
一つのセルだけでなく、複数のセルをまとめて扱うことを「レンジ(Range)」と呼びます。例えば、「A1からB10まで」といった広い範囲を指定して、色を塗ったり計算したりすることができます。初心者がまず覚えたいのは、セル同士の計算結果を別のセルに書き出す方法です。
例えば、売上金額と消費税を計算して、合計金額を出すといった処理を考えてみましょう。プログラムを使えば、一つ一つのセルに手書きで数式を入れなくても、スクリプトを実行するだけで全ての行に対して一括で計算を行うことが可能です。これは「繰り返し処理」という技術を使いますが、まずはシンプルな「セルの値を計算して代入する」流れを確認しましょう。
function main(workbook: ExcelScript.Workbook) {
let sheet = workbook.getActiveWorksheet();
// A2に単価(500)、B2に個数(3)が入っているとします
let price = sheet.getRange("A2").getValue() as number;
let count = sheet.getRange("B2").getValue() as number;
// 計算を行います(単価 × 個数)
let total = price * count;
// C2に計算結果を書き込みます
sheet.getRange("C2").setValue(total);
// セルに数式を直接入れることもできます
sheet.getRange("D2").setFormula("=SUM(A2:C2)");
}
上記の例で `as number` という書き方が出てきました。これは「このセルの値は数字として扱いますよ」という宣言です。Office Scripts(TypeScript)は非常に几帳面な性格をしており、中身が文字なのか数字なのかをはっきりさせておかないと、計算の途中で「これって数字なの?」と迷ってしまうことがあります。そのため、計算をするときは「これは数字だよ!」と教えてあげるとスムーズに動きます。
5. オートフィル機能で連続データを自動生成
Excelの便利な機能に「オートフィル」があります。セルの右下をドラッグして、日付や連番を連続して入力するあの機能です。実は、Office Scriptsでもこのオートフィルを再現できます。例えば、1行目に「1月」と書いた後、12月まで自動で埋めるような処理です。これを自動化できれば、毎月のレポート作成がぐっと楽になります。
スクリプトでオートフィルを使うときは、`autoFill`という命令を使います。「どこからどこまで」をコピー元にするか、そして「どこまで」引き伸ばすかを指定します。これにより、単なるコピー&ペーストだけでなく、日付の加算や数値のパターンを読み取った連続入力が可能になります。
function main(workbook: ExcelScript.Workbook) {
let sheet = workbook.getActiveWorksheet();
// A1セルに「1」を入力
sheet.getRange("A1").setValue(1);
// A2セルに「2」を入力
sheet.getRange("A2").setValue(2);
// A1:A2のパターンを読み取って、A10まで連続数字を入力します
let sourceRange = sheet.getRange("A1:A2");
let targetRange = sheet.getRange("A1:A10");
sourceRange.autoFill(targetRange, ExcelScript.AutoFillType.fillSeries);
}
このように、`fillSeries`(連続データで埋める)というオプションを指定することで、Excelに「法則性を読み取ってね!」とお願いすることができます。単に同じ内容をコピーしたい場合は `fillCopy` を使います。用途に合わせて使い分けるのがポイントです。
6. 実践的なデータの並べ替えとフィルタリング
大量のデータが並んでいるとき、特定の条件でデータを絞り込んだり、並び替えたりする作業は頻繁に行われます。Office Scriptsでは、これらも数行のコードで実現可能です。例えば「売上順に並べる」「特定の担当者のデータだけ表示する」といった操作です。プログラムに任せることで、ミスなく確実に整理された表を手に入れることができます。
並べ替え(ソート)を行うには、`getSort()`という機能を使います。これを使うと、どの列を基準にするか(例えば金額の列)、昇順(小さい順)か降順(大きい順)かを細かく指定できます。また、フィルタリングは「オートフィルター」と同じ働きをします。特定の文字を含む行だけを残して、あとは隠してしまう処理です。これらを組み合わせれば、複雑なデータ分析の準備を一瞬で整えることができます。
function main(workbook: ExcelScript.Workbook) {
let sheet = workbook.getActiveWorksheet();
let range = sheet.getUsedRange(); // データが入っている全範囲を自動で取得
// 1列目(A列)を基準に、大きい順(降順)に並べ替えます
range.getSort().apply([{ key: 0, ascending: false }]);
// 2列目(B列)に「完了」という文字が入っているデータだけを抽出します
let filter = sheet.getAutoFilter();
filter.apply(range, 1, { filterOn: ExcelScript.FilterOn.custom, criterion1: "完了" });
}
実行結果のイメージは以下のようになります。
(実行結果)
・データがA列の値が大きい順に再配置されました。
・B列が「完了」以外の行が非表示になり、必要な情報だけが画面に残りました。
これで、手作業で何度もフィルターをクリックする手間から解放されます。自動化の恩恵を最も感じやすい部分かもしれません。
7. スクリプトを保存して再利用するためのコツ
せっかく書いたスクリプトも、一度きりで終わってはもったいないです。Office Scriptsの良さは、名前を付けて保存し、いつでもボタン一つで呼び出せる点にあります。また、作成したスクリプトはチームメンバーに共有することもできます。自分が作った便利な道具を他の人に使ってもらうことで、チーム全体の業務効率を上げることができるのです。
スクリプトを作成する際のコツは、できるだけ「汎用性(はんようせい)」を持たせることです。汎用性とは、特定の場合だけでなく、色々な場面で使いまわせる性質のことです。例えば、「A1セル」と決め打ちするのではなく、現在選択しているセルに対して処理を行うように書けば、どんな表でもそのスクリプトが役立つようになります。こうした工夫を少しずつ重ねることで、あなたのスクリプトはより強力なツールへと進化していきます。
プログラミング未経験の方は、最初はコードが呪文のように見えるかもしれません。しかし、一つ一つの単語の意味を調べていくと、実はとても論理的でシンプルな指示の集まりであることに気づくはずです。まずは小さな書き換えから始めて、少しずつ自分の思い通りにExcelを操る楽しさを体験してみてください。エラーが出ても大丈夫です。エラーメッセージは「ここを直せばもっと良くなるよ」というヒントに過ぎません。焦らず、一歩ずつ進んでいきましょう。