GASで業務効率化!Gmailの内容をスプレッドシートにカンタン転記する方法

Gmailで受け取った情報をスプレッドシートに手作業で転記する場合、時間もかかるうえ面倒に感じることありませんか?

多数あるメールの中から必要な情報だけを得たい時、手作業でコピーして貼り付けるのは業務の効率も下がってしまいます。

この記事では、Google Apps Script(GAS)を使って、Gmailの内容をスプレッドシートに自動で転記する方法をご紹介します。

GASを使うことで作業を効率化し、無駄な時間を削減できるようになります。

目次

完成イメージ

今回の例では、Gmailから条件に合ったエラーメールの取得とし、その内容を転記しています。

件名や本文内のキーワード、取得期間を設定することで、スプレッドシートにメールの日付、送信者、件名、本文、キーワード抽出結果が反映される仕組みです。

スプレッドシートに必要情報の入力

上部の検索条件入力エリア(B1からB4)に、取得したいメールの条件を入力します。

上部の検索条件入力エリア (B1からB4)
B1セルメール件名に含まれるキーワード(例: “エラー”)
B2セルメール本文に含まれるキーワード(例: “メール送信システム”)
B3セル取得するメールの開始日(指定した期間内のメールが抽出される)
B4セル取得するメールの終了日

次に、A列からE列に取得するメールの項目を入力します。

A列からE列
A列メールの日付
B列メール送信者のアドレス
C列メールの件名
D列メール本文
E列本文中にキーワードが含まれている場合、そのキーワードを抽出して表示

検索条件の記入例

  • B1セル:「エラー」
  • B2セル:「メール送信システム」
  • B3セル:検索期間の開始日付「2024/10/04」
  • B4セル:検索期間の終了日「2024/10/10」

Google Apps Script(GAS)の設定

function saveEmailsToSheet() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  // 検索する件名をスプレッドシートのB1セルから取得
  const searchPhrase = sheet.getRange("B1").getValue();
  if (!searchPhrase) {
    Logger.log("検索フレーズが空白です。");
    return; // B1セルが空の場合、処理を中断します。
  }

  // メールの開始期間と終了期間をスプレッドシートのB3、B4セルから取得
  const startDate = new Date(sheet.getRange("B3").getValue());
  const endDate = new Date(sheet.getRange("B4").getValue());
  if (isNaN(startDate.getTime()) || isNaN(endDate.getTime())) {
    Logger.log("開始期間または終了期間が無効です。");
    return; // 期間が無効な場合、処理を中断します。
  }

  // キーワードをスプレッドシートのB2セルから取得
  const keyword = sheet.getRange("B2").getValue();

  // 開始期間と終了期間を含む検索クエリの作成
  const formattedStartDate = Utilities.formatDate(startDate, Session.getScriptTimeZone(), "yyyy/MM/dd");
  const formattedEndDate = Utilities.formatDate(endDate, Session.getScriptTimeZone(), "yyyy/MM/dd");
  const searchQuery = `subject:"${searchPhrase}" after:${formattedStartDate} before:${formattedEndDate}`;

  // メールスレッドを検索
  const threads = GmailApp.search(searchQuery);

  let row = 7; // 7行目からデータを書き込み

  threads.forEach(thread => {
    const messages = thread.getMessages();
    messages.forEach(message => {
      const date = message.getDate();
      const from = message.getFrom();
      const subject = message.getSubject();
      const body = message.getPlainBody();

      // キーワードがメール本文に含まれているかを確認し、含まれていれば抽出
      let keywordExtract = "";
      if (keyword && body.includes(keyword)) {
        keywordExtract = keyword; // キーワードが本文に含まれている場合はそのキーワードを抽出
      }

      // スプレッドシートに書き込む(7行目以降に)
      sheet.getRange(row, 1).setValue(date);
      sheet.getRange(row, 2).setValue(from);
      sheet.getRange(row, 3).setValue(subject);
      sheet.getRange(row, 4).setValue(body);
      sheet.getRange(row, 5).setValue(keywordExtract); // E列にキーワードの抽出結果を記載

      row++;
    });
  });
}
スクリプトの説明
スプレッドシートのシートオブジェクトを取得
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

現在アクティブなスプレッドシートのシートを取得し、以降の操作をそのシートに対して行います。

検索する件名を取得
const searchPhrase = sheet.getRange("B1").getValue();

スプレッドシートのセル「B1」に入力されている件名(検索フレーズ)を取得します。もし空の場合、以下のチェックによって処理を中断します。

