【GAS入門】最終受注日が10か月以上経過したデータを自動抽出&メール通知する方法

【GAS入門】最終受注日が10か月以上経過したデータを自動抽出&メール通知する方法 GAS

この記事では、Google Apps Script(GAS) を活用して、スプレッドシートの「最終受注日」から10か月以上経過したデータを抽出し、自動的にメール通知する方法を解説します。
ノンプログラマーの医療技術職(例:義肢装具士)やIT初心者 を想定しており、具体的なステップバイステップの説明を中心に記載しています。

  • 今回紹介するスクリプトの目的
    業務で管理している受注データが古くなっていないかを、自動的にチェックしてお知らせすることで、更新や再注文のタイミングを逃すリスクを軽減し、業務効率化を目指しています。
  • 想定読者
    1. Google Apps Script に興味がある・学び始めたばかりの方
    2. スプレッドシートを使って受注や納品状況を管理している方
    3. 仕事を効率化したい医療技術職やIT初心者の方
  • 記事の概要
    1. スクリプトの概要(目的と機能)
    2. スクリプトの手順解説
    3. スクリプトを運用する上での注意点とヒント
    4. 自動メール通知の設定方法
  • 背景・ニーズ
    業務をしていると「○○さんの受注状況ってどうだったっけ?」といった確認作業が発生しがちです。特に「最終受注日」から再受注の時期が迫っているのに気づかず、後手に回ることも…。アフターフォローが必要な顧客の情報をいちいちチェックしていると時間が無駄だなと感じていました。
    そこで、定期的に受注情報をチェックし10か月以上経過した受注データをピックアップして自動メール通知 する仕組みを作ってみました。Googleスプレッドシートと今回紹介するスクリプトを活用することで、この課題を解決しようと思いました。

GASで「最終受注日」をチェックする仕組みとは?

必要な準備物

今回の方法を実行するための準備物とツールを紹介します。Googleアカウント取得されてない方は参考URLを見ながら取得してみてください。(無料です)

必要な準備物やツール

  1. Googleアカウント(Gmail、Googleスプレッドシートを利用するため) 

Googleのアカウントの取得方法は、以下のサイトを参考にしてください。

【初心者向け】Googleアカウントの作り方・ログイン方法・注意点まとめ
Google アカウントは Gmail や Google カレンダーなど、Google のサービスを利用するために必要不可欠です。Google アカウントは無料で作成可能で、多くの Google サービスへアクセスできます。本記事では Go...
  1. チェック対象のスプレッドシート
    • シート名を 一覧表(例)として作成
    • 最低限「最終受注日」「名前」「最終受注項目」などの列が必要。

スプレッドシートってなに?(記事内リンク)

  1. GASエディタ
    • スプレッドシート上部メニュー「拡張機能 > Apps Script」からアクセス

GASとは何?(記事内リンク)

GASエディタの起動方法について(参考リンク)

はじめてのGAS(1)スクリプトエディタの開き方と初回実行時のセキュリティ承認の方法|はじめての自動化
Google Apps Script(GAS)で作業を自動化! GASはGoogleアカウントとブラウザ(Chromeなど)があれば無料で利用ができます。スプレッドシート、Gmail、カレンダー、フォームなどのサービスを連携して、作業の自動...
  1. スクリプト(本記事で紹介するコードをコピペし、メールアドレスを変更すればよし。)

実践手順【ステップバイステップ解説】

ここでは、実際に動くスクリプトを示しながら、その書き方やカスタマイズのポイントを解説します。まずはサンプルデータをスプレッドシートにコピペして、データを作成してください。

サンプルデータ

顧客ID名前最終受注日最終受注項目
1テストタロウ2024/05/01ソケット
2ヤマダタロウ2023/01/15足部
3スズキタロウ2025/01/06ライナー

最終受注日は書式設定を”日付”に変更してください。

1. スクリプトの全体像

下記が今回のスクリプトです。大きく分けて3つの関数があります。

  1. checkOverdueOrders():
    「最終受注日」をチェックし、10か月以上経過した行の情報を配列で返す。
  2. sendOverdueOrdersEmail(overdueOrders):
    配列で受け取った行情報を、メール送信する。
  3. notifyOverdueOrders():
    上記2つの関数を統合的に実行する。
/**
 * '最終受注日' の列をチェックし、10か月以上経過したデータを取得
 * @return {Array} 10か月以上経過した行の情報(行番号とデータ)の配列
 */
