コラム
2026年4月13日
毎日の売上データの転記や、未対応案件の確認、関係者への通知作業に追われていませんか。スプレッドシート業務は身近ですが、手作業が増えるほどミスや漏れも起こりやすくなります。とはいえ、「自動化したいけれどプログラミングは難しそう」と、最初の一歩で止まってしまう方も多いでしょう。
そこで役立つのが、Googleの無料機能であるGAS(Google Apps Script)です。GASを使えば、非エンジニアでも日々の定型業務をスプレッドシート上で少しずつ自動化できます。
本記事では、実務でそのまま使えるコピペ用コードと、自分用に直すための書き換えポイントを解説します。手作業のミスを減らし、確認や通知に取られる時間を抑え、本来集中したい業務に使える時間を増やしていきましょう。
【目次】
Googleが提供している自動化ツールで、スプレッドシートやGmail、カレンダーなどを自動で動かす仕組みとして使われています。ベースになっているのは、JavaScriptという、Webサービス開発でも広く使われる言語です。ただし最初は深く覚えなくても、「Googleサービスを自動で動かせる機能」とシンプルに理解しておけば十分です。
GASの大きな魅力は、無料で始めやすい点にあります。Googleアカウントがあればすぐに利用可能で、ブラウザでスプレッドシートを開き、そのまま設定やコード入力に進めます。コストをかけずに試しやすいのが特長です。
Excelマクロにも自動化の強みがありますが、GASはクラウド連携のしやすさで優位です。違いを大まかに整理すると、次のとおりです。
| 比較項目 | VBA(Excelマクロ) | GAS(スプレッドシート) |
| 動く場所 | パソコン内のExcelで動く | クラウド上で動く |
| 得意な作業 | ローカルファイルの操作 | スプレッドシートやGmail連携 |
| 外部ツール連携 | やや手間がかかる | 比較的かんたんに連携可能 |
| 自動実行 | パソコン起動が前提 | パソコンがオフでも実行 |
| 向いている用途 | 手元のExcel業務の自動化 | 通知・集計・共有を含む自動化 |
まずは、自動化したいスプレッドシートを開きます。普段の業務で使っているファイルをそのまま使って大丈夫です。次に、画面上部のメニューから「拡張機能」をクリックしてください。その中にある「Apps Script」を選びます。すると、別画面で「無題のプロジェクト」が開きます。

ここが、GASのコードを入力する場所です。最初は見慣れない画面に感じるかもしれませんが、使う場所はそれほど多くありません。基本的には、中央の広い欄を見れば十分です。
初期状態では、「function myFunction() { }」という文字が入っていることがあります。これは最初から入っているサンプルなので、いったん消して問題ありません。今後はここに、記事内のコードをコピペして使います。
初心者が最もつまずきやすいのが、この最初の承認です。警告画面が出るため、「失敗した」と感じて閉じてしまう人が少なくありません。しかし、これはエラーではなく、自分のGoogleアカウントで動かしてよいかを確認するための手順です。落ち着いて作業を進めましょう。
コードを貼り付けたら、上部の「実行」を押します。すると「承認が必要です」と表示されるので、「権限を確認」をクリックしてください。

次の画面では「このアプリはGoogleで確認されていません」という表示が出ることがあります。画面左下の「詳細」をクリックし、一番下の移動リンクを選んで進みます。

最後に、アクセス許可の画面が表示されたら、内容を確認して「許可」を押します。これで初回設定は完了です。

