Google Apps Script(GAS)入門【初心者向け】自動化の始め方

Googleスプレッドシート スクリプト GAS アイキャッチ画像 Googleスプレッドシート

経理や営業管理の現場で15年以上Excelを使い倒してきた実務家として断言できるのは、手作業の繰り返しは単なる時間の浪費ではなく、ミスのリスクそのものであるということです。企業の経理部門で数千行の経費精算データを突き合わせていた際、わずか数行のスクリプトで数時間の作業が数秒に変わった瞬間の衝撃は今でも忘れられません。Googleスプレッドシートでも、この「自動化の力」を享受できるツールがGoogle Apps Script(GAS)です。クラウド上で動作する特性を活かし、Excel VBAとはまた異なる利便性を提供してくれます。

初級:Googleスプレッドシート スクリプト GAS 入門の基本操作

Googleスプレッドシートの機能を拡張し、業務を自動化するための第一歩は、専用のエディタを立ち上げることから始まります。ExcelにおけるVBE(Visual Basic Editor)に相当する場所ですが、インストール作業は一切不要で、ブラウザさえあれば準備は完了します。

エディタの起動と最初の設定

自動化したいスプレッドシートを開き、上部メニューの「拡張機能」から「Apps Script」を選択します。すると、新しいタブでコードを入力するためのエディタが立ち上がります。これがスクリプト作成の拠点です。筆者が社内研修で教えていると、まずここで「英語のコードが並んでいて難しそう」と気後れする方が多いのですが、構文の基本は非常にシンプルです。

まずはプロジェクトに名前を付けましょう。画面左上の「無題のプロジェクト」をクリックし、例えば「営業売上集計スクリプト」といった、実務内容が分かりやすい名称に変更します。

Googleスプレッドシート スクリプト GAS 入門 - Apps Scriptエディタの起動画面とプロジェクト名の変更
Apps Scriptエディタの起動画面とプロジェクト名の変更

セルへの値入力を試す

もっとも基本的な操作は、特定のセルに値を書き込むことです。以下のコードは、現在開いているシートのA1セルに文字を入力する例です。

“`javascript
function helloGas() {
// アクティブなスプレッドシートのシートを取得
const sheet = SpreadsheetApp.getActiveSheet();
// A1セルを指定して値をセット
sheet.getRange(“A1”).setValue(“Googleスプレッドシート スクリプト GAS 入門”);
}
“`

このコードをエディタに貼り付け、上部の「保存」アイコンをクリックしてから「実行」を押してください。初回実行時には「承認」を求めるポップアップが表示されますが、これについては後述するトラブルシューティングのセクションで詳しく解説します。

中級:実務シナリオでデータを操作する

基本を抑えたら、次は具体的な実務シーンに即したコードを書いてみましょう。汎用的な例ではなく、現場で即戦力となる売上管理や経費精算のシナリオを用います。

営業部での売上データ転記

営業部の田中さんは、毎日送られてくる「当日売上」シートのデータを、累計管理用の「年度売上マスター」シートの末尾に追記する作業に追われています。型番「A-001」や「B-002」といった商品名が並ぶリストをコピー&ペーストするのは、行数が増えるほどミスの原因になります。

“`javascript
function copyDailySales() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sourceSheet = ss.getSheetByName(“当日売上”);
const targetSheet = ss.getSheetByName(“年度売上マスター”);

// 当日売上の最終行と最終列を取得してデータを読み込む
const lastRow = sourceSheet.getLastRow();
const lastCol = sourceSheet.getLastColumn();

// 2行目からデータがあると仮定して取得
if (lastRow > 1) {
const data = sourceSheet.getRange(2, 1, lastRow – 1, lastCol).getValues();
// マスターシートの最終行の次に貼り付け
targetSheet.getRange(targetSheet.getLastRow() + 1, 1, data.length, lastCol).setValues(data);

// 転記完了後に当日シートのデータをクリア(ヘッダー以外)
sourceSheet.getRange(2, 1, lastRow – 1, lastCol).clearContent();
}
}
“`

実務でよく見かけるのは、手動でコピペした際に1行飛ばしてしまったり、数式を壊してしまったりするケースです。このようにスクリプト化することで、ボタン一つで正確なデータ蓄積が可能になります。

