GASでSheet.getDataRangeを使ってスプレッドシートのデータを自動メール送信!業務効率化

GASでSheet.getDataRangeを使ってスプレッドシートのデータを自動メール送信!業務効率化

スプレッドシートのデータを自動でメール送信したいと思ったことはありませんか? 本記事では、Google Apps Script (GAS) の Sheet.getDataRange() 関数を使って、スプレッドシートからデータを抽出し、それを自動的にメールで送信する方法を解説します。定期的なレポート送信や、特定の条件を満たすデータの通知など、様々な業務を効率化できます。

Sheet.getDataRange() の基本

Sheet.getDataRange() は、スプレッドシート内でデータが入力されている範囲全体を取得するための関数です。この関数を使うことで、データの範囲を動的に取得できるため、行数や列数が変動する場合でも柔軟に対応できます。

function getDataRangeExample() {
// アクティブなシートを取得
const sheet = SpreadsheetApp.getActiveSheet();

// データ範囲を取得
const range = sheet.getDataRange();

// データ範囲の値を配列として取得
const values = range.getValues();

// 取得したデータをログに出力
Logger.log(values);
}

自動メール送信の実装

ここでは、Sheet.getDataRange() で取得したデータをメールで自動送信する具体的な実装例を紹介します。

実装例1:スプレッドシートの全データを定期的にメール送信

スプレッドシートのデータを毎日決まった時間にメールで送信する例です。

function sendSheetDataDaily() {
// スプレッドシートIDとシート名を設定
const spreadsheetId = "YOUR_SPREADSHEET_ID";
const sheetName = "シート1";

// シートを取得
const sheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName(sheetName);

// データ範囲を取得
const dataRange = sheet.getDataRange();

// データ範囲の値を配列として取得
const values = dataRange.getValues();

// メール本文を作成
let message = "スプレッドシートのデータ:\n";
for (let i = 0; i < values.length; i++) {
message += values[i].join(",") + "\n";
}

// メールを送信
MailApp.sendEmail({
to: "your_email@example.com",
subject: "【日次】スプレッドシートデータ",
body: message,
});
}

カスタマイズ:

  • YOUR_SPREADSHEET_ID を実際のスプレッドシートIDに置き換えてください。
  • シート1 を実際のシート名に置き換えてください。
  • your_email@example.com を送信先のメールアドレスに置き換えてください。
  • トリガーを設定して、毎日決まった時間に実行するように設定してください。(例:毎日9:00)

実装例2:特定の条件を満たすデータのみをメール送信

例えば、「ステータス」列が「未対応」となっている行のみをメールで送信する例です。

function sendUnprocessedData() {
// スプレッドシートIDとシート名を設定
const spreadsheetId = "YOUR_SPREADSHEET_ID";
const sheetName = "シート1";

// シートを取得
const sheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName(sheetName);

// データ範囲を取得
const dataRange = sheet.getDataRange();

// データ範囲の値を配列として取得
const values = dataRange.getValues();

// ヘッダー行をスキップ
const header = values[0];
const data = values.slice(1);

// 「ステータス」列のインデックスを取得
const statusColumnIndex = header.indexOf("ステータス");

// メール本文を作成
let message = "未対応のデータ:\n";
for (let i = 0; i < data.length; i++) {
if (data[i][statusColumnIndex] === "未対応") {
message += data[i].join(",") + "\n";
}
}

// 未対応データが存在する場合のみメールを送信
if (message !== "未対応のデータ:\n") {
MailApp.sendEmail({
to: "your_email@example.com",
subject: "【要対応】未対応データ",
body: message,
});
}
}

カスタマイズ:

  • YOUR_SPREADSHEET_ID を実際のスプレッドシートIDに置き換えてください。
  • シート1 を実際のシート名に置き換えてください。
  • your_email@example.com を送信先のメールアドレスに置き換えてください。
  • "ステータス" を実際のステータス列のヘッダー名に置き換えてください。
  • "未対応" を実際の未対応ステータスに置き換えてください。
  • トリガーを設定して、定期的に実行するように設定してください。(例:毎時0分)

実装例3:指定した範囲のデータをHTML形式でメール送信

特定範囲のデータをテーブル形式のHTMLでメール送信する例です。 見た目を整えたい場合に有効です。

function sendHtmlTableData() {
// スプレッドシートIDとシート名を設定
const spreadsheetId = "YOUR_SPREADSHEET_ID";
const sheetName = "シート1";
const rangeName = "A1:C10"; // 送信したいデータ範囲

// シートを取得
const sheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName(sheetName);

// データ範囲を取得
const range = sheet.getRange(rangeName);

// データ範囲の値を配列として取得
const values = range.getValues();

// HTML形式のテーブルを作成
let htmlTable = "";
for (let i = 0; i < values.length; i++) {
htmlTable += "";
for (let j = 0; j < values[i].length; j++) {
htmlTable += "";
}
htmlTable += "";
}
htmlTable += "
" + values[i][j] + "
";

// メールを送信
MailApp.sendEmail({
to: "your_email@example.com",
subject: "【HTML形式】スプレッドシートデータ",
htmlBody: htmlTable,
});
}

カスタマイズ:

  • YOUR_SPREADSHEET_ID を実際のスプレッドシートIDに置き換えてください。
  • シート1 を実際のシート名に置き換えてください。
  • A1:C10 を実際のデータ範囲に置き換えてください。
  • your_email@example.com を送信先のメールアドレスに置き換えてください。
  • 必要に応じて、テーブルのスタイル(border, styleなど)を調整してください。

よくある問題とトラブルシューティング

  • 権限エラー: GASの実行には、スプレッドシートやメールへのアクセス権が必要です。初回実行時に権限を付与してください。
  • タイムアウト: 大量のデータを処理する場合、GASの実行時間が上限に達してタイムアウトすることがあります。処理するデータ量を減らすか、処理を分割することを検討してください。
  • メールが届かない: 迷惑メールフォルダに振り分けられている可能性があります。送信元メールアドレスを確認し、迷惑メール設定を見直してください。

カスタマイズ方法と応用例

  • メール送信先の動的な変更: スプレッドシートにメールアドレスを記載し、そこから取得して送信先を動的に変更することができます。
  • 添付ファイルの送信: MailApp.sendEmail()attachments オプションを利用して、スプレッドシートのデータをCSVファイルとして添付して送信することができます。
  • エラーハンドリング: try...catch 構文を使用して、エラー発生時の処理を記述することで、より堅牢なスクリプトを作成することができます。

まとめ

Sheet.getDataRange() 関数とGASを組み合わせることで、スプレッドシートのデータを自動的にメール送信し、業務効率を大幅に向上させることができます。本記事で紹介したコード例を参考に、ぜひあなたの業務に合わせた自動化処理を実装してみてください。

PR

CodeCampは、現役エンジニアからマンツーマンで学べるオンラインプログラミングスクールです。WebデザインやWebサービス開発、転職支援など、目的に合わせた多様なコースが選べます。
朝7時〜夜23時40分まで、365日レッスンが受けられるため、忙しい方でも自分のペースで学習を進めることが可能です。通過率8%の厳しい選考を通過した質の高い講師陣が、あなたのキャリアチェンジを強力にサポートします。
さらに、未経験者向けのカリキュラムや、学習開始から20日以内の全額返金保証制度もあるため、プログラミング学習に不安を感じている方でも安心して始めることができます。

CodeCampで理想の働き方を実現しよう