開始期間と終了期間を取得
const startDate = new Date(sheet.getRange("B3").getValue());
const endDate = new Date(sheet.getRange("B4").getValue());

セル「B3」と「B4」から、それぞれメールの検索に使用する開始日と終了日を取得します。この期間内のメールが対象になります。無効な日付の場合、スクリプトはここで中断されます。

本文に含まれるキーワードを取得
const keyword = sheet.getRange("B2").getValue();

スプレッドシートのセル「B2」に入力されているキーワードを取得し、このキーワードが本文に含まれているかどうかも後で確認します。

検索クエリの作成
const searchQuery = `subject:"${searchPhrase}" after:${formattedStartDate} before:${formattedEndDate}`;

取得した検索フレーズ、開始日、終了日を使ってGmailの検索クエリを作成します。クエリは「件名」「開始日」「終了日」を基にして、条件に合うメールを探します。

メールスレッドの検索
const threads = GmailApp.search(searchQuery);

検索クエリを使用して、Gmail内で条件に合ったメールスレッド(会話形式のメールの集まり)を検索します。

メールデータの取得とスプレッドシートへの書き込み
threads.forEach(thread => {
  const messages = thread.getMessages();
  messages.forEach(message => {
    const date = message.getDate();
    const from = message.getFrom();
    const subject = message.getSubject();
    const body = message.getPlainBody();

各メールスレッドからすべてのメールメッセージを取得し、そのメッセージから送信日時、送信者、件名、本文を取得します。

キーワードの確認と抽出
let keywordExtract = "";
if (keyword && body.includes(keyword)) {
  keywordExtract = keyword;
}

メールの本文にキーワードが含まれているかどうかを確認し、含まれていれば、そのキーワードを抽出します。

スプレッドシートへのデータ書き込み
sheet.getRange(row, 1).setValue(date);
sheet.getRange(row, 2).setValue(from);
sheet.getRange(row, 3).setValue(subject);
sheet.getRange(row, 4).setValue(body);
sheet.getRange(row, 5).setValue(keywordExtract);

取得したデータをスプレッドシートの行に書き込んでいきます。「日付」「メールアドレス」「件名」「本文」「キーワード抽出結果」がそれぞれの列に順番に書き込まれます。

次の行にデータを入力する準備
row++;

書き込む行を1行ずつ増やして、次のメールのデータを書き込む準備をします。

このスクリプトは、Gmailの特定の条件に一致するメールをスプレッドシートに転記します。

スプレッドシートの指定されたセルに検索条件を入力し、その条件に合致するメールの件名、本文、送信者情報などを取得します。

STEP
GASエディタを開く

Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。

STEP
GASスクリプトの作成

上のコードをコピーしてエディタに貼り付けます。

STEP
スクリプトを保存

コードを書いたら、名前をつけて保存します。

(例:「Gmail取得」)

STEP
スクリプトを実行

スクリプトを実行して、条件に一致するメールを取得します。

初めてそのスクリプトを実行する場合は権限の確認が必要です。

そのため、『権限を確認』を押します。

許可の詳細手順

「詳細」をクリックします。

無題のプロジェクト(安全ではないページ)に移動」をクリックします。

許可」をクリックします。

Gmail取得結果

スクリプト実行でスプレッドシート7行目以降に、条件に一致するメールのデータが転記されます

GASを使うメリット

主なメリット
  • 作業時間の短縮
    スクリプトが実行されると、メールの内容が短時間でスプレッドシートに転記されます。
  • ヒューマンエラーの防止
    手作業によるコピー&ペーストで発生するミスを防げます。
  • 一度設定すれば繰り返し使える
    一度スクリプトを設定すれば、以降は簡単にメールを転記できるようになります。

手動でエラーメールの内容をスプレッドシートに転記する場合、毎回メールを開いて、内容をコピーして貼り付ける作業が発生します。

GASを使えば、これらの作業がすべて自動化されるため、時間が大幅に短縮されます。

まとめ

手作業での転記作業には時間がかかりますが、GASを使って自動化することで時間を節約し、他の業務に集中できます。

一度スクリプトを設定しておけば、以降は簡単にスプレッドシートに転記できるため、業務の効率化を図りたい方には特におすすめです。

弊社では、Google Apps Script(GAS)を活用した業務効率化のサポートを提供しております。

GASのカスタマイズやエラー対応にお困りの際は、ぜひお気軽にご相談ください。

また、ITツールの導入支援やIT導入補助金の申請サポートも行っております。

貴方の業務改善を全力でサポートいたします。

お問い合わせはこちら

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次