Googleスプレッドシート スクリプト GAS 入門 - 型番A-001などの商品売上データがマスターシートに転記される様子
型番A-001などの商品売上データがマスターシートに転記される様子

経理部での日付自動入力

経理部の佐藤さんの悩みは、経費精算の「承認」ステータスを更新した際、その日付を手入力するのが面倒だという点です。以下のコードを使えば、特定の列(例えばB列の「承認ボタン」)が編集された際に、隣のセル(C列)へ自動的に今日の日付を入力できます。

“`javascript
function onEdit(e) {
const sheet = e.source.getActiveSheet();
const range = e.range;

// 「経費精算書」シートの2列目(B列)が編集された場合
if (sheet.getName() === “経費精算書” && range.getColumn() === 2) {
const status = range.getValue();
if (status === “承認済”) {
// 隣のセル(C列)に今日の日付を入力
range.offset(0, 1).setValue(new Date());
}
}
}
“`

筆者の経験では、こうした「ちょっとした自動化」の積み重ねが、月末の残業時間を大幅に削る鍵となります。

上級:Gmail連携とトリガーによる完全自動化

Googleスプレッドシート スクリプト GAS 入門の真骨頂は、Googleの他のサービスと連携することにあります。特にGmailとの連携は、Microsoft 365環境におけるVBAよりも遥かにスムーズです。

承認済み経費の通知メール送信

総務部の鈴木さんは、在庫管理表で備品「型番S-100(事務用椅子)」などの在庫が一定数を下回った際、発注担当者へメールを送る作業を自動化したいと考えています。

“`javascript
function checkInventoryAndNotify() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“在庫管理”);
const data = sheet.getDataRange().getValues();

// 1行目はヘッダーなので2行目からループ
for (let i = 1; i < data.length; i++) { const itemName = data[i][0]; // A列:商品名 const stock = data[i][1]; // B列:現在在庫 const threshold = data[i][2]; // C列:発注基準点 if (stock < threshold) { const recipient = "order-dept@example.com"; const subject = "【重要】在庫不足通知:" + itemName; const body = itemName + " の在庫が基準を下回りました。\n現在庫: " + stock + "\n至急確認をお願いします。"; GmailApp.sendEmail(recipient, subject, body); } } } ``` ExcelでもVBAを使えばOutlook等との連携は可能ですが、設定が複雑になりがちです。GASであれば`GmailApp.sendEmail()`という1行で完結するため、初心者でも取り組みやすいのが特徴です。

毎日決まった時間に実行する設定

コードを書くだけでは「自動化」は半分です。人間が実行ボタンを押さなくても、毎日深夜に実行されるようにするのが「トリガー」機能です。エディタの左側にある時計アイコンをクリックし、「トリガーを追加」を選択します。実行する関数を選び、「時間主導型」の設定を行うだけで、あなたが寝ている間に売上集計や在庫チェックを完了させることができます。

Googleスプレッドシート スクリプト GAS 入門 - トリガー追加画面で時間主導型(毎日1時〜2時)を設定する操作
トリガー追加画面で時間主導型(毎日1時〜2時)を設定する操作

現場でよくある失敗とトラブル回避策

実務家として多くの初心者をサポートしてきた中で、必ずと言っていいほど直面する壁がいくつかあります。これらを事前に知っておくだけで、挫折する確率を下げられます。

初心者が陥る「承認」の壁

スクリプトを最初に実行した際、「このアプリは確認されていません」という警告画面が表示されます。ここで驚いて止まってしまう方が非常に多いのですが、これは自分が作成したスクリプトに対して「スプレッドシートやGmailへのアクセス権限を与えるか」を確認する標準的なプロセスです。

「詳細」をクリックし、画面下部の「(プロジェクト名)に移動」を選択して許可を進める必要があります。これを研修で教えていると、「怖い画面が出たので諦めた」という声をよく聞きます。自分のアカウントで作成した自分専用のツールであれば、安心して進めて問題ありません。

シート名変更によるエラーの防ぎ方