この確認は、自分で作ったプログラムを動かすための安全確認です。怪しいトラブルではないので、落ち着いて進めましょう。
ここでは、学習用の短い例ではなく、実務で使いやすいサンプルに絞って紹介します。まずはコピペで動かし、必要な箇所を直して自分専用のコードを完成させてください。
なお、コード内の // から始まる記述はコメントです。プログラムの動作には影響しないため、削除しても問題ありません。
「売上データ」シートから、「今日発送」の行だけを抜き出し、「発送リスト」に自動転記する使い方です。
| function copyTodayShippingData() { const ss = SpreadsheetApp.getActiveSpreadsheet(); // ★ここを元データのシート名に変更 const sourceSheet = ss.getSheetByName(‘売上データ’); // ★ここを転記先のシート名に変更 const targetSheet = ss.getSheetByName(‘発送リスト’); // ★ここを判定したい列番号に変更(A=0, B=1, C=2…) const shippingStatusCol = 3; // ★ここを判定したい文字に変更 const targetStatus = ‘今日発送’; const values = sourceSheet.getDataRange().getValues(); const header = values[0]; const rows = values.slice(1); // 条件に合う行を抽出 const filteredRows = rows.filter(row => row[shippingStatusCol] === targetStatus); // 転記先を一度まっさらにする(前回の残骸を残さないため) targetSheet.clear(); if (filteredRows.length > 0) { // ヘッダーとデータを一気に貼り付け targetSheet.getRange(1, 1, 1, header.length).setValues([header]); targetSheet.getRange(2, 1, filteredRows.length, header.length).setValues(filteredRows); ss.toast( ${filteredRows.length}件のデータを転記しました, ‘完了’);} else { // データがない時は通知だけ飛ばす ss.toast(‘今日発送の商品は見つからりませんでした’, ‘お知らせ’); } } |
以下の箇所をご自身のスプレッドシートの表記に合わせて変更してから使ってください。
期限を過ぎた未対応案件を見つけたら、Slackへ自動通知する例です。朝の確認漏れを防ぎたい業務で役立ちます。
| function notifyOverdueTasksToSlack() { const token = ‘xoxb-xxxxxxxxxxxx’; // ★ここにSlack APIトークンを入力 const channelId = ‘C0123456789’; // ★ここに通知先チャンネルIDを入力 const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(‘タスク一覧’); // ★ここにシート名を入力 const rows = sheet.getDataRange().getValues().slice(1); const today = new Date().setHours(0, 0, 0, 0); // 期限切れ・未完了のタスクを抽出 const message = rows .filter(row => { const [name, date, status] = [row[0], row[1], row[2]]; // ★左から[タスク名, 期限, ステータス]の列順を想定 return name && date instanceof Date && date < today && status !== ‘完了’; }) .map(row => `・${row[0]} (${Utilities.formatDate(row[1], “JST”, “MM/dd”)})`) .join(‘\n’); if (!message) return; // 送信対象がなければ終了 // Slackへ送信 UrlFetchApp.fetch(‘ https://slack.com/api/chat.postMessage‘, {method: ‘post’, contentType: ‘application/json’, headers: { Authorization: ‘Bearer ‘ + token }, payload: JSON.stringify({ channel: channelId, text: `⚠️ 期限切れタスクがあります\n${message}` }) }); } |
このコードを使うには、Slack側でAPIトークンとチャンネルIDを取得し、コード内の指定箇所へ貼り付けます。「token」にはAPIトークン(ボットトークン)を入力します。「channelId」には通知先のチャンネルIDを入れます。チャンネル名ではなく、IDを使う点に注意しましょう。
▶APIトークン(ボットトークン)の取得方法はこちら
▶slackのチャンネルIDの見つけ方3種類
方法A:デスクトップ版のチャンネルの詳細画面から
1.IDを知りたいチャンネル名を開き、画面上部の「チャンネル名(チャンネル詳細を取得する)」をクリックします。
2.表示された詳細パネルを一番下までスクロールします。
3.最下部に 「チャンネル ID: CXXXXXXXXXX」 と表示されているので、そこからコピーできます。
方法B:デスクトップ版で右クリックでリンクをコピー
1.左サイドバーのチャンネル一覧から、対象のチャンネルを右クリックします。
2.「コピー」>「リンクをコピー」 を選択します。
3.コピーされたURL(例: https://【your-workspace】.slack.com/archives/CXXXXXXXXXX)の末尾にある C から始まる文字列 がチャンネルIDです。
方法C:ウェブ版のブラウザのURLから
1.ウェブ版Slackで対象のチャンネルを開きます。
2.アドレスバーのURLを確認します。
3.現在のページが https://app.slack.com/client/【ワークスペースID】/CXXXXXXXXXX のようになっている場合、最後の C から始まる部分 がチャンネルIDです
「タスク一覧」の部分は、自分のシート名に合わせて書き換えてください。シート名が違うと、正しく読み取れません。また、row[0] row[1] row[2] は、それぞれタスク名、期限、対応状況の列位置です。プログラミングのルールに従い、A列を0、B列を1、C列を2、、、として数えます。実際の列順に合わせて番号を調整しましょう。
コードを作っても、毎回その都度手動で実行するのは少し面倒ですよね。そこで、決まった時間に自動で動く設定をしていきましょう。GASエディタ左側の時計マークを押します。右下の「トリガーを追加」を押し、実行する関数名を選択します。

「イベントのソース」で時間主導型を選択し「日付ベースのタイマー」と「午前9時~10時」を選びます。最後に保存すれば設定完了です。

これで、パソコンを開いていない時間でも、指定した関数が自動で動くようになります。まずは朝1回の実行から試すと管理しやすいでしょう。
GASは無料で使いやすく、小さな自動化を始める手段として便利です。一方で、運用面には注意したい落とし穴もあります。それが、作った本人しか中身を理解していない、「属人化」の状態に陥りやすい点です。
現場では、次のような失敗が起こりがちです。
特に、コードの説明が残っていない場合は、少しの仕様変更でも対応が難しくなります。担当者の異動や退職で止まる仕組みは危険なのです。
GASは、個人の作業を早くする用途には向いています。ただし、組織全体で継続運用する場合は、便利さだけで判断しない視点も大切です。全社で業務改善やDXを進めるなら、誰が見ても流れを追いやすく、引き継ぎしやすい仕組みが求められます。退職や異動があっても止まらないように、誰でも直せる、管理しやすいことまで含めて、自動化ツールを選ぶ必要があるのです。
まずは本記事のテンプレートを使い、手元の業務を一つ自動化するところから始めましょう。売上確認や通知作業が少し楽になるだけでも、日々の負担は着実に軽くなっていきます。そのうえで、チーム全体への展開を視野に入れるなら、担当者が変わっても運用が続けられる設計や、ドキュメントの整備を意識することが重要です。誰でも扱いやすい仕組みを整えることが、継続的な業務改善の土台につながります。