Office Scriptsの基本!共通処理を再利用するためのモジュール化でExcel自動化を効率化する方法
生徒
「Office Scriptsで似たような処理を何度も書いているんですが、もっと楽な方法はないですか?」
先生
「ありますよ。同じ処理をまとめて再利用できる“モジュール化”という考え方を使います。」
生徒
「モジュールって難しそうですが、初心者でも大丈夫でしょうか?」
先生
「大丈夫です。Excelでよく使う作業をテンプレート化する感覚で考えると、とてもわかりやすいですよ。」
1. Office Scriptsとは?
Office Scriptsは、Excel Onlineで使えるExcel自動化のための仕組みです。毎日同じ操作を繰り返す作業を、プログラムとして保存し、ボタン一つで実行できます。セルに文字を書く、色を変える、表を整えるなど、人がマウスで行っている操作をコードで再現します。
プログラミング未経験でも、Excelの操作を順番に書くだけで動かせるため、業務効率化や作業時間の短縮にとても役立ちます。
2. 共通処理とは何か
共通処理とは、何度も同じ内容を行う作業のことです。たとえば「見出しを入力する」「完了メッセージを表示する」「セルの色を変える」といった処理は、別のスクリプトでも何度も使います。
これを毎回書き直すと、時間がかかるだけでなく、修正が必要になったときに全部直さなければならなくなります。そこで、同じ処理をまとめて再利用できる形にするのが重要になります。
3. モジュール化をやさしく理解しよう
モジュール化とは、共通処理を「部品」としてまとめる考え方です。料理で例えると、下ごしらえを先に済ませておき、必要なときに使うイメージです。
Office Scriptsでは、複数ファイルを使った本格的なモジュール分割はできませんが、同じスクリプト内で関数として整理することで、十分にモジュール化の考え方を取り入れられます。
4. 共通処理をまとめていないコード例
まずは、共通処理をそのまま何度も書いている例を見てみます。
function main(workbook: ExcelScript.Workbook) {
const sheet = workbook.getActiveWorksheet();
sheet.getRange("A1").setValue("完了");
sheet.getRange("A1").getFormat().getFill().setColor("#CCFFCC");
sheet.getRange("A2").setValue("完了");
sheet.getRange("A2").getFormat().getFill().setColor("#CCFFCC");
}
同じ処理が何度も出てきており、後から見たときに分かりづらくなります。
5. 関数としてまとめたモジュール化の例
次に、共通処理を関数としてまとめた例です。この関数が「モジュールの代わり」になります。
function main(workbook: ExcelScript.Workbook) {
const sheet = workbook.getActiveWorksheet();
setComplete(sheet, "A1");
setComplete(sheet, "A2");
}
function setComplete(sheet: ExcelScript.Worksheet, address: string) {
sheet.getRange(address).setValue("完了");
sheet.getRange(address).getFormat().getFill().setColor("#CCFFCC");
}
処理内容が一か所にまとまり、修正も簡単になります。
6. 別の処理でも再利用できるメリット
モジュール化した関数は、別のセルや別のシートでもそのまま使えます。これはOffice Scriptsのコード管理においてとても大切な考え方です。
function main(workbook: ExcelScript.Workbook) {
const sheet = workbook.getActiveWorksheet();
writeTitle(sheet, "売上表");
}
function writeTitle(sheet: ExcelScript.Worksheet, title: string) {
sheet.getRange("A1").setValue(title);
}
同じ関数を使い回すことで、スクリプト全体が整理されます。
7. 初心者が意識したいモジュール化のコツ
最初から完璧に分ける必要はありません。「同じ処理を2回以上書いたらまとめる」というルールだけで十分です。関数名は、自分が見てすぐ分かる名前を付けましょう。
Office Scriptsでのモジュール化は、難しい技術ではなく、読みやすく、直しやすいコードを書くための工夫です。Excel自動化を続けるほど、その便利さを実感できます。
function main(workbook: ExcelScript.Workbook) {
const sheet = workbook.getActiveWorksheet();
showMessage(sheet, "処理が終了しました");
}
function showMessage(sheet: ExcelScript.Worksheet, text: string) {
sheet.getRange("C1").setValue(text);
}
まとめ
今回の記事では、Office Scriptsにおける「共通処理の再利用」と「モジュール化」の基礎について詳しく解説してきました。Excelの自動化を進めていくと、どうしても「同じようなコードを何度も書いているな」と感じる場面が出てきます。そんな時に、特定の処理を一箇所にまとめて「部品化」しておく技術がモジュール化です。
Office Scriptsで共通化を行うメリット
共通処理を関数(メソッド)として独立させる最大のメリットは、プログラムの「見通し」が劇的に良くなることです。メインの処理(main関数)の中身がスッキリするため、後からコードを読み返した際に「何をしているスクリプトなのか」が直感的に理解できるようになります。
また、実務において非常に重要なのが「メンテナンス性」です。例えば、完了したセルを「緑色」にする処理をあちこちに書いていると、後から「やっぱり青色に変更したい」と思ったときに、全ての箇所を書き直さなければなりません。しかし、共通関数として一箇所にまとめていれば、その関数の色指定を変えるだけで、プログラム全体の動作を一気に修正できるのです。
VBAとの比較で考える再利用の仕組み
Excelマクロ(VBA)に慣れている方であれば、標準モジュールに「Subプロシージャ」や「Functionプロシージャ」を作って、それを呼び出す感覚に近いと言えます。Office Scripts(TypeScriptベース)でも考え方は同じです。
参考までに、VBAで同じような「共通処理の呼び出し」を行う場合の書き方をおさらいしてみましょう。
' メインの処理
Sub MainProcess()
Dim ws As Worksheet
Set ws = ActiveSheet
' 共通の部品を呼び出す
Call SetStatusComplete(ws, "A1")
Call SetStatusComplete(ws, "A2")
End Sub
' 共通処理の部品(モジュール化)
Sub SetStatusComplete(targetSheet As Worksheet, cellAddress As String)
With targetSheet.Range(cellAddress)
.Value = "完了"
.Interior.Color = RGB(204, 255, 204) ' 薄い緑色
End With
End Sub
このように、言語が違っても「部品化して呼び出す」という構造は共通しています。Office Scriptsでは、これをTypeScriptの関数形式で行うことになります。
効率的なスクリプト作成のステップ
初心者が効率よくOffice Scriptsを使いこなすためのステップを整理しました。
- まずは記録から: 最初はアクションレコーダー(操作の記録)を使ってコードの土台を作ります。
- 重複を見つける: 同じ「.getRange()」や「.setValue()」が並んでいる場所を探します。
- 関数に切り出す: 重複している部分を「function 新しい名前()」の中に引っ越しさせます。
- 引数を活用する: セル番地や入力する文字など、場所によって変わる部分だけを「変数(引数)」として受け取るようにします。
これだけで、あなたのスクリプトはプロが書いたような洗練されたものに生まれ変わります。Office ScriptsはWeb版ExcelやTeams上でも動作するため、一度便利な共通部品を作っておけば、組織全体のDX(デジタルトランスフォーメーション)を加速させる強力な武器になるはずです。
生徒
「先生、ありがとうございました!モジュール化って、要するに『よく使うハンコを作っておいて、必要な時にポンポン押す』みたいなイメージですね。」
先生
「まさにその通りです!毎回手書きで同じことを書くのは大変ですし、書き間違いも起きますからね。ハンコ(関数)にしていれば、中身の文字を変えるだけで使い回せるので正確です。」
生徒
「コードが短くなって、後から見た時にすごく読みやすくなりました。最初は難しく感じましたけど、引数を使って『どこに何を書くか』を外から指定してあげるだけでいいんですね。」
先生
「いいところに気づきましたね。Office Scriptsでは、シート操作だけでなく日付の計算やデータの整形なんかも共通化できます。少しずつ自分の『秘伝のタレ』のような共通関数を増やしていくと、自動化がもっと楽しくなりますよ。」
生徒
「秘伝のタレ!いいですね。他のスクリプトを作るときにも、今回の考え方を応用して、もっとスマートなコードが書けるように練習してみます!」
先生
「その意気です。もしコードが長くなって混乱しそうになったら、いつでも『この部分は部品にできないかな?』と立ち止まって考えてみてくださいね。」