function checkOverdueOrders() {
  const ss = SpreadsheetApp.getActiveSpreadsheet(); // アクティブなスプレッドシートを取得
  const sheet = ss.getSheetByName('一覧表'); // 操作対象のシート(適宜変更)

  const data = sheet.getDataRange().getValues(); // シート全体のデータを取得(2次元配列)
  const headers = data.shift(); // ヘッダー行(1行目)を分離して取得

  const targetHeader = "最終受注日"; // チェック対象のヘッダー名
  const columnIndex = headers.indexOf(targetHeader); // '最終受注日' 列のインデックスを取得

  if (columnIndex === -1) { // ヘッダーが見つからない場合
    throw new Error(`ヘッダー "${targetHeader}" が見つかりません`);
  }

  const now = new Date(); // 現在の日付を取得
  const overdueOrders = []; // 10か月以上経過したデータを記録する配列

  // データ部分を1行ずつ処理
  data.forEach((row, index) => {
    const orderDate = row[columnIndex]; // 該当列(最終受注日)の値を取得
    if (orderDate instanceof Date) { // 日付型であることを確認
      const tenMonthsLater = new Date(orderDate);
      tenMonthsLater.setMonth(tenMonthsLater.getMonth() + 10); // 10か月後の日付を計算

      if (now > tenMonthsLater) { // 現在の日付が10か月後を過ぎている場合
        const name = row[headers.indexOf('名前')]; // 名前列
        const item = row[headers.indexOf('最終受注項目')]; // 最終受注項目列

        overdueOrders.push(
          `行 ${index + 2}: ${name} - ${formatDate(orderDate)} - ${item}`
        );
      }
    }
  });

  return overdueOrders; // 結果(10か月以上経過した行情報)を返す
}

/**
 * 日付を 'YYYY-MM-DD' 形式にフォーマット
 * @param {Date} date 日付オブジェクト
 * @return {string} フォーマット済みの日付文字列
 */
function formatDate(date) {
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, '0');
  const day = String(date.getDate()).padStart(2, '0');
  return `${year}-${month}-${day}`;
}

/**
 * 10か月以上経過したデータをメールで送信
 * @param {Array} overdueOrders 10か月以上経過した行の情報
 */
function sendOverdueOrdersEmail(overdueOrders) {
  if (overdueOrders.length > 0) {
    let emailAddress = Session.getActiveUser().getEmail(); //自分自身のメールアドレスを取得
    const subject = "10か月以上経過した最終受注日の通知";
    const body = `以下の受注日が10か月以上経過しています:\n\n${overdueOrders.join('\n')}`;

    GmailApp.sendEmail(emailAddress, subject, body);
    Logger.log("メールを送信しました。");
  } else {
    Logger.log("10か月以上経過した受注日はありません。");
  }
}

/**
 * チェックとメール送信を統合的に実行
 */
function notifyOverdueOrders() {
  const overdueOrders = checkOverdueOrders(); // 日付チェックを実行
  sendOverdueOrdersEmail(overdueOrders);       // チェック結果を基にメール送信を実行
}

2. ステップバイステップ解説

  1. スプレッドシートを用意する
    • 「一覧表」という名前のシートを作り、1行目(ヘッダー行)に「名前」「最終受注日」「最終受注項目」などが並ぶようにしておきます。
  1. Apps Scriptエディタを開く
    • スプレッドシートの画面上部メニューの「拡張機能 > Apps Script」をクリックして、GASエディタを開きます。
  2. スクリプトの貼り付け
    • エディタに上記のスクリプトをまるごと貼り付けます。
    • シート名(ここでは ‘一覧表’)やメールアドレスなどを、自分の環境に合わせて修正します。
  3. プロジェクトの保存
    • エディタ画面左上の「保存」ボタン、またはCtrl + Sなどでスクリプトを保存します。
  4. 実行権限の付与
    • 初回実行時には、GmailAppやSpreadsheetAppを使用するための権限が求められます。
    • 認可画面が表示されたら、自分のGoogleアカウントでログインし、権限を許可してください。

実行権限の許可についてはこちらのサイトを参考にしてください。

GoogleAppsScriptでアクセス権限を承認する方法
GoogleAppsScriptでアクセス権限を承認する方法について解説します。無料アカウントの場合と有料アカウントの場合で承認方法が少し変わります。また、どういうときに権限承認を求められるのかについての解説もします。
  1. 動作テスト
    • 「notifyOverdueOrders」関数を実行すると、10か月以上経過したデータを抽出してメール通知します。
    • ログ出力(Logger.log)で確認したいときは、「実行ログ」からメッセージをチェックできます。