実務でよくある失敗あるあるが、「スクリプトを組んだ後に他の誰かがシート名を変更してしまい、エラーで動かなくなる」ケースです。`getSheetByName(“売上”)`という書き方は分かりやすい反面、シート名が変わると機能しません。

これを防ぐには、シートのIDやインデックスで指定するか、あるいは「シート名を変更しないでください」という注釈をセルに入れるといった運用上の工夫が必要です。経理の現場では、この設定を忘れて集計がずれるケースをよく見かけますので、設計段階で「他人が触る可能性」を考慮することが重要です。

ポイント: シート名を固定して使う場合は、変数の定義部分を一箇所にまとめ、修正しやすくしておくとメンテナンス性が高まります。

プロのコツ:Excel VBAとの違いと時短テクニック

15年Excelを使ってきた私がGASに触れて最初に感じたのは、記述方法の微妙な違いです。Microsoft公式サイトでも、VBAとOfficeスクリプト(GASに近い言語)の比較について言及されていますが、共通点と相違点を整理することが習得の近道です。

参照:[Office アドインと VBA の比較(Microsoft公式サイト)](https://learn.microsoft.com/ja-jp/office/dev/add-ins/concepts/office-add-ins-vs-vba)

API制限を意識した書き方

GASには「1日の実行時間」や「メール送信数」に制限があります。特に初心者がやりがちなミスが、`for`文(ループ)の中で`getValue`や`setValue`を何度も呼び出すことです。スプレッドシートとの通信は負荷が高いため、大量のデータを扱う場合は、一度にすべての範囲を取得する`getValues`を使い、メモリ上で処理してから一気に書き戻すのがプロの鉄則です。

“`javascript
// アンチパターン(遅い)
for(let i=1; i<=100; i++){ let val = sheet.getRange(i, 1).getValue(); // 処理... } // プロの書き方(速い) const values = sheet.getRange(1, 1, 100, 1).getValues(); // 配列valuesに対してループ処理を行い、最後に一度だけsetValuesする ```

ショートカットとログ活用

開発効率を上げるために、以下の2点は必ず覚えておきましょう。

1. Ctrl + Enter (Windows) / Cmd + Enter (Mac): スクリプトの実行ショートカットです。マウスを動かす手間を省けます。
2. Logger.log(): 変数の中に何が入っているかを確認するために頻繁に使います。Excel VBAの`Debug.Print`に相当します。

実行後に「表示」→「ログ」から内容を確認できるため、バグを見つける際の必須テクニックです。また、Excelでのカスタム関数作成に慣れている方は、GASでもスプレッドシート上で自作関数を呼び出せることを知っておくと便利です。

参照:[Excel でカスタム関数を作成する(Microsoft公式サイト)](https://support.microsoft.com/ja-jp/office/excel-%E3%81%A7%E3%82%AB%E3%82%B9%E3%82%BF%E3%82%B9-%E9%96%A2%E6%95%B0%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B-291d3e15-568b-4a57-ad6d-317ec6e330a1)

注意点: GASはJavaScriptベースであるため、大文字と小文字を厳格に区別します。spreadsheetappと小文字で書くと動かないため、入力補完機能を活用して正確に入力しましょう。

Googleスプレッドシート スクリプト GAS 入門 - getValuesで取得した2次元配列のデータをLogger.logで確認している画面
getValuesで取得した2次元配列のデータをLogger.logで確認している画面

まとめ

Googleスプレッドシート スクリプト GAS 入門として、基本的な操作から実務での活用法、そして現場で役立つTipsまでを整理しました。

エディタの起動: 「拡張機能」→「Apps Script」から即座に開始できる
実務活用: 営業の売上転記や経理のステータス更新など、定型作業を自動化する
外部連携: Gmailとの親和性が高く、通知業務をゼロにできる
トリガー: 時間指定実行により、人間が不在でも業務を完結させる
* 効率化のコツ: ループ内でのセルアクセスを避け、配列処理で高速化する

最初から複雑なシステムを作ろうとする必要はありません。まずは「特定のセルに今日の日付を入れる」といった小さな成功体験を積み重ねることが、業務自動化への一番の近道です。

コメント

タイトルとURLをコピーしました