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の特定の条件に一致するメールをスプレッドシートに転記します。
スプレッドシートの指定されたセルに検索条件を入力し、その条件に合致するメールの件名、本文、送信者情報などを取得します。
Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。
上のコードをコピーしてエディタに貼り付けます。
コードを書いたら、名前をつけて保存します。
(例:「Gmail取得」)
スクリプトを実行して、条件に一致するメールを取得します。
初めてそのスクリプトを実行する場合は権限の確認が必要です。
そのため、『権限を確認』を押します。
許可の詳細手順
「詳細」をクリックします。
「無題のプロジェクト(安全ではないページ)に移動」をクリックします。
「許可」をクリックします。
Gmail取得結果
スクリプト実行でスプレッドシート7行目以降に、条件に一致するメールのデータが転記されます
GASを使うメリット
- 作業時間の短縮
スクリプトが実行されると、メールの内容が短時間でスプレッドシートに転記されます。 - ヒューマンエラーの防止
手作業によるコピー&ペーストで発生するミスを防げます。 - 一度設定すれば繰り返し使える
一度スクリプトを設定すれば、以降は簡単にメールを転記できるようになります。
手動でエラーメールの内容をスプレッドシートに転記する場合、毎回メールを開いて、内容をコピーして貼り付ける作業が発生します。
GASを使えば、これらの作業がすべて自動化されるため、時間が大幅に短縮されます。
まとめ
手作業での転記作業には時間がかかりますが、GASを使って自動化することで時間を節約し、他の業務に集中できます。
一度スクリプトを設定しておけば、以降は簡単にスプレッドシートに転記できるため、業務の効率化を図りたい方には特におすすめです。
弊社では、Google Apps Script(GAS)を活用した業務効率化のサポートを提供しております。
GASのカスタマイズやエラー対応にお困りの際は、ぜひお気軽にご相談ください。
また、ITツールの導入支援やIT導入補助金の申請サポートも行っております。
貴方の業務改善を全力でサポートいたします。
コメント