3. 注意点とヒント

  • 日付の形式
    • シートに入力する日付は、**Googleスプレッドシートの「日付型」**で管理されている必要があります。テキスト形式だと比較できません。
  • 月の加算
    • 日付オブジェクトの .setMonth() は、月を0~11の範囲で扱うため、getMonth() + 10 で10か月後をセットしています。
  • トリガーの設定
    • 定期的にこのスクリプトを実行する場合は、GASの「トリガー」機能を使って、たとえば毎週や毎月の特定日時に notifyOverdueOrders() を呼び出すように設定すると便利です。

トリガーの設定方法についてはこちらのサイトが参考になります。

Google Apps Scriptのトリガーについて – TD SYNNEX BLOG
Google Apps Script(GAS)は、Googleのさまざまなサービス(Gmail、Google Sheets、Google Driveなど)を自動化するためのスクリプ...
  • メールはログインしているGmailのアドレスに届く
    • このスクリプトによって送信されたメールはログインしているGoogleのアカウント宛にメールが届きます。Gmailを開いて確認してください。 

補足情報

GASとなにか?

Google Apps Script(GAS)は、ひとことで言えばGoogleが提供する各種サービスの自動化/連携を行うためのローコード開発(※1)ツールです。GASを使うと、Gmailやカレンダー、Googleスプレッドシート、Googleドライブなど、Googleが提供する様々なサービス上で処理を自動化したり、複数のサービスを連携させたりできます。

※1:ローコード開発:可能な限りソースコードを書かずにアプリケーションを開発する手法

ExcelやWordなどのMS-Officeツール上でマクロやOfficeスクリプトなどを使ったことのある方は、それらのGoogle版だとイメージしていただければ、あながちはずれではありません。

詳しくは後述しますが、たとえばGoogleスプレッドシート上に設置したボタンのクリックで文字列を一括変換したり、GoogleスプレッドシートのデータをGmailに取り込んでメールを自動作成・送信したりすることが可能です。

【入門】GASとは?できること&活用法を解説(サンプルコード付き)
Google Apps Script(GAS)は、Googleが提供するアプリケーション開発のプラットフォームです。この記事ではGASの基礎を非プログラマーの方にも分かりやすく解説します。※Googleスプレッドシート用サンプルコード付き

このサイトからの引用しました。

要するにGoogleが提供するアプリを操作するプログラム言語です。Googleのアカウントがあれば基本的には無料で使用できます。詳しいことは参考URLを確認してください。

スプレッドシートとは?

Googleが提供しているアプリの一つです。Google版Excelという認識でOKです。

こちらも基本的には無料です。

Google スプレッドシート: オンライン スプレッドシートとテンプレート | Google Workspace
Google スプレッドシートでは、オンライン スプレッドシートを作成できます。あらゆるデバイスからリアルタイムで共同編集できます。また、AI を活用してフォーマットや分析データなどを生成できます。

まとめ

記事の総括

本記事では、Google Apps Script(GAS) を使って、スプレッドシート上の「最終受注日」から10か月以上経過したデータを自動抽出し、メール通知する方法を紹介しました。

  • チェック関数で10か月以上経過しているかどうかを判定
  • メール送信関数で該当データをGmail送信
  • トリガー機能で自動実行することで、業務効率化を図れる

まずは、本記事のコードをコピペして試してみてください。スプレッドシートにサンプルデータを用意して、実際にメールが来るかどうかを確認してください。

Tips: コードを少しずつ改変して「◯か月」や「列名」「メール先アドレス」などを自由にアレンジしてみると、業務に合わせた仕組みづくりがしやすくなります。

コードの細かい解説についてはまた別の記事で紹介したいと思います。


参考資料

【初心者向け】Googleアカウントの作り方・ログイン方法・注意点まとめ
Google アカウントは Gmail や Google カレンダーなど、Google のサービスを利用するために必要不可欠です。Google アカウントは無料で作成可能で、多くの Google サービスへアクセスできます。本記事では Go...
  • GASとは何か?
【入門】GASとは?できること&活用法を解説(サンプルコード付き)
Google Apps Script(GAS)は、Googleが提供するアプリケーション開発のプラットフォームです。この記事ではGASの基礎を非プログラマーの方にも分かりやすく解説します。※Googleスプレッドシート用サンプルコード付き

本記事が、業務管理の効率化に役立つ一助となれば幸いです。ぜひ活用してみてください!

コメント

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