Googleシートマスターのひろしです。
今回は、とっても価値の高い方法をお伝えします。

これを知ることであなたは、
- コピペでGmail内のURLを自動的に抽出することができます。
- トリガーを組み合わせることで、完全自動で取り込むことができます。
なので、サクッとマスターして

と答えてあげてください。
動画はこちら
シートはこちら
新規作成してください

スクリプト
function extractUrlsToSheet() {
const spreadsheetId = 'スプレッドシートID'; // スプレッドシートID
const configSheetName = '設定';
const ss = SpreadsheetApp.openById(spreadsheetId);
let configSheet = ss.getSheetByName(configSheetName);
// 「設定」シートがない場合の初期作成
if (!configSheet) {
configSheet = ss.insertSheet(configSheetName);
configSheet.getRange('A1:B3').setValues([
['書き込みシート名', 'シート1'],
['対象ラベル名', 'ラベル'],
['前回実行時刻', new Date(0)]
]);
SpreadsheetApp.getUi().alert('「設定」シートを作成しました。B列の設定値を確認して再度実行してください。');
return;
}
// 設定シートから各設定値を読み込む
const dataSheetName = configSheet.getRange('B1').getValue();
const labelName = configSheet.getRange('B2').getValue();
const lastProcessedTime = new Date(configSheet.getRange('B3').getValue()).getTime();
let dataSheet = ss.getSheetByName(dataSheetName);
if (!dataSheet) {
SpreadsheetApp.getUi().alert('シート「' + dataSheetName + '」が見つかりません。');
return;
}
const label = GmailApp.getUserLabelByName(labelName);
if (!label) {
Logger.log("ラベル「" + labelName + "」が見つかりませんでした。");
return;
}
let latestTimeInThisRun = lastProcessedTime;
const threads = label.getThreads();
const urlRegExp = /https?:\/\/[\w!?/+\-_~=;.,*&@#$%\(\)'[\]]+/g;
threads.forEach(thread => {
const messages = thread.getMessages();
messages.forEach(message => {
const messageTime = message.getDate().getTime();
// 前回実行時間より新しいメールだけを処理
if (messageTime > lastProcessedTime) {
const body = message.getPlainBody();
const urls = body.match(urlRegExp);
if (urls) {
urls.forEach(url => {
dataSheet.appendRow([message.getDate(), url, message.getSubject()]);
});
}
if (messageTime > latestTimeInThisRun) {
latestTimeInThisRun = messageTime;
}
}
});
});
// 最後に処理した時刻をB3セルに更新
configSheet.getRange('B3').setValue(new Date(latestTimeInThisRun));
}
ポイント
-
自動化の「トリガー」対応 GASのトリガー設定(時間主導型)を使うことで、1時間おきや1日おきなど、完全無人でリストを更新し続けることができます。
-
階層ラベル(ネスト)への対応 Gmailの親ラベルと子ラベルを
/で繋ぐ記述(例:親/子)に対応しており、細かく整理されたメール環境でもそのまま導入可能です。 -
「設定シート」による一元管理 プログラムコードを書き換えなくても、スプレッドシート上のセルを書き換えるだけで「抽出対象のラベル」や「出力先のシート」を変更できる設計にしています。
-
正規表現による正確なURL抽出 メール本文がどれほど長くても、正規表現を用いて
httpまたはhttpsで始まる文字列を瞬時に見つけ出します。 -
二重書き込みの防止 「前回実行した時刻」を記録し、それより後に受信したメールのみを判定対象とするため、同じURLが何度もシートに並ぶのを防ぎます。
注意点
-
半角スペースの有無: Gmail上の表記と1文字でも違うとエラーになるため、もし動かない場合はスペースを消したり、全角・半角を入れ替えたりして試してみてください。
-
親ラベルだけ指定した場合: 親ラベルを書くと、子ラベルに入っているメールは取得されず、親ラベル直下にあるメールのみが対象になります。
使用上の注意点
-
1回あたりの処理上限 Gmailの
getThreads()は一度に取得できるスレッド数に上限(デフォルトで最大500程度)があります。あまりにも大量の過去メールがあるラベルに適用する場合は、初回のみ手動で「前回実行時刻」を調整して少しずつ処理することをお勧めします。 -
スプレッドシートIDの書き換え スクリプト冒頭の
spreadsheetIdだけは、自身のシートURLから正しくコピーして貼り付ける必要があります。 -
権限の承認 初回実行時には、Gmailとスプレッドシートへのアクセスを許可する認証画面が出ます。自分自身で作成したスクリプトなので、内容を確認して承認してください。
-
URLの形式 正規表現で抽出するため、URLの末尾に記号などが含まれている場合、稀に余分な文字を拾うことがあります。運用に合わせて正規表現の微調整が必要になる場合があります。
最後までご覧いただきありがとうございます。
つぎはこちら




コメント