<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>スプレッドシート &#8211; biz-tactics</title>
	<atom:link href="https://mashukabu.com/tag/spreadsheet/feed/" rel="self" type="application/rss+xml" />
	<link>https://mashukabu.com</link>
	<description></description>
	<lastBuildDate>Sat, 13 Jun 2026 01:10:09 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://mashukabu.com/wp-content/uploads/2022/04/cropped-site-icon-32x32.png</url>
	<title>スプレッドシート &#8211; biz-tactics</title>
	<link>https://mashukabu.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【コピペで動く】GASでスプレッドシートから請求書PDFを自動生成してメール送付する方法</title>
		<link>https://mashukabu.com/gas-spreadsheet-invoice-pdf/</link>
					<comments>https://mashukabu.com/gas-spreadsheet-invoice-pdf/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Sat, 13 Jun 2026 01:10:09 +0000</pubDate>
				<category><![CDATA[仕事効率化]]></category>
		<category><![CDATA[GAS]]></category>
		<category><![CDATA[Google Apps Script]]></category>
		<category><![CDATA[スプレッドシート]]></category>
		<category><![CDATA[業務効率化]]></category>
		<category><![CDATA[請求書]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=8028</guid>

					<description><![CDATA[スプレッドシートの請求データをテンプレートに差し込み、GASでPDF化してGmailで自動送付する方法をコピペコード付きで解説。テンプレシートの作り方・PDF変換のURLパラメータ・ファイル名の動的命名・Drive保存まで、毎月の請求書発行を丸ごと自動化します。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">毎月の請求書発行、いまだに1社ずつテンプレートをコピーして、取引先名と金額を打ち替えて、PDFに書き出して、メールに添付して……という手作業を繰り返していませんか。取引先が10社・20社と増えるほど、この単純作業に半日とられてしまいますよね。転記ミスや添付忘れも怖いところです。実はこの一連の流れ、Google Apps Script（GAS）を使えばボタン1つで丸ごと自動化できます。スプレッドシートの請求データをテンプレートに差し込み、PDF化して、Driveに保存して、Gmailで送付するまでを全部やってくれます。この記事では、コピペでそのまま動く完成コードと、つまずきやすいポイントの対処法まで、実務で使える形でまとめました。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-1" checked><label class="toc-title" for="toc-checkbox-1">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">GASで請求書PDFを自動生成する仕組みとは？｜全体の流れを把握する</a><ol><li><a href="#toc2" tabindex="0">必要な前提条件</a></li></ol></li><li><a href="#toc3" tabindex="0">スプレッドシートを準備する｜データシートとテンプレシートを作る</a><ol><li><a href="#toc4" tabindex="0">データシートの作り方</a></li><li><a href="#toc5" tabindex="0">テンプレートシートの作り方</a></li></ol></li><li><a href="#toc6" tabindex="0">請求書PDFを自動生成するGASコード【コピペOK】</a><ol><li><a href="#toc7" tabindex="0">差し込みとPDF変換の関数を追加する</a></li></ol></li><li><a href="#toc8" tabindex="0">PDF変換のURLパラメータを使いこなす｜余白・向き・範囲を制御する</a></li><li><a href="#toc9" tabindex="0">ファイル名を動的に付ける｜日付と取引先名で自動命名する</a></li><li><a href="#toc10" tabindex="0">Drive保存とGmail送信を組み込む｜送付まで全自動にする</a><ol><li><a href="#toc11" tabindex="0">実行ボタンを付けて誰でも使えるようにする</a></li></ol></li><li><a href="#toc12" tabindex="0">うまくいかないときの対処法｜よくあるトラブルと解決策</a><ol><li><a href="#toc13" tabindex="0">2社目から差し込みがされない・プレースホルダーが残る</a></li><li><a href="#toc14" tabindex="0">「承認が必要です」と表示されて実行できない</a></li><li><a href="#toc15" tabindex="0">PDFの一部が切れる・2ページに分かれてしまう</a></li><li><a href="#toc16" tabindex="0">スクリプトの実行時間が長すぎてエラーになる</a></li></ol></li><li><a href="#toc17" tabindex="0">まとめ｜請求書発行を丸ごと自動化して毎月の手間を消す</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">GASで請求書PDFを自動生成する仕組みとは？｜全体の流れを把握する</span></h2>



<p class="wp-block-paragraph">最初に、これから作るものの全体像をつかんでおきましょう。やっていることはシンプルで、次の5ステップを GAS が順番に実行するだけです。</p>



<ol class="wp-block-list"><li>請求データ（取引先・品目・金額）が並んだ「データシート」を1行ずつ読み込む</li><li>レイアウトを整えた「テンプレートシート」にその値を差し込む</li><li>テンプレートシートをPDFに変換する</li><li>PDFをGoogle Driveの指定フォルダに保存する</li><li>取引先のメールアドレス宛にPDFを添付してGmailで送信する</li></ol>



<p class="wp-block-paragraph">ちょっとむずかしく見えますが、やっていることはシンプルです。「スプレッドシートを差し込み印刷して、PDFにして、メールで送る」という、ふだん手作業でやっていることをそのままコードにしただけなんです。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE: GASは追加費用ゼロで使えます</strong><br>GAS（Google Apps Script）はGoogleが提供する無料のスクリプト環境で、JavaScriptに似た言語で書きます。Googleアカウントさえあれば、インストール不要でブラウザ上のエディタからすぐに使えます。基本操作に不安がある方は<a href="https://mashukabu.com/spreadsheet-gas-getting-started-recipes/">GAS入門記事</a>を先に読んでおくと、この記事がスムーズに理解できます。</p></blockquote>



<h3 class="wp-block-heading"><span id="toc2">必要な前提条件</span></h3>



<p class="wp-block-paragraph">実装を始める前に、次のものを準備しておいてください。</p>



<ul class="wp-block-list"><li>Googleアカウント（無料のもので問題ありません）</li><li>編集権限のあるGoogleスプレッドシート1つ</li><li>請求書PDFを保存するGoogle Driveのフォルダ1つ</li><li>取引先のメールアドレスが分かっていること（自動送信する場合）</li></ul>



<p class="wp-block-paragraph">特別な有料サービスやプラグインは一切不要です。すべてGoogle標準の機能だけで完結します。</p>



<h2 class="wp-block-heading"><span id="toc3">スプレッドシートを準備する｜データシートとテンプレシートを作る</span></h2>



<p class="wp-block-paragraph">GASを書く前に、土台となるスプレッドシートを整えます。1つのスプレッドシートの中に「データシート」と「テンプレートシート」という2枚のシートを用意するのがポイントです。</p>



<h3 class="wp-block-heading"><span id="toc4">データシートの作り方</span></h3>



<p class="wp-block-paragraph">まず1枚目に、請求データを並べる「データ」という名前のシートを作ります。1行目を見出しにして、2行目以降に取引先ごとのデータを1行ずつ入れていきます。</p>



<figure class="wp-block-table"><table><thead><tr><th>取引先名</th><th>メールアドレス</th><th>品目</th><th>金額</th></tr></thead><tbody><tr><td>株式会社サンプル</td><td>sample@example.com</td><td>Webサイト保守</td><td>50000</td></tr><tr><td>田中商事株式会社</td><td>tanaka@example.com</td><td>コンサルティング</td><td>120000</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">金額の列は、カンマ区切りの文字列ではなく<strong>数値のまま</strong>入れておきましょう。あとでコード側で <code>toLocaleString()</code> を使ってカンマ表示に整えるので、ここでは生の数値にしておくのがポイントです。</p>



<h3 class="wp-block-heading"><span id="toc5">テンプレートシートの作り方</span></h3>



<p class="wp-block-paragraph">次に2枚目に、請求書のレイアウトを整えた「テンプレート」という名前のシートを作ります。ここは実際の請求書として見栄えするように、セルの結合や罫線、フォントサイズを調整してデザインします。</p>



<p class="wp-block-paragraph">差し込みたい場所には、あとでGASが置き換えるための<strong>目印（プレースホルダー）</strong>を入れておきます。たとえば次のように書いておきます。</p>



<ul class="wp-block-list"><li>宛名のセル: <code>{{取引先名}} 御中</code></li><li>品目のセル: <code>{{品目}}</code></li><li>金額のセル: <code>{{金額}}</code></li><li>発行日のセル: <code>{{発行日}}</code></li></ul>



<p class="wp-block-paragraph">このように <code>{{ }}</code> で囲んだ文字列を目印にしておけば、GASが「この目印を見つけたら、データシートの値に置き換える」という処理をしてくれます。Word差し込み印刷の差し込みフィールドと同じ発想ですね。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE: 印刷範囲を意識してレイアウトする</strong><br>テンプレートシートはそのままPDFになります。A4縦1枚にきれいに収まるよう、列幅と行の高さを調整しておきましょう。余計な列や行が広がっていると、PDFに余白として写り込んでしまいます。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc6">請求書PDFを自動生成するGASコード【コピペOK】</span></h2>



<p class="wp-block-paragraph">それでは本体のコードです。スプレッドシートのメニューから「拡張機能」→「Apps Script」を開き、エディタに次のコードを貼り付けてください。</p>



<pre class="wp-block-code"><code>function createInvoicePdf() {
  // --- 設定（ここだけ自分の環境に合わせて変更）---
  const DATA_SHEET_NAME = 'データ';        // データシートの名前
  const TEMPLATE_SHEET_NAME = 'テンプレート'; // テンプレシートの名前
  const SAVE_FOLDER_ID = 'ここにDriveフォルダのIDを貼る'; // PDF保存先フォルダ
  const SEND_MAIL = false; // true にするとメール送信も実行する

  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const dataSheet = ss.getSheetByName(DATA_SHEET_NAME);
  const templateSheet = ss.getSheetByName(TEMPLATE_SHEET_NAME);
  const saveFolder = DriveApp.getFolderById(SAVE_FOLDER_ID);

  // データシートを2行目から最終行まで読み込む
  const lastRow = dataSheet.getLastRow();
  const data = dataSheet.getRange(2, 1, lastRow - 1, 4).getValues();

  // 発行日（今日の日付）を「2026年6月8日」形式で作る
  const today = new Date();
  const issueDate = Utilities.formatDate(today, 'JST', 'yyyy年M月d日');

  // 1行ずつ処理する
  data.forEach(function(row) {
    const clientName = row[0]; // 取引先名
    const email = row[1];      // メールアドレス
    const item = row[2];       // 品目
    const amount = row[3];     // 金額

    if (!clientName) return; // 取引先名が空の行はスキップ

    // テンプレートに差し込む
    fillTemplate(templateSheet, {
      '{{取引先名}}': clientName,
      '{{品目}}': item,
      '{{金額}}': '¥' + Number(amount).toLocaleString(),
      '{{発行日}}': issueDate
    });

    // 差し込み結果を確実に反映させる
    SpreadsheetApp.flush();

    // テンプレシートをPDFに変換する
    const fileName = issueDate.replace(/[年月]/g, '-').replace('日', '')
      + '_' + clientName + '_請求書.pdf';
    const pdfBlob = exportSheetAsPdf(ss, templateSheet, fileName);

    // Driveに保存する
    const pdfFile = saveFolder.createFile(pdfBlob);

    // メール送信する（SEND_MAIL が true のときだけ）
    if (SEND_MAIL &amp;&amp; email) {
      sendInvoiceMail(email, clientName, pdfFile.getBlob());
    }

    Logger.log(clientName + ' のPDFを作成しました: ' + pdfFile.getUrl());
  });
}</code></pre>



<p class="wp-block-paragraph">このコードは「設定」の部分だけ自分の環境に合わせれば、あとはそのまま動きます。それぞれの値を順番に説明します。</p>



<ul class="wp-block-list"><li><code>DATA_SHEET_NAME</code>: 請求データを入れたシートの名前</li><li><code>TEMPLATE_SHEET_NAME</code>: 請求書レイアウトのシートの名前</li><li><code>SAVE_FOLDER_ID</code>: PDFを保存したいDriveフォルダのID（次の項目で取得方法を説明します）</li><li><code>SEND_MAIL</code>: 最初は <code>false</code> のままにして、PDF生成だけテストしてから <code>true</code> に切り替えるのが安全です</li></ul>



<h3 class="wp-block-heading"><span id="toc7">差し込みとPDF変換の関数を追加する</span></h3>



<p class="wp-block-paragraph">上のコードから呼び出している補助関数を、同じファイルの下に続けて貼り付けます。</p>



<pre class="wp-block-code"><code>// テンプレートのプレースホルダーを実際の値に置き換える
function fillTemplate(sheet, replaceMap) {
  const range = sheet.getDataRange();
  const values = range.getValues();

  for (let r = 0; r &lt; values.length; r++) {
    for (let c = 0; c &lt; values[r].length; c++) {
      let cell = values[r][c];
      if (typeof cell === 'string') {
        for (const key in replaceMap) {
          if (cell.indexOf(key) !== -1) {
            cell = cell.split(key).join(replaceMap[key]);
          }
        }
        values[r][c] = cell;
      }
    }
  }
  range.setValues(values);
}</code></pre>



<p class="wp-block-paragraph">ここで注意したいのは、<code>fillTemplate</code> でテンプレートシートの値を<strong>直接書き換えている</strong>点です。1社目の差し込みで <code>{{取引先名}}</code> が実際の名前に変わってしまうと、2社目では目印が見つからなくなってしまいます。これを防ぐ仕組みは、このあと「うまくいかないときの対処法」で解説します。</p>



<h2 class="wp-block-heading"><span id="toc8">PDF変換のURLパラメータを使いこなす｜余白・向き・範囲を制御する</span></h2>



<p class="wp-block-paragraph">GASでスプレッドシートをPDF化するときは、Googleの<strong>エクスポート用URL</strong>にアクセスして変換します。このURLにパラメータを付けることで、用紙の向きや余白、印刷範囲を細かく指定できるのがポイントです。</p>



<pre class="wp-block-code"><code>// 指定したシートだけをPDFに変換する
function exportSheetAsPdf(ss, sheet, fileName) {
  const ssId = ss.getId();
  const gid = sheet.getSheetId();

  // エクスポート用URLとパラメータ
  const url = 'https://docs.google.com/spreadsheets/d/' + ssId
    + '/export?'
    + 'format=pdf'        // PDF形式で出力
    + '&amp;gid=' + gid       // 対象シートのID
    + '&amp;portrait=true'    // 縦向き（横向きは false）
    + '&amp;size=A4'          // 用紙サイズ
    + '&amp;fitw=true'        // 幅をページに合わせる
    + '&amp;gridlines=false'  // 枠線（グリッド線）を非表示
    + '&amp;sheetnames=false' // シート名を非表示
    + '&amp;printtitle=false' // ファイル名を非表示
    + '&amp;top_margin=0.5'   // 上余白（インチ）
    + '&amp;bottom_margin=0.5'
    + '&amp;left_margin=0.5'
    + '&amp;right_margin=0.5';

  // 認証トークンを付けてアクセスする
  const token = ScriptApp.getOAuthToken();
  const response = UrlFetchApp.fetch(url, {
    headers: { 'Authorization': 'Bearer ' + token }
  });

  // PDFのデータ（Blob）にファイル名を付けて返す
  return response.getBlob().setName(fileName);
}</code></pre>



<p class="wp-block-paragraph">主要なURLパラメータの意味を整理しておきます。請求書の見た目を調整したいときは、ここを書き換えてください。</p>



<ul class="wp-block-list"><li><code>format=pdf</code>: 出力形式。PDFのほかに <code>xlsx</code> や <code>csv</code> も指定できます</li><li><code>gid</code>: PDF化したいシートのID。<code>sheet.getSheetId()</code> で取得します</li><li><code>portrait</code>: <code>true</code> で縦向き、<code>false</code> で横向き</li><li><code>gridlines</code>: <code>false</code> にすると、セルの枠線（グリッド線）が消えてすっきりします</li><li><code>fitw</code>: <code>true</code> にすると、列がページ幅に収まるよう自動調整されます</li><li><code>top_margin</code> などの余白: インチ単位で指定します（0.5でだいたい1.3cm程度）</li></ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE: gid はシートのURLで確認できる</strong><br>シートのIDは、対象シートを開いたときのURL末尾 <code>#gid=0</code> の数字部分です。コードでは <code>getSheetId()</code> を使って自動取得するので手入力は不要ですが、仕組みを知っておくと応用が利きます。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc9">ファイル名を動的に付ける｜日付と取引先名で自動命名する</span></h2>



<p class="wp-block-paragraph">請求書PDFは、あとから探しやすいファイル名にしておくことが大切です。本体コードでは、次のようにファイル名を組み立てていました。</p>



<pre class="wp-block-code"><code>const fileName = issueDate.replace(/[年月]/g, '-').replace('日', '')
  + '_' + clientName + '_請求書.pdf';</code></pre>



<p class="wp-block-paragraph">これで「2026-6-8_株式会社サンプル_請求書.pdf」のような名前が自動で付きます。日付が先頭にあると、フォルダ内で日付順に並ぶので管理がラクになりますよ。</p>



<p class="wp-block-paragraph">請求書番号を入れたい場合は、データシートに「請求番号」の列を追加して、次のように組み込むと便利です。</p>



<pre class="wp-block-code"><code>// 例: INV-2026-001 のような請求番号を先頭に付ける
const invoiceNo = row[4]; // データシートの5列目に請求番号があると仮定
const fileName = invoiceNo + '_' + clientName + '_請求書.pdf';</code></pre>



<p class="wp-block-paragraph">ファイル名に使えない記号（<code>/</code> や <code>:</code> など）が取引先名に含まれる場合は、<code>replace()</code> で除去しておくと安全です。</p>



<pre class="wp-block-code"><code>const safeName = clientName.replace(/[\/:*?&quot;&lt;&gt;|]/g, '');</code></pre>



<h2 class="wp-block-heading"><span id="toc10">Drive保存とGmail送信を組み込む｜送付まで全自動にする</span></h2>



<p class="wp-block-paragraph">ここまでで「PDFを作ってDriveに保存する」までができました。最後に、そのPDFをGmailで取引先に送る関数を追加します。</p>



<pre class="wp-block-code"><code>// 請求書PDFをメールに添付して送信する
function sendInvoiceMail(email, clientName, pdfBlob) {
  const subject = clientName + ' 御中｜請求書のご送付';
  const body = clientName + ' 御中nn'
    + 'いつもお世話になっております。n'
    + '今月分の請求書をお送りいたします。n'
    + '添付のPDFをご確認のうえ、お手続きをお願いいたします。nn'
    + '何卒よろしくお願い申し上げます。';

  GmailApp.sendEmail(email, subject, body, {
    attachments: [pdfBlob],
    name: '請求担当'
  });
}</code></pre>



<p class="wp-block-paragraph"><code>GmailApp.sendEmail()</code> の <code>attachments</code> オプションにPDFのBlobを渡すだけで、添付ファイル付きメールが送れます。差出人の表示名は <code>name</code> で変えられるので、会社名や担当部署を入れておくと親切です。</p>



<p class="wp-block-paragraph">メール本文を取引先ごとに個別化したり、HTMLメールで送りたい場合は、<a href="https://mashukabu.com/spreadsheet-gmail-batch-send-gas/">スプレッドシートからGmailを一括送信する方法</a>で差し込みメールのテクニックを詳しく解説しているので、あわせて読んでみてください。</p>



<h3 class="wp-block-heading"><span id="toc11">実行ボタンを付けて誰でも使えるようにする</span></h3>



<p class="wp-block-paragraph">毎月使うものなので、スプレッドシートにカスタムメニューを追加して、ワンクリックで実行できるようにしておきましょう。</p>



<pre class="wp-block-code"><code>// スプレッドシートを開いたときにメニューを追加する
function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu('請求書ツール')
    .addItem('請求書PDFを作成', 'createInvoicePdf')
    .addToUi();
}</code></pre>



<p class="wp-block-paragraph">このコードを保存してスプレッドシートを開き直すと、メニューバーに「請求書ツール」という項目が増えます。あとはそこから「請求書PDFを作成」を選ぶだけで、全自動で処理が走ります。</p>



<h2 class="wp-block-heading"><span id="toc12">うまくいかないときの対処法｜よくあるトラブルと解決策</span></h2>



<p class="wp-block-paragraph">実装中につまずきやすいポイントと、その解決策をまとめました。エラーが出ても落ち着いて確認してください。</p>



<h3 class="wp-block-heading"><span id="toc13">2社目から差し込みがされない・プレースホルダーが残る</span></h3>



<p class="wp-block-paragraph">一番ハマりやすいのがこれです。前述のとおり、<code>fillTemplate</code> がテンプレートシートを直接書き換えるため、1社目の処理で <code>{{取引先名}}</code> が消えてしまうのが原因です。</p>



<p class="wp-block-paragraph">解決策は、<strong>毎回テンプレートシートを元の状態に戻す</strong>ことです。テンプレートを別シートとして複製してから差し込み、PDF化後に削除する方法が確実です。本体コードの差し込み部分を次のように書き換えてください。</p>



<pre class="wp-block-code"><code>data.forEach(function(row) {
  // ...（変数の取り出しは同じ）...

  // テンプレートをコピーして作業用シートを作る
  const workSheet = templateSheet.copyTo(ss).setName('_work');

  fillTemplate(workSheet, {
    '{{取引先名}}': clientName,
    '{{品目}}': item,
    '{{金額}}': '¥' + Number(amount).toLocaleString(),
    '{{発行日}}': issueDate
  });
  SpreadsheetApp.flush();

  // 作業用シートをPDF化
  const pdfBlob = exportSheetAsPdf(ss, workSheet, fileName);
  saveFolder.createFile(pdfBlob);

  // 作業用シートを削除して元に戻す
  ss.deleteSheet(workSheet);
});</code></pre>



<p class="wp-block-paragraph">これなら原本のテンプレートは触らないので、何社処理しても目印が消えません。</p>



<h3 class="wp-block-heading"><span id="toc14">「承認が必要です」と表示されて実行できない</span></h3>



<p class="wp-block-paragraph">GASが初めてDriveやGmailにアクセスするときは、Googleの<strong>認可（承認）</strong>が必要です。実行時に出るダイアログで「権限を確認」→自分のアカウントを選択→「詳細」→「（プロジェクト名）に移動」→「許可」の順に進めば承認できます。これは初回だけの操作です。</p>



<h3 class="wp-block-heading"><span id="toc15">PDFの一部が切れる・2ページに分かれてしまう</span></h3>



<p class="wp-block-paragraph">テンプレートシートの内容がA4の1枚に収まっていないのが原因です。次の点を確認してください。</p>



<ul class="wp-block-list"><li>テンプレートシートの列幅を狭めて、横幅をA4内に収める</li><li>不要な列・行が広がっていないか確認する</li><li>URLパラメータに <code>fitw=true</code>（幅をページに合わせる）を入れる</li><li>それでも収まらなければ <code>portrait=false</code> で横向きにする</li></ul>



<h3 class="wp-block-heading"><span id="toc16">スクリプトの実行時間が長すぎてエラーになる</span></h3>



<p class="wp-block-paragraph">GASには1回あたり6分という実行時間の上限があります。取引先が数十社を超えて時間切れになる場合は、処理する行数を分割したり、<code>Utilities.sleep()</code> の不要な待機を入れていないか確認しましょう。請求業務に複数のGAS自動化を組み合わせたい方は、<a href="https://mashukabu.com/gas-deadline-reminder-alert/">GASで締め切りリマインダーを自動通知する方法</a>も参考になります。</p>



<h2 class="wp-block-heading"><span id="toc17">まとめ｜請求書発行を丸ごと自動化して毎月の手間を消す</span></h2>



<p class="wp-block-paragraph">GASを使えば、スプレッドシートの請求データから、PDF生成・Drive保存・メール送付までを全自動にできます。一度コードを組んでしまえば、翌月からはデータシートを更新してボタンを押すだけです。半日かかっていた請求業務が、文字どおり数分で終わるようになります。</p>



<p class="wp-block-paragraph">最後に、実装のポイントを振り返っておきましょう。</p>



<ul class="wp-block-list"><li>データシートとテンプレートシートを分けて作る</li><li>テンプレートには <code>{{取引先名}}</code> などの目印を置く</li><li>PDF変換はエクスポート用URLにパラメータを付けて制御する</li><li>ファイル名は日付と取引先名で動的に命名する</li><li>2社目以降の差し込みは「テンプレートを複製してから差し込む」で解決する</li></ul>



<p class="wp-block-paragraph">まずは <code>SEND_MAIL</code> を <code>false</code> にしたまま、PDF生成だけテストしてみてください。狙いどおりのPDFができることを確認してから、メール送信を有効にするのが安全な進め方です。GASをもっと活用したい方は、<a href="https://mashukabu.com/gas-form-reservation-google-calendar/">予約フォームとGoogleカレンダーを連携する方法</a>など、ほかの自動化レシピもぜひ試してみてください。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/gas-spreadsheet-invoice-pdf/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>スプレッドシートでガントチャートを作る方法｜条件付き書式で自動色付け</title>
		<link>https://mashukabu.com/spreadsheet-gantt-chart/</link>
					<comments>https://mashukabu.com/spreadsheet-gantt-chart/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Fri, 12 Jun 2026 22:00:27 +0000</pubDate>
				<category><![CDATA[Googleスプレッドシート]]></category>
		<category><![CDATA[IF関数]]></category>
		<category><![CDATA[ガントチャート]]></category>
		<category><![CDATA[スプレッドシート]]></category>
		<category><![CDATA[プロジェクト管理]]></category>
		<category><![CDATA[条件付き書式]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=8011</guid>

					<description><![CDATA[専用ツールなしでスプレッドシートとIF関数・条件付き書式だけでガントチャートを作る方法を解説。日付入力でセルを自動塗りつぶしする仕組みから進捗率の色分けまで手順形式で紹介します。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">スプレッドシートでガントチャートを作りたいけれど、専用ツールを増やすのは面倒ですよね。実はIF関数と条件付き書式だけで、日付を入れるだけでバーが伸びるガントチャートが作れます。この記事では、自動色付けの仕組みを5ステップで組み立てる手順を紹介します。あわせて進捗率表示・メンバー別の色分け・タイムラインビューとの使い分けまで一気通貫で解説します。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">ガントチャートとは？スプレッドシートで作るメリット</a></li><li><a href="#toc2" tabindex="0">完成イメージ：開始日入力でバーが自動で伸びる仕組み</a></li><li><a href="#toc3" tabindex="0">【基本編】スプレッドシートでガントチャートを作る5ステップ</a><ol><li><a href="#toc4" tabindex="0">ステップ1: タスク一覧表を作る</a></li><li><a href="#toc5" tabindex="0">ステップ2: タイムライン領域（日付ヘッダー）を作る</a></li><li><a href="#toc6" tabindex="0">ステップ3: 条件付き書式でセルを自動色付けする</a></li><li><a href="#toc7" tabindex="0">ステップ4: 完成サンプルの数式と動作確認</a></li><li><a href="#toc8" tabindex="0">ステップ5: テンプレ化と微調整</a></li></ol></li><li><a href="#toc9" tabindex="0">【応用編】進捗率を表示するガントチャートに進化させる</a><ol><li><a href="#toc10" tabindex="0">進捗率列の追加</a></li><li><a href="#toc11" tabindex="0">条件付き書式を2ルール作る</a></li><li><a href="#toc12" tabindex="0">ルールの優先順位を整える</a></li></ol></li><li><a href="#toc13" tabindex="0">【応用編】メンバー別・タスク種別に色分けする方法</a><ol><li><a href="#toc14" tabindex="0">担当者列の追加</a></li><li><a href="#toc15" tabindex="0">担当者ごとに条件付き書式ルールを追加</a></li></ol></li><li><a href="#toc16" tabindex="0">タイムラインビュー（新機能）との使い分け</a><ol><li><a href="#toc17" tabindex="0">タイムラインビューの使い方（簡単な紹介）</a></li><li><a href="#toc18" tabindex="0">条件付き書式方式との比較</a></li><li><a href="#toc19" tabindex="0">使い分けの目安</a></li></ol></li><li><a href="#toc20" tabindex="0">ガントチャート運用でよくあるトラブルと対処法</a><ol><li><a href="#toc21" tabindex="0">トラブル1: 色が塗られない</a></li><li><a href="#toc22" tabindex="0">トラブル2: 進捗率の濃淡が想定通りにならない</a></li><li><a href="#toc23" tabindex="0">トラブル3: 列を増やすたびに数式を作り直す必要がある</a></li><li><a href="#toc24" tabindex="0">トラブル4: 週末・祝日をグレーアウトしたい</a></li><li><a href="#toc25" tabindex="0">トラブル5: 遅延しているタスクをハイライトしたい</a></li><li><a href="#toc26" tabindex="0">トラブル6: タスクが多くて見づらい</a></li></ol></li><li><a href="#toc27" tabindex="0">関連記事</a></li><li><a href="#toc28" tabindex="0">まとめ：スプレッドシートのガントチャートはここまでできる</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">ガントチャートとは？スプレッドシートで作るメリット</span></h2>



<p class="wp-block-paragraph">ガントチャートとは、プロジェクトのタスクごとに「いつ始めて、いつ終わるか」を横棒で可視化した図表です。1910年代にヘンリー・ガントが考案したもので、いまも工程管理・進捗管理の定番として使われています。</p>



<p class="wp-block-paragraph">スプレッドシートでガントチャートを作るメリットは、大きく3つあります。</p>



<ul class="wp-block-list"><li><strong>追加コストがゼロ</strong>: JootoやAsanaのような専用ツールを契約しなくても、Googleアカウントさえあれば無料で使えます。</li><li><strong>自由にカスタマイズできる</strong>: 列の追加、色のルール、進捗率の計算式など、業務に合わせて細かく調整できますよ。</li><li><strong>チーム共有が簡単</strong>: シートのリンクを共有すれば、リアルタイムで複数人が見られます。</li></ul>



<p class="wp-block-paragraph">逆に、スケジュールの規模が数百タスクを超える場合や、依存関係を厳密に管理したい場合は専用ツールのほうが向いています。中小規模のプロジェクトや個人のタスク管理には、スプレッドシートのガントチャートで十分な機能を実現できますよ。</p>



<h2 class="wp-block-heading"><span id="toc2">完成イメージ：開始日入力でバーが自動で伸びる仕組み</span></h2>



<p class="wp-block-paragraph">これから作るガントチャートの完成イメージを、最初に共有しておきますね。</p>



<ul class="wp-block-list"><li><strong>左側のテーブル</strong>: タスク名・開始日・終了日・担当者・進捗率を入力する一覧</li><li><strong>右側のタイムライン</strong>: 日付ヘッダーが横に並び、タスクの開始日〜終了日の範囲だけセルが自動で塗りつぶされる</li></ul>



<p class="wp-block-paragraph">つまり、左側に日付を入力するだけで、右側の対応するセルが自動的に色付きバーになる仕組みです。手動でセルを塗る必要はありません。これを実現するのが「IF関数 + 条件付き書式」のカスタム数式です。</p>



<p class="wp-block-paragraph">仕組みを噛み砕くと、こうなります。タイムラインの各セルが、自分の真上にある日付ヘッダーを見て、「自分はこのタスク行の開始日〜終了日の範囲内か？」を判定する仕組みです。範囲内ならTRUEを返し、TRUEのセルだけを条件付き書式で塗りつぶします。</p>



<p class="wp-block-paragraph">それではここから、5ステップで実装していきましょう。</p>



<h2 class="wp-block-heading"><span id="toc3">【基本編】スプレッドシートでガントチャートを作る5ステップ</span></h2>



<h3 class="wp-block-heading"><span id="toc4">ステップ1: タスク一覧表を作る</span></h3>



<p class="wp-block-paragraph">最初に、タスクを管理するためのテーブルを左側に作ります。最低限必要な列は4つです。</p>



<figure class="wp-block-table"><table><thead><tr><th>列</th><th>内容</th><th>例</th></tr></thead><tbody><tr><td>A列</td><td>タスク名</td><td>要件定義、設計、実装</td></tr><tr><td>B列</td><td>開始日</td><td>2026/04/01</td></tr><tr><td>C列</td><td>終了日</td><td>2026/04/10</td></tr><tr><td>D列</td><td>進捗率（応用編で使用）</td><td>50（%）</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">開始日と終了日は必ず「日付型」で入力してください。文字列で入力すると、後の数式が動かなくなります。セルを選択して「表示形式 → 数値 → 日付」を確認しておくと安心ですよ。</p>



<p class="wp-block-paragraph">担当者列やフェーズ列は、応用編で色分けに使うので、用意しておいて損はありません。E列に担当者、F列に進捗率という配置でもOKです。本記事ではA〜D列の例で進めます。</p>



<h3 class="wp-block-heading"><span id="toc5">ステップ2: タイムライン領域（日付ヘッダー）を作る</span></h3>



<p class="wp-block-paragraph">次に、右側のタイムライン領域を準備します。E列以降に日付ヘッダーを横方向に並べます。</p>



<ul class="wp-block-list"><li>E1セル: タスクの最も早い開始日（例: <code>2026/04/01</code>）</li><li>F1セル: <code>=E1+1</code></li><li>以降、F1をドラッグでコピーして必要な日数分まで伸ばす</li></ul>



<p class="wp-block-paragraph">これで、E1から右に向かって日付が1日ずつ増えていきます。プロジェクトが3か月なら90日分、1年なら365日分の列を作っておきます。</p>



<p class="wp-block-paragraph">最初は広めに作っておきましょう。後で増やすこともできますが、最初から余裕を持たせるほうが楽ですよ。</p>



<p class="wp-block-paragraph">ヘッダー行が長くなると見づらいので、表示形式を「M/D」（月/日）に変えると見やすくなります。E1〜AH1あたりまで選択して、表示形式 → 数値 → 「カスタム日付と時刻」で <code>M/D</code> を指定してください。</p>



<h3 class="wp-block-heading"><span id="toc6">ステップ3: 条件付き書式でセルを自動色付けする</span></h3>



<p class="wp-block-paragraph">ここがガントチャートの核心です。タイムライン領域（E2:AH100など）に、IF関数のロジックをカスタム数式として登録します。</p>



<h4 class="wp-block-heading">設定手順</h4>



<ol class="wp-block-list"><li>タイムライン領域を選択（例: <code>E2:AH100</code>）</li><li>メニュー「表示形式」→「条件付き書式」</li><li>「書式ルール」のドロップダウンで <strong>カスタム数式</strong> を選ぶ</li><li>カスタム数式欄に以下を入力</li></ol>



<pre class="wp-block-code"><code>=AND(E$1&gt;=$B2, E$1&lt;=$C2)</code></pre>



<ol class="wp-block-list"><li>書式設定スタイルで好きな塗りつぶし色を選ぶ（例: 青系）</li><li>「完了」をクリック</li></ol>



<p class="wp-block-paragraph">これで、タイムライン領域のうち、開始日〜終了日の範囲内の日付セルだけが自動的に塗られます。</p>



<h4 class="wp-block-heading">数式の意味を1行ずつ解説</h4>



<pre class="wp-block-code"><code>=AND(E$1&gt;=$B2, E$1&lt;=$C2)</code></pre>



<ul class="wp-block-list"><li><strong><code>E$1</code></strong>: 自分のセルの真上にある日付ヘッダー。<code>E</code> には<code>$</code>を付けない（列は相対参照）、<code>1</code>には<code>$</code>を付ける（行は絶対参照）</li><li><strong><code>$B2</code></strong>: 自分の行のB列にある開始日。<code>B</code>には<code>$</code>を付ける（列は絶対参照）、<code>2</code>には<code>$</code>を付けない（行は相対参照）</li><li><strong><code>$C2</code></strong>: 自分の行のC列にある終了日。<code>B</code>と同じく列だけ固定</li><li><strong><code>AND(...)</code></strong>: 「日付ヘッダー >= 開始日」かつ「日付ヘッダー <= 終了日」が両方TRUEならTRUEを返す</li></ul>



<p class="wp-block-paragraph">つまり「自分の真上の日付」と「自分の行の開始日・終了日」を比較し、範囲内ならTRUEになります。条件付き書式の数式は、適用範囲の左上セル（ここではE2）を基準に相対展開される仕様です。だからこの1つの数式だけで、範囲内のすべてのセルで正しい比較が行われますよ。</p>



<p class="wp-block-paragraph">絶対参照（<code>$</code>）の付け方を間違えると色が塗られません。「行に固定したいか、列に固定したいか」を意識して<code>$</code>を配置するのがコツですよ。</p>



<p class="wp-block-paragraph">カスタム数式や条件付き書式の基本的な仕組みは<a href="spreadsheet-conditional-formatting">スプレッドシートの条件付き書式の使い方</a>で詳しく解説しています。迷ったらそちらを参照してみてください。同じくIF関数の基本構文は<a href="spreadsheet-if-function">スプレッドシートのIF関数の使い方</a>が参考になりますよ。</p>



<h3 class="wp-block-heading"><span id="toc7">ステップ4: 完成サンプルの数式と動作確認</span></h3>



<p class="wp-block-paragraph">ここまでの設定が終わったら、左側のテーブルに実際のタスクを入力して動作確認しましょう。</p>



<figure class="wp-block-table"><table><thead><tr><th>A</th><th>B</th><th>C</th></tr></thead><tbody><tr><td>要件定義</td><td>2026/04/01</td><td>2026/04/05</td></tr><tr><td>設計</td><td>2026/04/06</td><td>2026/04/12</td></tr><tr><td>実装</td><td>2026/04/13</td><td>2026/04/25</td></tr><tr><td>テスト</td><td>2026/04/26</td><td>2026/04/30</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">入力すると、右側のタイムラインで対応する日付範囲のセルが自動で塗られます。終了日を変えれば、塗られる範囲もリアルタイムで変わるはずです。</p>



<p class="wp-block-paragraph">色が塗られない場合は、後ほど紹介するトラブル対処の節で原因を特定できますよ。</p>



<h3 class="wp-block-heading"><span id="toc8">ステップ5: テンプレ化と微調整</span></h3>



<p class="wp-block-paragraph">完成したシートはテンプレ化して、他のプロジェクトでも使い回せるようにしておきましょう。</p>



<ul class="wp-block-list"><li><strong>シートのコピー</strong>: タブを右クリック →「コピーを作成」で別シートに複製できます</li><li><strong>テーブル全体のコピー</strong>: 別ファイルとして「ファイル → コピーを作成」で保存し、新規プロジェクト用に流用</li><li><strong>見栄えの調整</strong>: 列幅を均等に、罫線を細く、ヘッダー行・タスク名列の固定（表示 → 固定 → 1行・1列）</li></ul>



<p class="wp-block-paragraph">ここまでで基本のガントチャートは完成です。ここから先は応用編として、進捗率の表示・メンバー別の色分けに進みましょう。</p>



<h2 class="wp-block-heading"><span id="toc9">【応用編】進捗率を表示するガントチャートに進化させる</span></h2>



<p class="wp-block-paragraph">基本編では「タスク期間中はずっと同じ色」でしたが、進捗率に応じて「終わった部分は濃い色、これからの部分は薄い色」と塗り分けたい場合のやり方です。</p>



<h3 class="wp-block-heading"><span id="toc10">進捗率列の追加</span></h3>



<p class="wp-block-paragraph">D列に進捗率（0〜100の数値）を入力する列を追加します。</p>



<figure class="wp-block-table"><table><thead><tr><th>A</th><th>B</th><th>C</th><th>D</th></tr></thead><tbody><tr><td>要件定義</td><td>2026/04/01</td><td>2026/04/05</td><td>100</td></tr><tr><td>設計</td><td>2026/04/06</td><td>2026/04/12</td><td>60</td></tr><tr><td>実装</td><td>2026/04/13</td><td>2026/04/25</td><td>0</td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><span id="toc11">条件付き書式を2ルール作る</span></h3>



<p class="wp-block-paragraph">「終わった部分（濃い色）」と「これからの部分（薄い色）」を分けるには、条件付き書式のルールを2つ作ります。</p>



<h4 class="wp-block-heading">ルール1（濃い色：終わった部分）</h4>



<pre class="wp-block-code"><code>=AND(E$1&gt;=$B2, E$1&lt;=$B2+($C2-$B2)*$D2/100)</code></pre>



<p class="wp-block-paragraph">数式の <code>$B2 + ($C2 - $B2) * $D2/100</code> は、「タスク期間のうち進捗率分の地点にあたる日付」を計算します。たとえば4/1〜4/10のタスクで進捗60%なら、約4/6までが濃い色の範囲になります（4/10−4/1＝9日 × 60% ≒ 5.4日後）。</p>



<h4 class="wp-block-heading">ルール2（薄い色：これからの部分）</h4>



<pre class="wp-block-code"><code>=AND(E$1&gt;=$B2, E$1&lt;=$C2)</code></pre>



<p class="wp-block-paragraph">これは基本編と同じ判定です。タスク期間全体をカバーします。</p>



<h3 class="wp-block-heading"><span id="toc12">ルールの優先順位を整える</span></h3>



<p class="wp-block-paragraph">条件付き書式は、リストの上から順に評価され、TRUEになった最初のルールが適用されます。つまり「濃い色ルール」を上、「薄い色ルール」を下にする必要があります。</p>



<p class="wp-block-paragraph">条件付き書式のダイアログでは、ルールをドラッグして並び順を変えられます。濃い色を上に、薄い色を下に並べておきましょう。</p>



<p class="wp-block-paragraph">これで、進捗60%のタスクは前半が濃い色・後半が薄い色になり、進捗率がひと目で分かるようになりますよ。</p>



<h2 class="wp-block-heading"><span id="toc13">【応用編】メンバー別・タスク種別に色分けする方法</span></h2>



<p class="wp-block-paragraph">担当者別やフェーズ別にバーの色を分けると、誰がどの時期に動いているかが一目で分かります。</p>



<h3 class="wp-block-heading"><span id="toc14">担当者列の追加</span></h3>



<p class="wp-block-paragraph">タイムラインの左側、進捗率の隣に担当者列を追加します。基本編から続けて作る場合は、列の構成を以下のように整え直しましょう。</p>



<figure class="wp-block-table"><table><thead><tr><th>列</th><th>内容</th><th>例</th></tr></thead><tbody><tr><td>A列</td><td>タスク名</td><td>要件定義</td></tr><tr><td>B列</td><td>開始日</td><td>2026/04/01</td></tr><tr><td>C列</td><td>終了日</td><td>2026/04/05</td></tr><tr><td>D列</td><td>進捗率</td><td>100</td></tr><tr><td>E列</td><td>担当者</td><td>Aさん</td></tr><tr><td>F列以降</td><td>タイムライン</td><td>日付ヘッダー</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">つまり、これまでE列から始めていた日付ヘッダーをF列に1つずらします。E1セルが空になるので、E1〜E最終行までを担当者列に転用してください。タイムラインの数式中の「E$1」を「F$1」に書き換えるのがポイントです。</p>



<h3 class="wp-block-heading"><span id="toc15">担当者ごとに条件付き書式ルールを追加</span></h3>



<p class="wp-block-paragraph">担当者の人数分、条件付き書式のルールを作ります。3人なら3ルールです。タイムライン領域は <code>F2:AI100</code> のように、F列以降に変わる点に注意してください。</p>



<h4 class="wp-block-heading">Aさん用（青）</h4>



<pre class="wp-block-code"><code>=AND(F$1&gt;=$B2, F$1&lt;=$C2, $E2=&quot;Aさん&quot;)</code></pre>



<h4 class="wp-block-heading">Bさん用（緑）</h4>



<pre class="wp-block-code"><code>=AND(F$1&gt;=$B2, F$1&lt;=$C2, $E2=&quot;Bさん&quot;)</code></pre>



<h4 class="wp-block-heading">Cさん用（橙）</h4>



<pre class="wp-block-code"><code>=AND(F$1&gt;=$B2, F$1&lt;=$C2, $E2=&quot;Cさん&quot;)</code></pre>



<p class="wp-block-paragraph">数式の <code>$E2="Aさん"</code> の部分が、担当者名で色を振り分ける条件です。担当者名の代わりに「設計」「実装」のようなフェーズ名で分ければ、フェーズ別の色分けにもできますよ。</p>



<p class="wp-block-paragraph">なお、進捗率の濃淡と担当者の色分けを併用すると、ルールが多くなって優先順位の調整が複雑になります。最初は「色分けだけ」「進捗率だけ」のどちらかに絞り、慣れたら統合するのがおすすめです。</p>



<h2 class="wp-block-heading"><span id="toc16">タイムラインビュー（新機能）との使い分け</span></h2>



<p class="wp-block-paragraph">Googleスプレッドシートには、2022年から <strong>タイムラインビュー</strong> という専用機能が追加されています。これは、テーブルから自動的にガントチャート風のビューを生成してくれる機能です。</p>



<h3 class="wp-block-heading"><span id="toc17">タイムラインビューの使い方（簡単な紹介）</span></h3>



<ol class="wp-block-list"><li>タスクテーブル（タスク名・開始日・終了日の列）を選択</li><li>メニュー「挿入」→「タイムライン」</li><li>列のマッピング（カードのタイトル・開始日・終了日など）を確認</li><li>自動的にタイムラインビューが生成される</li></ol>



<h3 class="wp-block-heading"><span id="toc18">条件付き書式方式との比較</span></h3>



<figure class="wp-block-table"><table><thead><tr><th>観点</th><th>タイムラインビュー</th><th>条件付き書式方式</th></tr></thead><tbody><tr><td>設定の手間</td><td>ほぼゼロ（テーブル指定のみ）</td><td>数式と書式の設定が必要</td></tr><tr><td>見栄え</td><td>きれい（カード型UI）</td><td>シンプルな塗りつぶし</td></tr><tr><td>カスタマイズ性</td><td>限定的</td><td>自由度が高い</td></tr><tr><td>進捗率の濃淡表示</td><td>不可</td><td>可能（応用編で紹介）</td></tr><tr><td>週末グレーアウト</td><td>不可</td><td>可能（後述）</td></tr><tr><td>印刷・PDF出力</td><td>レイアウト調整が難しい</td><td>レイアウトを自由に作れる</td></tr><tr><td>操作性</td><td>ドラッグで日付変更できる</td><td>テーブル直接編集</td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><span id="toc19">使い分けの目安</span></h3>



<ul class="wp-block-list"><li><strong>タイムラインビュー向き</strong>: 軽量プロジェクト、見栄え重視、操作性重視、共有しやすさ重視</li><li><strong>条件付き書式方式向き</strong>: 印刷・PDF配布が前提、独自ルール（祝日表示・進捗率の濃淡・遅延ハイライト）が欲しい、社内テンプレ化したい</li></ul>



<p class="wp-block-paragraph">両方を試してみて、案件の性質に合うほうを選ぶのが良いですよ。シンプルなプロジェクトはタイムラインビュー、こだわりが必要なプロジェクトは条件付き書式方式、と使い分けるのが現実的です。</p>



<h2 class="wp-block-heading"><span id="toc20">ガントチャート運用でよくあるトラブルと対処法</span></h2>



<h3 class="wp-block-heading"><span id="toc21">トラブル1: 色が塗られない</span></h3>



<p class="wp-block-paragraph">最も多いトラブルです。原因は3パターンに分かれます。</p>



<ul class="wp-block-list"><li><strong>絶対参照（<code>$</code>）の付け方ミス</strong>: <code>D$1</code>と<code>$B2</code>の <code>$</code> の位置が逆になっていることが多いです。「行を固定したいか、列を固定したいか」を意識して見直してみてください。</li><li><strong>適用範囲がずれている</strong>: 条件付き書式の「範囲に適用」がタイムライン領域と一致しているか確認しましょう。</li><li><strong>日付セルが文字列になっている</strong>: 開始日・終了日のセルが日付型ではなく文字列だと、比較が動きません。表示形式 → 数値 → 日付を再適用してください。</li></ul>



<h3 class="wp-block-heading"><span id="toc22">トラブル2: 進捗率の濃淡が想定通りにならない</span></h3>



<p class="wp-block-paragraph">応用編で2ルール作った場合、優先順位が逆になっていると濃い色が表示されません。条件付き書式ダイアログで「濃い色ルール」が上に来ているか確認しましょう。</p>



<h3 class="wp-block-heading"><span id="toc23">トラブル3: 列を増やすたびに数式を作り直す必要がある</span></h3>



<p class="wp-block-paragraph">最初から適用範囲を広めに取っておくのが対処法です。<code>E2:ZZ200</code> のように余裕を持たせておけば、行・列を追加しても自動的にルールが効きます。</p>



<h3 class="wp-block-heading"><span id="toc24">トラブル4: 週末・祝日をグレーアウトしたい</span></h3>



<p class="wp-block-paragraph">タイムライン領域に追加で条件付き書式を設定します。</p>



<h4 class="wp-block-heading">週末グレーアウト（カスタム数式）</h4>



<pre class="wp-block-code"><code>=OR(WEEKDAY(E$1,2)=6, WEEKDAY(E$1,2)=7)</code></pre>



<p class="wp-block-paragraph">WEEKDAY関数（曜日番号を返す関数）の第2引数 <code>2</code> は「月曜=1、日曜=7」の番号体系を意味します。土曜=6、日曜=7に該当する列をグレーで塗りつぶせます。</p>



<h4 class="wp-block-heading">祝日グレーアウト</h4>



<p class="wp-block-paragraph">別シート <code>祝日!A:A</code> に祝日リストを用意し、MATCH関数で判定します。</p>



<pre class="wp-block-code"><code>=ISNUMBER(MATCH(E$1, 祝日!$A:$A, 0))</code></pre>



<p class="wp-block-paragraph">MATCH関数（範囲内で一致する位置を返す関数）でヒットすればISNUMBER（数値かどうかを判定する関数）がTRUEを返し、その日付列をグレーアウトします。</p>



<h3 class="wp-block-heading"><span id="toc25">トラブル5: 遅延しているタスクをハイライトしたい</span></h3>



<p class="wp-block-paragraph">「終了日が今日より前なのに進捗率が100%未満」のタスクを赤くハイライトする場合、タスク名列（A列）に対して条件付き書式を追加します。</p>



<pre class="wp-block-code"><code>=AND($C2&lt;TODAY(), $D2&lt;100)</code></pre>



<p class="wp-block-paragraph">これで、遅延タスクのタスク名セルが赤くなり、ひと目で気づけるようになりますよ。</p>



<h3 class="wp-block-heading"><span id="toc26">トラブル6: タスクが多くて見づらい</span></h3>



<ul class="wp-block-list"><li><strong>行・列を固定</strong>: 表示 → 固定 → 1行（日付ヘッダー）と1列（タスク名）を固定すると、スクロールしてもヘッダーが見えます</li><li><strong>ズーム切り替え</strong>: 列幅を狭めて週単位の表示に切り替える、または列を1週間ごとに集約する</li></ul>



<p class="wp-block-paragraph">タスク数が30を超えるあたりから、タイムラインビューへの切り替えも検討する価値がありますよ。</p>



<h2 class="wp-block-heading"><span id="toc27">関連記事</span></h2>



<p class="wp-block-paragraph">スプレッドシートでのプロジェクト管理・スケジュール管理をさらに深めたい方は、あわせて次の記事もご覧ください。</p>



<ul class="wp-block-list"><li><a href="https://mashukabu.com/google-sheets-timeline-view/">スプレッドシートのタイムラインビューの使い方｜関数ゼロでガントチャート風スケジュール管理</a>：本記事で触れたタイムラインビューを、関数なしで使う手順を詳しく解説しています。</li><li><a href="https://mashukabu.com/spreadsheet-task-progress-management/">スプレッドシートのタスク・進捗管理表を作る方法｜チェックボックス×COUNTIF×条件付き書式で進捗率を自動表示</a>：進捗率を自動計算する管理表の作り方を紹介しています。</li><li><a href="https://mashukabu.com/spreadsheet-checkbox-progress/">スプレッドシートのチェックボックスで進捗管理シートを作る方法｜COUNTIFで完了率を自動計算</a>：チェックボックスで完了率を可視化する仕組みをまとめています。</li></ul>



<h2 class="wp-block-heading"><span id="toc28">まとめ：スプレッドシートのガントチャートはここまでできる</span></h2>



<p class="wp-block-paragraph">スプレッドシートのIF関数 + 条件付き書式を組み合わせれば、無料で、追加ツールなしで、開始日と終了日を入れるだけで自動色付けされるガントチャートが作れます。今日紹介した内容を整理すると、こうなります。</p>



<ul class="wp-block-list"><li><strong>基本編（5ステップ）</strong>: タスク一覧 → 日付ヘッダー → カスタム数式 <code>=AND(E$1>=$B2, E$1<=$C2)</code> → 動作確認 → テンプレ化</li><li><strong>応用編（進捗率）</strong>: 2ルールに分けて、濃い色を上・薄い色を下に並べる</li><li><strong>応用編（色分け）</strong>: 担当者列を追加し、担当者ごとにルールを増やす</li><li><strong>タイムラインビュー</strong>: 軽量・操作性重視ならこちら、カスタマイズ重視なら条件付き書式方式</li><li><strong>トラブル対処</strong>: 絶対参照のミス、ルール優先順位、日付セルの型をまず確認</li></ul>



<p class="wp-block-paragraph">最初は基本編の5ステップから始めて、慣れてきたら進捗率や色分けに進むのがおすすめです。プロジェクトごとにテンプレ化しておけば、新しい案件のたびに作り直す必要もありません。</p>



<p class="wp-block-paragraph">同じ「日付軸 × 条件付き書式」のパターンは、勤怠管理表やシフト表など他の業務テンプレでも応用できます。続けて読みたい方は<a href="spreadsheet-attendance-management">スプレッドシートで勤怠管理表を作る方法</a>、可視化のバリエーションを広げたい方は<a href="spreadsheet-graph-creation-guide">スプレッドシートのグラフ作成完全ガイド</a>もぜひ覗いてみてくださいね。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/spreadsheet-gantt-chart/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Google Apps Script（GAS）入門｜コピペで動くスプレッドシート自動化レシピ5選</title>
		<link>https://mashukabu.com/spreadsheet-gas-getting-started-recipes/</link>
					<comments>https://mashukabu.com/spreadsheet-gas-getting-started-recipes/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Fri, 12 Jun 2026 22:00:08 +0000</pubDate>
				<category><![CDATA[Googleスプレッドシート]]></category>
		<category><![CDATA[GAS]]></category>
		<category><![CDATA[Google Apps Script]]></category>
		<category><![CDATA[onEdit]]></category>
		<category><![CDATA[スプレッドシート]]></category>
		<category><![CDATA[入門]]></category>
		<category><![CDATA[自動化]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=8007</guid>

					<description><![CDATA[Google Apps Script（GAS）の基本から、コピペで動く5つの自動化レシピまでを丁寧に解説。タイムスタンプ自動入力、重複削除、月別シート分割など、Excel VBA経験者がスプレッドシートで業務を自動化するための入門記事です。権限承認の手順までスクショ付きで紹介します。]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading">Google Apps Script（GAS）入門｜コピペで動くスプレッドシート自動化レシピ5選</h1>



<p class="wp-block-paragraph">「毎月同じスプレッドシート作業を繰り返していて、もう限界…」そんな悩みを解決するのが Google Apps Script（GAS）です。Excel でいうマクロ・VBA のスプレッドシート版で、JavaScript の知識ゼロからでも使い始められます。</p>



<p class="wp-block-paragraph">この記事では、GAS の正体から最初のコード実行までを丁寧に解説します。あわせて、コピペするだけで動く5つの自動化レシピを紹介します。タイムスタンプ自動入力、重複行の一括削除、月別シート分割など、明日から業務で使えるパターンばかりです。</p>



<p class="wp-block-paragraph">VBA を触ったことがない方でも、画面の通りに手を動かせば最初の自動化が完成します。ぜひ実際にスプレッドシートを開きながら読み進めてください。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-3" checked><label class="toc-title" for="toc-checkbox-3">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"></li><li><a href="#toc1" tabindex="0">Google Apps Script（GAS）とは？｜スプレッドシートを自動化する仕組み</a></li><li><a href="#toc2" tabindex="0">GAS でできることとできないこと</a><ol><li><a href="#toc3" tabindex="0">GAS が得意なこと</a></li><li><a href="#toc4" tabindex="0">GAS が苦手・できないこと</a></li></ol></li><li><a href="#toc5" tabindex="0">スクリプトエディタを開く手順｜初回の権限承認まで</a><ol><li><a href="#toc6" tabindex="0">スクリプトエディタの開き方</a></li><li><a href="#toc7" tabindex="0">最初のコードを書いて保存する</a></li><li><a href="#toc8" tabindex="0">初回の権限承認を突破する</a></li></ol></li><li><a href="#toc9" tabindex="0">【レシピ1】タイムスタンプを自動入力する</a><ol><li><a href="#toc10" tabindex="0">コピペで動くコード</a></li><li><a href="#toc11" tabindex="0">動かし方</a></li><li><a href="#toc12" tabindex="0">カスタマイズのヒント</a></li></ol></li><li><a href="#toc13" tabindex="0">【レシピ2】指定列で重複行を一括削除する</a><ol><li><a href="#toc14" tabindex="0">コピペで動くコード</a></li><li><a href="#toc15" tabindex="0">動かし方</a></li><li><a href="#toc16" tabindex="0">カスタマイズのヒント</a></li></ol></li><li><a href="#toc17" tabindex="0">【レシピ3】指定列の合計をポップアップ表示する</a><ol><li><a href="#toc18" tabindex="0">コピペで動くコード</a></li><li><a href="#toc19" tabindex="0">動かし方</a></li><li><a href="#toc20" tabindex="0">ボタンから呼び出せるようにする</a></li><li><a href="#toc21" tabindex="0">カスタマイズのヒント</a></li></ol></li><li><a href="#toc22" tabindex="0">【レシピ4】データを月別シートに自動分割する</a><ol><li><a href="#toc23" tabindex="0">コピペで動くコード</a></li><li><a href="#toc24" tabindex="0">動かし方</a></li><li><a href="#toc25" tabindex="0">カスタマイズのヒント</a></li></ol></li><li><a href="#toc26" tabindex="0">【レシピ5】入力で行の色を自動変更する</a><ol><li><a href="#toc27" tabindex="0">コピペで動くコード</a></li><li><a href="#toc28" tabindex="0">動かし方</a></li><li><a href="#toc29" tabindex="0">レシピ1と併用したい場合の注意</a></li><li><a href="#toc30" tabindex="0">カスタマイズのヒント</a></li></ol></li><li><a href="#toc31" tabindex="0">GAS でつまずきやすいポイントとトラブルシュート</a><ol><li><a href="#toc32" tabindex="0">つまずき1: onEdit が動かない</a></li><li><a href="#toc33" tabindex="0">つまずき2: 「Exceeded maximum execution time」と表示される</a></li><li><a href="#toc34" tabindex="0">つまずき3: 行・列番号で 0 を指定してエラー</a></li><li><a href="#toc35" tabindex="0">つまずき4: 月の値が1ずれる</a></li><li><a href="#toc36" tabindex="0">つまずき5: 数字を書き込んだのに文字列扱いになる</a></li><li><a href="#toc37" tabindex="0">つまずき6: 実行ボタンを押すと「関数を選択してください」と出る</a></li><li><a href="#toc38" tabindex="0">つまずき7: スクリプトが遅い</a></li></ol></li><li><a href="#toc39" tabindex="0">次のステップ｜GAS でさらに自動化を広げるには</a><ol><li><a href="#toc40" tabindex="0">定期実行（時間ベーストリガー）</a></li><li><a href="#toc41" tabindex="0">Googleフォームの回答に応じた自動処理</a></li><li><a href="#toc42" tabindex="0">スプレッドシートからのメール自動送信</a></li><li><a href="#toc43" tabindex="0">ライブラリと外部API連携</a></li><li><a href="#toc44" tabindex="0">おわりに</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">Google Apps Script（GAS）とは？｜スプレッドシートを自動化する仕組み</span></h2>



<p class="wp-block-paragraph">Google Apps Script（GAS、ガス）は、Google が提供する自動化のためのプログラミング環境です。スプレッドシートや Gmail、Googleフォーム、Googleカレンダーなど、Google のサービス全体を操作できます。</p>



<p class="wp-block-paragraph">VBA との比較で押さえておきたいのは次のポイントです。</p>



<figure class="wp-block-table"><table><thead><tr><th>項目</th><th>Excel VBA</th><th>Google Apps Script</th></tr></thead><tbody><tr><td>言語ベース</td><td>VBA（Visual Basic for Applications）</td><td>JavaScript</td></tr><tr><td>実行環境</td><td>ローカルPCの Excel</td><td>Google のクラウド上</td></tr><tr><td>実行方法</td><td>Excel ファイルを開いて F5 / マクロ実行</td><td>スクリプトエディタの実行ボタン、ボタン、トリガー</td></tr><tr><td>料金</td><td>Excel に同梱</td><td>個人の Google アカウントで無料</td></tr><tr><td>共有</td><td>ファイルごとマクロ付きで配布</td><td>スプレッドシートに紐付くため、共有編集者にも届く</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">イメージとしては「ブラウザ版の VBA」です。コードを書く場所はスプレッドシートの中にあり、実行は Google のサーバーで行われます。PC のスペックや Office のバージョンに左右されないのが大きな利点です。</p>



<p class="wp-block-paragraph">なお、Excel VBA とマクロの関係をおさらいしたい方は、<a href="https://mashukabu.com/excel-vba-macro-difference/">Excel VBAとマクロの違いをやさしく整理</a> も参考にしてください。</p>



<h2 class="wp-block-heading"><span id="toc2">GAS でできることとできないこと</span></h2>



<p class="wp-block-paragraph">GAS が初学者でも実用レベルで使える領域は意外と広く、逆に苦手な領域もはっきりしています。最初に向き不向きを把握しておくと、学習の方向を間違えずに済みます。</p>



<h3 class="wp-block-heading"><span id="toc3">GAS が得意なこと</span></h3>



<ul class="wp-block-list"><li>スプレッドシートの値の取得・書き込み（行ごとの一括処理が高速）</li><li>編集時の自動処理（onEdit などのトリガー）</li><li>時刻指定の定期実行（毎朝9時に集計を更新するなど）</li><li>Gmail 経由でのメール自動送信</li><li>Googleフォームの回答に応じた自動処理</li><li>HTTP リクエストで外部 API と連携</li></ul>



<h3 class="wp-block-heading"><span id="toc4">GAS が苦手・できないこと</span></h3>



<ul class="wp-block-list"><li>ピボットテーブルやチャートの細かい編集（一部は可能だが制限あり）</li><li>Excel ファイル（.xlsx）独自の機能（条件付き書式の高度な設定、Power Query など）</li><li>グラフィカルなフォーム UI（簡易ダイアログは作れるが、本格的なアプリは別ツールが向く）</li><li>ローカル PC のファイル操作（クラウド上で動くため）</li><li>1 回 6 分を超える長時間処理（実行時間制限）</li></ul>



<p class="wp-block-paragraph">業務改善の入り口としては「同じスプレッドシートに対する繰り返し作業」を自動化するのが鉄板です。</p>



<h2 class="wp-block-heading"><span id="toc5">スクリプトエディタを開く手順｜初回の権限承認まで</span></h2>



<p class="wp-block-paragraph">最初の関門は「エディタを開いて、サンプルコードを動かしてみる」ところです。ここを越えれば後はコピペでどんどん試せるので、丁寧にやってみましょう。</p>



<h3 class="wp-block-heading"><span id="toc6">スクリプトエディタの開き方</span></h3>



<p class="wp-block-paragraph">任意のスプレッドシートを開いた状態で、上部メニューから次の通り進みます。</p>



<ol class="wp-block-list"><li>メニューバーの <code>拡張機能</code> をクリック</li><li>開いたメニューから <code>Apps Script</code> を選択</li><li>別タブでスクリプトエディタが開く</li></ol>



<p class="wp-block-paragraph">NOTE: 古い記事では「ツール → スクリプトエディタ」と書かれていることがあります。現在のメニュー位置は <code>拡張機能</code> 配下です。Excel VBA でいう <code>Alt + F11</code> で VBE を開く操作にあたります。</p>



<h3 class="wp-block-heading"><span id="toc7">最初のコードを書いて保存する</span></h3>



<p class="wp-block-paragraph">エディタを開くと <code>function myFunction() { }</code> という空の関数が用意されています。試しに次のコードに書き換えてみましょう。</p>



<pre class="wp-block-code"><code>function helloGas() {
  // --- スプレッドシートのアクティブセルに文字を書き込む ---
  SpreadsheetApp.getActiveRange().setValue(&quot;こんにちは GAS&quot;);
}</code></pre>



<p class="wp-block-paragraph">書き換えたら、上部のフロッピーアイコン（保存）をクリックします。スプレッドシート側で適当なセルを選択した状態に戻し、エディタに戻って実行ボタン（▶）を押してください。</p>



<h3 class="wp-block-heading"><span id="toc8">初回の権限承認を突破する</span></h3>



<p class="wp-block-paragraph">実行ボタンを押すと、初回だけ権限承認の確認が出ます。手順は次の通りです。</p>



<ol class="wp-block-list"><li>「承認が必要です」ダイアログで <code>権限を確認</code> をクリック</li><li>自分の Google アカウントを選択</li><li>「Google で確認されていません」と表示されたら <code>詳細</code> をクリック</li><li>一番下の「（プロジェクト名）に移動（安全ではないページ）」をクリック</li><li>必要な権限を確認して <code>許可</code> をクリック</li></ol>



<p class="wp-block-paragraph">「安全ではないページ」という表現にひるみますが、これは自分で書いたスクリプトが Google の審査を受けていないために出るメッセージです。同じプロジェクトでは初回の1回だけ表示され、2回目以降は出ません。</p>



<p class="wp-block-paragraph">承認が完了すると、スプレッドシート側の選択していたセルに「こんにちは GAS」が書き込まれます。これで実行環境の準備は完了です。</p>



<h2 class="wp-block-heading"><span id="toc9">【レシピ1】タイムスタンプを自動入力する</span></h2>



<p class="wp-block-paragraph">最初のレシピは、A 列に何かを入力したら、同じ行の B 列に入力日時が自動で記録されるしくみです。問い合わせ受付や作業ログのスプレッドシートで、入力者がいちいち日付を打たなくて済むようになります。</p>



<h3 class="wp-block-heading"><span id="toc10">コピペで動くコード</span></h3>



<p class="wp-block-paragraph">スクリプトエディタの中身をすべて消して、次のコードを貼り付けてください。</p>



<pre class="wp-block-code"><code>function onEdit(e) {
  // --- 編集が起きたシートと範囲を取得 ---
  const sheet = e.source.getActiveSheet();
  const range = e.range;

  // --- A列（1列目）の2行目以降が編集された場合のみ処理 ---
  if (range.getColumn() === 1 &amp;&amp; range.getRow() &gt; 1) {
    // --- 同じ行のB列（2列目）に現在日時を書き込む ---
    sheet.getRange(range.getRow(), 2).setValue(new Date());
  }
}</code></pre>



<h3 class="wp-block-heading"><span id="toc11">動かし方</span></h3>



<ol class="wp-block-list"><li>上記のコードをスクリプトエディタに貼り付けて保存</li><li>スプレッドシート側に戻り、A 列の任意のセルに何か入力</li><li>同じ行の B 列に入力日時が自動で書き込まれる</li></ol>



<p class="wp-block-paragraph">実行ボタンを押す必要はありません。<code>onEdit</code> という名前の関数は「セルを編集したら自動で動く」予約済みの仕組みです。これを「シンプルトリガー」と呼びます。Excel VBA でいう <code>Worksheet_Change</code> イベントとほぼ同じ役割です。</p>



<h3 class="wp-block-heading"><span id="toc12">カスタマイズのヒント</span></h3>



<ul class="wp-block-list"><li>B 列ではなく C 列に書き込みたい場合は、<code>getRange(range.getRow(), 2)</code> の <code>2</code> を <code>3</code> に変更</li><li>A 列ではなく D 列が編集されたら反応させたい場合は、<code>getColumn() === 1</code> の <code>1</code> を <code>4</code> に変更</li><li>日付だけにしたい場合は、<code>new Date()</code> の代わりに <code>Utilities.formatDate(new Date(), "Asia/Tokyo", "yyyy/MM/dd")</code> を使う</li></ul>



<p class="wp-block-paragraph">NOTE: <code>onEdit</code> はスプレッドシート上で手動編集が起きたときに動きます。他のスクリプトから値を書き換えた場合や、API 経由で更新された場合は反応しないので注意してください。</p>



<h2 class="wp-block-heading"><span id="toc13">【レシピ2】指定列で重複行を一括削除する</span></h2>



<p class="wp-block-paragraph">顧客リストやメールアドレス一覧で、同じ値の行が混ざっているときに使えるレシピです。1 列目（A 列）の値を見て、重複している行を取り除きます。</p>



<h3 class="wp-block-heading"><span id="toc14">コピペで動くコード</span></h3>



<pre class="wp-block-code"><code>function removeDuplicates() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const data = sheet.getDataRange().getValues();

  // --- 1行目をヘッダーとして保持 ---
  const header = data[0];
  const rows = data.slice(1);

  // --- A列（1列目）の値で重複を判定 ---
  const seen = new Set();
  const unique = rows.filter(row =&gt; {
    const key = row[0];
    if (seen.has(key)) return false;
    seen.add(key);
    return true;
  });

  // --- シートをクリアしてヘッダー+ユニーク行を書き戻し ---
  sheet.clearContents();
  sheet.getRange(1, 1, 1, header.length).setValues([header]);
  if (unique.length &gt; 0) {
    sheet.getRange(2, 1, unique.length, header.length).setValues(unique);
  }
}</code></pre>



<h3 class="wp-block-heading"><span id="toc15">動かし方</span></h3>



<ol class="wp-block-list"><li>コードを貼り付けて保存</li><li>スクリプトエディタ上部の関数選択ドロップダウンで <code>removeDuplicates</code> を選択</li><li>実行ボタン（▶）をクリック</li><li>シートが「ヘッダー + 重複なしの行」だけの状態に整う</li></ol>



<h3 class="wp-block-heading"><span id="toc16">カスタマイズのヒント</span></h3>



<ul class="wp-block-list"><li>B 列で重複判定したい場合は <code>row[0]</code> の <code>0</code> を <code>1</code> に変更（配列は0始まりなので、A 列が0、B 列が1）</li><li>複数列の組み合わせで重複判定したい場合は <code>const key = row[0] + "_" + row[1];</code> のように連結</li></ul>



<p class="wp-block-paragraph">NOTE: 行を1つずつ削除するのではなく、いったん全データを配列で取り出して再書き込みする方式にしている点がポイントです。1000行あると100倍以上の速度差が出るので、自動化のクセとして覚えておくと役立ちます。</p>



<h2 class="wp-block-heading"><span id="toc17">【レシピ3】指定列の合計をポップアップ表示する</span></h2>



<p class="wp-block-paragraph">D 列の数値の合計を、ボタン1つでパッと確認できるレシピです。月次集計の途中チェックや、フィルター後の確認に便利です。</p>



<h3 class="wp-block-heading"><span id="toc18">コピペで動くコード</span></h3>



<pre class="wp-block-code"><code>function showTotal() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const lastRow = sheet.getLastRow();

  // --- D2 から最終行までの値を取得 ---
  const values = sheet.getRange(2, 4, lastRow - 1, 1).getValues();

  // --- 合計を計算（数値以外は0として扱う） ---
  const total = values.reduce((sum, row) =&gt; sum + (Number(row[0]) || 0), 0);

  // --- ポップアップで表示 ---
  SpreadsheetApp.getUi().alert(`D列の合計: ${total.toLocaleString()}`);
}</code></pre>



<h3 class="wp-block-heading"><span id="toc19">動かし方</span></h3>



<ol class="wp-block-list"><li>コードを貼り付けて保存</li><li>関数選択ドロップダウンで <code>showTotal</code> を選び、実行ボタンをクリック</li><li>ポップアップで合計値が表示される</li></ol>



<h3 class="wp-block-heading"><span id="toc20">ボタンから呼び出せるようにする</span></h3>



<p class="wp-block-paragraph">毎回スクリプトエディタを開くのは手間なので、スプレッドシート上にボタンを置いてしまいましょう。</p>



<ol class="wp-block-list"><li>スプレッドシートの <code>挿入</code> メニューから <code>図形描画</code></li><li>適当な四角形を描き、中に「合計表示」と書いて保存</li><li>配置された図形をクリック、右上の3点メニューから <code>スクリプトを割り当て</code></li><li>入力欄に <code>showTotal</code> と入力して OK</li></ol>



<p class="wp-block-paragraph">これでシート上のボタンをクリックするだけで合計が表示されます。Excel VBA でフォームコントロールにマクロを登録する操作と同じ感覚です。</p>



<h3 class="wp-block-heading"><span id="toc21">カスタマイズのヒント</span></h3>



<ul class="wp-block-list"><li>別の列で合計したい場合は <code>getRange(2, 4, lastRow - 1, 1)</code> の <code>4</code> を変更（C 列なら3、E 列なら5）</li><li>平均値を表示したい場合は <code>total / values.length</code> を計算</li><li>通貨記号を付けたい場合は `<code> </code>D列の合計: ¥${total.toLocaleString()}<code> </code>` のようにテンプレートリテラル内に追記</li></ul>



<h2 class="wp-block-heading"><span id="toc22">【レシピ4】データを月別シートに自動分割する</span></h2>



<p class="wp-block-paragraph">「データ」という名前のシートに日付付きの行データが入っている前提で、A 列の日付の月ごとに別シートへ自動振り分けします。月次レポート作成や売上データの整理で重宝するパターンです。</p>



<h3 class="wp-block-heading"><span id="toc23">コピペで動くコード</span></h3>



<pre class="wp-block-code"><code>function splitByMonth() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const source = ss.getSheetByName(&quot;データ&quot;);
  const data = source.getDataRange().getValues();
  const header = data[0];
  const rows = data.slice(1);

  // --- 月ごとに行を仕分けるオブジェクトを準備 ---
  const grouped = {};

  rows.forEach(row =&gt; {
    // --- A列の日付から月を取得（getMonth は0始まりなので+1） ---
    const date = new Date(row[0]);
    const month = date.getMonth() + 1;
    const key = `${month}月`;

    if (!grouped[key]) grouped[key] = [];
    grouped[key].push(row);
  });

  // --- 月ごとにシートを用意して書き込み ---
  Object.keys(grouped).forEach(sheetName =&gt; {
    let target = ss.getSheetByName(sheetName);
    if (!target) target = ss.insertSheet(sheetName);

    target.clearContents();
    target.getRange(1, 1, 1, header.length).setValues([header]);
    target.getRange(2, 1, grouped[sheetName].length, header.length).setValues(grouped[sheetName]);
  });
}</code></pre>



<h3 class="wp-block-heading"><span id="toc24">動かし方</span></h3>



<ol class="wp-block-list"><li>スプレッドシートに「データ」という名前のシートを用意し、A 列に日付、B 列以降に任意の項目を入れておく</li><li>コードを貼り付けて保存</li><li>関数選択ドロップダウンで <code>splitByMonth</code> を選び、実行ボタンをクリック</li><li>「1月」「2月」「3月」のように月ごとのシートが自動で作られ、データが振り分けられる</li></ol>



<h3 class="wp-block-heading"><span id="toc25">カスタマイズのヒント</span></h3>



<ul class="wp-block-list"><li>月ではなく年で分けたい場合は <code>date.getFullYear()</code> を使い、シート名を <code>${year}年</code> に変更</li><li>ソースシート名を変えたい場合は <code>getSheetByName("データ")</code> の文字列を書き換え</li><li>元データはクリアせず追加するだけにしたい場合は <code>target.clearContents();</code> の行を削除し、<code>appendRow(row)</code> で1行ずつ追加する形に書き換え</li></ul>



<p class="wp-block-paragraph">NOTE: <code>date.getMonth()</code> は1月が0、12月が11と返ってくる JavaScript の仕様です。表示用には必ず <code>+1</code> してから使ってください。</p>



<h2 class="wp-block-heading"><span id="toc26">【レシピ5】入力で行の色を自動変更する</span></h2>



<p class="wp-block-paragraph">タスク管理シートで C 列に「完了」と入力したら、その行全体に色を付けるレシピです。視覚的な進捗管理が一気にラクになります。</p>



<h3 class="wp-block-heading"><span id="toc27">コピペで動くコード</span></h3>



<pre class="wp-block-code"><code>function onEdit(e) {
  const sheet = e.source.getActiveSheet();
  const range = e.range;

  // --- C列（3列目）が編集された場合のみ処理 ---
  if (range.getColumn() !== 3) return;

  const row = range.getRow();
  const lastCol = sheet.getLastColumn();
  const targetRange = sheet.getRange(row, 1, 1, lastCol);

  if (e.value === &quot;完了&quot;) {
    // --- 「完了」と入力されたら行全体を黄色に ---
    targetRange.setBackground(&quot;#fff2cc&quot;);
  } else {
    // --- 「完了」以外なら背景色をリセット ---
    targetRange.setBackground(null);
  }
}</code></pre>



<h3 class="wp-block-heading"><span id="toc28">動かし方</span></h3>



<ol class="wp-block-list"><li>コードを貼り付けて保存</li><li>スプレッドシートに戻り、C 列のセルに <code>完了</code> と入力</li><li>同じ行が黄色く色付けされる</li><li>C 列を空にしたり別の文字に書き換えると色が消える</li></ol>



<h3 class="wp-block-heading"><span id="toc29">レシピ1と併用したい場合の注意</span></h3>



<p class="wp-block-paragraph">レシピ1とレシピ5はどちらも <code>onEdit</code> という名前の関数です。同じスクリプト内に両方を貼り付けると、後に書いた方で上書きされてしまいます。両方使いたい場合は、1つの <code>onEdit</code> の中で列ごとに分岐させてください。</p>



<pre class="wp-block-code"><code>function onEdit(e) {
  const sheet = e.source.getActiveSheet();
  const range = e.range;
  const col = range.getColumn();
  const row = range.getRow();

  // --- A列が編集されたらB列にタイムスタンプ ---
  if (col === 1 &amp;&amp; row &gt; 1) {
    sheet.getRange(row, 2).setValue(new Date());
  }

  // --- C列が編集されたら行の色を変更 ---
  if (col === 3) {
    const lastCol = sheet.getLastColumn();
    const targetRange = sheet.getRange(row, 1, 1, lastCol);
    if (e.value === &quot;完了&quot;) {
      targetRange.setBackground(&quot;#fff2cc&quot;);
    } else {
      targetRange.setBackground(null);
    }
  }
}</code></pre>



<h3 class="wp-block-heading"><span id="toc30">カスタマイズのヒント</span></h3>



<ul class="wp-block-list"><li>色を変えたい場合は <code>"#fff2cc"</code> を別のカラーコードに（薄い緑なら <code>"#d9ead3"</code>、薄い赤なら <code>"#f4cccc"</code>）</li><li>「完了」以外の文字をトリガーにしたい場合は <code>e.value === "完了"</code> を変更</li><li>C 列以外で反応させたい場合は <code>col === 3</code> の数字を変更</li></ul>



<h2 class="wp-block-heading"><span id="toc31">GAS でつまずきやすいポイントとトラブルシュート</span></h2>



<p class="wp-block-paragraph">ここからは、初学者が最初の数本で必ずぶつかるトラブルと対処法をまとめておきます。エラーが出たときに上から確認していけば、たいていの問題は解決できます。</p>



<h3 class="wp-block-heading"><span id="toc32">つまずき1: onEdit が動かない</span></h3>



<p class="wp-block-paragraph">考えられる原因は次の通りです。</p>



<ul class="wp-block-list"><li>関数名が <code>onEdit</code> ではない（綴りミス、<code>OnEdit</code> のような大文字混在）</li><li>API や別のスクリプトから値を変更している（<code>onEdit</code> は手動編集にのみ反応します）</li><li>認証が必要な処理（メール送信など）を <code>onEdit</code> 内で呼び出している</li><li>同じファイル内に <code>onEdit</code> が複数あって後から書いた方で上書きされている</li></ul>



<h3 class="wp-block-heading"><span id="toc33">つまずき2: 「Exceeded maximum execution time」と表示される</span></h3>



<p class="wp-block-paragraph">GAS は1回の実行で6分の上限があります。多くは「ループ内で <code>getValue()</code> や <code>setValue()</code> を呼んでいる」のが原因です。レシピ2やレシピ4のパターンを参考に、<code>getValues()</code> で配列を一括取得し、JavaScript 側で加工してから <code>setValues()</code> で一括書き戻す形に書き換えてください。</p>



<h3 class="wp-block-heading"><span id="toc34">つまずき3: 行・列番号で 0 を指定してエラー</span></h3>



<p class="wp-block-paragraph">シート操作の <code>getRange(行, 列)</code> は1始まりです。A 列は1、B 列は2、最初の行は1。<code>getRange(0, 0)</code> は無効なのでエラーになります。一方で、<code>getValues()</code> で取得した二次元配列は JavaScript の配列なので0始まりになります。「シート操作は1始まり、配列処理は0始まり」と覚えておきましょう。</p>



<h3 class="wp-block-heading"><span id="toc35">つまずき4: 月の値が1ずれる</span></h3>



<p class="wp-block-paragraph"><code>new Date().getMonth()</code> は1月が0、12月が11と返してくる仕様です。レシピ4のように <code>+1</code> してから表示や比較に使ってください。</p>



<h3 class="wp-block-heading"><span id="toc36">つまずき5: 数字を書き込んだのに文字列扱いになる</span></h3>



<p class="wp-block-paragraph"><code>setValue("100")</code> のように文字列で渡すと文字列として書き込まれます。数値として扱いたい場合は <code>setValue(Number("100"))</code> のように明示変換するか、シート側のセル書式を「数値」に設定しておきましょう。</p>



<h3 class="wp-block-heading"><span id="toc37">つまずき6: 実行ボタンを押すと「関数を選択してください」と出る</span></h3>



<p class="wp-block-paragraph">スクリプトエディタ上部の関数選択ドロップダウンで、実行したい関数名を選んでから ▶ ボタンをクリックしてください。デフォルトでは最初に書かれた関数が選択されています。</p>



<h3 class="wp-block-heading"><span id="toc38">つまずき7: スクリプトが遅い</span></h3>



<p class="wp-block-paragraph">シート操作 API（<code>getValue</code>, <code>setValue</code>, <code>getRange</code> など）の呼び出しは1回ずつが重い処理です。ループ内で繰り返し呼ぶと一気に遅くなるので、配列でまとめて取得・書き込みするのが鉄則です。</p>



<h2 class="wp-block-heading"><span id="toc39">次のステップ｜GAS でさらに自動化を広げるには</span></h2>



<p class="wp-block-paragraph">5つのレシピが動かせたら、もう自動化の入り口は越えています。ここからは、よくある「次に学びたい」テーマを軽く紹介しておきます。</p>



<h3 class="wp-block-heading"><span id="toc40">定期実行（時間ベーストリガー）</span></h3>



<p class="wp-block-paragraph">時刻指定の自動実行は、スクリプトエディタ左側の時計アイコン（トリガー）から設定できます。「毎朝9時に集計を更新する」「毎週月曜にレポートシートを初期化する」といった使い方が定番です。<code>onEdit</code> のようなシンプルトリガーと違い、認証が必要な処理（メール送信など）も呼び出せます。</p>



<h3 class="wp-block-heading"><span id="toc41">Googleフォームの回答に応じた自動処理</span></h3>



<p class="wp-block-paragraph">フォーム × GAS の組み合わせは業務改善の定番です。「フォームに回答が来たら関係者に通知メールを送る」「回答内容を別シートに整形してコピーする」といった処理を自動化できます。フォーム送信トリガーを使えば、回答が来た瞬間に処理が走ります。詳しい手順は別記事で解説する予定です。</p>



<h3 class="wp-block-heading"><span id="toc42">スプレッドシートからのメール自動送信</span></h3>



<p class="wp-block-paragraph">GAS の <code>MailApp.sendEmail()</code> を使うと、スプレッドシートの内容に応じて自動でメールを送れます。請求書の送付、定期レポートの配信、エラー通知など、メールが絡む業務を一気に効率化できます。こちらも別記事で詳しく解説する予定です。</p>



<h3 class="wp-block-heading"><span id="toc43">ライブラリと外部API連携</span></h3>



<p class="wp-block-paragraph">GAS は <code>UrlFetchApp</code> で外部 API を叩けます。Slack 通知、ChatGPT API、その他 SaaS 連携など、応用の幅が一気に広がります。最初は1つのスプレッドシート内で完結する自動化からスタートし、慣れてきたら外部連携に踏み出すと挫折しにくいです。</p>



<p class="wp-block-paragraph">なお、Excel VBA から本格的にプログラミングへ移行したい方は、<a href="https://mashukabu.com/howto-macro-recording/">マクロ記録から始めるExcel VBA入門</a> も合わせて読むと、両方の言語の差分が見えて理解が深まります。</p>



<h3 class="wp-block-heading"><span id="toc44">おわりに</span></h3>



<p class="wp-block-paragraph">GAS の本当の強みは「Google のサービス全部に手が届く」ところです。スプレッドシートの自動化を入り口に、Gmail、フォーム、ドライブ、カレンダーへと広げていけば、Excel VBA では届かなかった領域にまで業務改善が届きます。</p>



<p class="wp-block-paragraph">最初の1本は今日のレシピから。コピペした関数があなたのスプレッドシートで動いた瞬間が、自動化人生のスタートラインです。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/spreadsheet-gas-getting-started-recipes/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【コピペで動く】スプレッドシートからGmailを一括送信する方法｜GASで差し込みメールを自動化</title>
		<link>https://mashukabu.com/spreadsheet-gmail-batch-send-gas/</link>
					<comments>https://mashukabu.com/spreadsheet-gmail-batch-send-gas/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Fri, 12 Jun 2026 21:59:47 +0000</pubDate>
				<category><![CDATA[Googleスプレッドシート]]></category>
		<category><![CDATA[GAS]]></category>
		<category><![CDATA[Gmail]]></category>
		<category><![CDATA[Google Apps Script]]></category>
		<category><![CDATA[スプレッドシート]]></category>
		<category><![CDATA[メール自動化]]></category>
		<category><![CDATA[差し込みメール]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=7999</guid>

					<description><![CDATA[スプレッドシートのリストからGmailをGASで一括送信する方法を解説。差し込み変数・テストモード・HTMLメール・添付ファイル対応のコピペコード3パターンと、送信上限・誤送信防止のコツまで実務目線で網羅。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">スプレッドシートに溜まった顧客リストや社員名簿を見ながら、Gmailで1通ずつ宛名を変えて送信していませんか。10通ならまだしも、50通・100通になると本当に消耗しますよね。実はその作業、Google Apps Script（GAS）を使えば1クリックで自動化できます。Word差し込み印刷のメール版を、無料のGmailとスプレッドシートだけで実現できるのです。この記事では、コピペで動く完成コード3パターン（基本／HTMLメール／添付ファイル付き）と、誤送信を防ぐテストモード・送信上限の対策まで、実務で使える形でまとめました。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-4" checked><label class="toc-title" for="toc-checkbox-4">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">スプレッドシートからGmailを一括送信するとは？｜GASで差し込みメールを自動化する仕組み</a><ol><li><a href="#toc2" tabindex="0">こんなシーンで活躍します</a></li></ol></li><li><a href="#toc3" tabindex="0">一括送信を始める前の準備｜スプレッドシートのレイアウトとGmail送信枠</a><ol><li><a href="#toc4" tabindex="0">スプレッドシートのレイアウト例</a></li><li><a href="#toc5" tabindex="0">Gmailの送信上限を必ず確認する</a></li><li><a href="#toc6" tabindex="0">スクリプトエディタを開く</a></li></ol></li><li><a href="#toc7" tabindex="0">【レシピ1】基本の差し込みメール一括送信（コピペで動くGAS）</a><ol><li><a href="#toc8" tabindex="0">コード本体</a></li><li><a href="#toc9" tabindex="0">実行手順</a></li><li><a href="#toc10" tabindex="0">コードの読み解きポイント</a></li></ol></li><li><a href="#toc11" tabindex="0">【レシピ2】HTMLメール（装飾付き）で一括送信する</a></li><li><a href="#toc12" tabindex="0">【レシピ3】PDF・画像を添付ファイルとして一括送信する</a><ol><li><a href="#toc13" tabindex="0">準備: スプレッドシートに「添付ファイルID列」を追加</a></li><li><a href="#toc14" tabindex="0">コード本体</a></li></ol></li><li><a href="#toc15" tabindex="0">送信前のテスト方法と誤送信を防ぐ4つのコツ</a><ol><li><a href="#toc16" tabindex="0">コツ1: TEST_MODE で自分宛に送信して確認する</a></li><li><a href="#toc17" tabindex="0">コツ2: 送信件数を絞ってから本番実行する</a></li><li><a href="#toc18" tabindex="0">コツ3: 送信前に getRemainingDailyQuota() で残数を確認</a></li><li><a href="#toc19" tabindex="0">コツ4: 送信ステータス列で重複送信を防ぐ</a></li></ol></li><li><a href="#toc20" tabindex="0">BCC一斉送信とGAS差し込み送信の違い・使い分け</a></li><li><a href="#toc21" tabindex="0">スプレッドシート×Gmail一括送信でよくあるエラーと対処法</a><ol><li><a href="#toc22" tabindex="0">よくある間違い: 「済」の判定で全角と半角が混在</a></li><li><a href="#toc23" tabindex="0">よくある間違い: 改行コードの混在</a></li></ol></li><li><a href="#toc24" tabindex="0">まとめ｜スプレッドシート×GASでメール送信業務を一気に効率化する</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">スプレッドシートからGmailを一括送信するとは？｜GASで差し込みメールを自動化する仕組み</span></h2>



<p class="wp-block-paragraph">スプレッドシートからGmailを一括送信する仕組みは、シンプルに言えば「メールアドレス一覧をスプレッドシートに用意し、GASで1行ずつ読み込んでGmail経由で送る」というものです。GAS（Google Apps Script）はGoogleが提供する無料のスクリプト環境で、JavaScriptに似た言語で書きます。</p>



<p class="wp-block-paragraph">差し込み印刷と同じ発想で、本文に <code>{{name}}様</code> のようなプレースホルダーを書いておき、スプレッドシートの「名前列」の値で置換します。これで「○○様、いつもお世話になっております」のように個別の宛名を入れた状態で、100通でも500通でもまとめて送信できます。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE: GASは追加費用ゼロで使えます</strong><br>Googleアカウントを持っていれば、GASは無料で利用できます。インストール不要で、ブラウザ上のエディタですぐに書き始められます。Google Apps Scriptの基本操作は<a href="https://mashukabu.com/spreadsheet-gas-getting-started-recipes/">GAS入門記事</a>で解説しているので、初めて触る方はそちらから読んでください。</p></blockquote>



<h3 class="wp-block-heading"><span id="toc2">こんなシーンで活躍します</span></h3>



<ul class="wp-block-list"><li>取引先50社へ請求書送付の案内メール（添付PDFは行ごとに変える）</li><li>セミナー申込者100名へ参加URLとパスワードを個別送信</li><li>社内メンバー30名へ年末挨拶メール（部署名と氏名を差し込み）</li><li>顧客リストにアンケート依頼を一斉送信</li><li>退会フォーム提出者にお礼メールを自動返信</li></ul>



<p class="wp-block-paragraph">メール配信ツールを契約せず、今あるスプレッドシートとGmailだけで完結するのが最大のメリットです。</p>



<h2 class="wp-block-heading"><span id="toc3">一括送信を始める前の準備｜スプレッドシートのレイアウトとGmail送信枠</span></h2>



<p class="wp-block-paragraph">まずは送信元データを準備します。スプレッドシートのレイアウトと、Gmailの送信上限を必ず先に確認してください。</p>



<h3 class="wp-block-heading"><span id="toc4">スプレッドシートのレイアウト例</span></h3>



<p class="wp-block-paragraph">A列〜E列に以下のヘッダーを置きます。1行目がヘッダー、2行目以降がデータ行です。</p>



<figure class="wp-block-table"><table><thead><tr><th>A: メールアドレス</th><th>B: 名前</th><th>C: 会社名</th><th>D: 件名差し込み</th><th>E: 送信ステータス</th></tr></thead><tbody><tr><td>sample01@example.com</td><td>山田太郎</td><td>株式会社サンプル</td><td>4月度ご請求書</td><td>（空欄）</td></tr><tr><td>sample02@example.com</td><td>鈴木花子</td><td>サンプル商事</td><td>4月度ご請求書</td><td>（空欄）</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">E列の「送信ステータス」は、送信成功時に「済」と書き込む列です。途中でエラーになっても、再実行時にE列が空欄の行だけ送信できるので、重複送信を防げます。</p>



<h3 class="wp-block-heading"><span id="toc5">Gmailの送信上限を必ず確認する</span></h3>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>WARNING: Gmailには1日あたりの送信上限があります</strong><br>通常のGmail（@gmail.com 無料アカウント）は1日100通まで、Google Workspaceの有料アカウントは1日1,500通までです。上限を超えるとアカウントが一時的にロックされ、最大24時間メール送信ができなくなります。</p></blockquote>



<figure class="wp-block-table"><table><thead><tr><th>アカウント種別</th><th>1日の送信数上限</th></tr></thead><tbody><tr><td>通常のGmail（無料）</td><td>100通</td></tr><tr><td>Google Workspace（有料）</td><td>1,500通</td></tr><tr><td>Workspace（試用版）</td><td>500通</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">リセットは前回送信から24時間後で、暦日（0時リセット）ではない点に注意してください。100通を超える送信が必要な場合は、Workspaceの導入か、メール配信専用ツールへの切り替えを検討しましょう。</p>



<h3 class="wp-block-heading"><span id="toc6">スクリプトエディタを開く</span></h3>



<p class="wp-block-paragraph">スプレッドシートのメニューから「拡張機能」→「Apps Script」をクリックします。新しいタブでスクリプトエディタが開きます。初回は無題のプロジェクトが作成されるので、左上のプロジェクト名を分かりやすい名前（例: <code>gmail-bulk-send</code>）に変更しておきましょう。</p>



<h2 class="wp-block-heading"><span id="toc7">【レシピ1】基本の差し込みメール一括送信（コピペで動くGAS）</span></h2>



<p class="wp-block-paragraph">それではコードを書いていきます。最初は基本のテキストメール一括送信です。スプレッドシートの「名前」「会社名」を本文に差し込んで送信します。</p>



<h3 class="wp-block-heading"><span id="toc8">コード本体</span></h3>



<p class="wp-block-paragraph">スクリプトエディタの初期コード（<code>function myFunction() { }</code>）をすべて消して、以下を貼り付けます。</p>



<pre class="wp-block-code"><code>// --- 基本: テキストメールの一括送信 ---
function sendBulkEmail() {
  // --- 設定値 ---
  const SHEET_NAME = 'シート1';        // 対象シート名
  const TEST_MODE = true;              // true=自分のみに送信（テスト用）
  const TEST_EMAIL = 'your-email@example.com'; // テスト用の自分のアドレス
  const SENDER_NAME = '山田 太郎';      // 差出人表示名

  // --- メールテンプレート ---
  const subjectTemplate = '{{subject}}のご案内';
  const bodyTemplate = `{{company}}
{{name}}様

いつも大変お世話になっております。
山田です。

{{subject}}についてご連絡いたします。
詳細は添付の資料をご確認ください。

引き続きよろしくお願いいたします。`;

  // --- スプレッドシートからデータ取得 ---
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME);
  const values = sheet.getDataRange().getValues(); // 全データを2次元配列で取得
  const header = values[0];                         // 1行目はヘッダー
  const rows = values.slice(1);                     // 2行目以降がデータ

  // --- 残り送信可能数チェック ---
  const quota = MailApp.getRemainingDailyQuota();
  if (quota &lt; rows.length) {
    throw new Error('送信可能数が不足: 残り' + quota + '通 / 必要' + rows.length + '通');
  }

  // --- 行ごとに送信 ---
  let successCount = 0; // 成功カウンター
  let errorCount = 0;   // 失敗カウンター
  rows.forEach((row, i) =&gt; {
    const email   = row[0]; // A列: メールアドレス
    const name    = row[1]; // B列: 名前
    const company = row[2]; // C列: 会社名
    const subject = row[3]; // D列: 件名差し込み
    const status  = row[4]; // E列: 送信ステータス

    // --- 既に送信済みの行はスキップ ---
    if (status === '済') return;
    // --- メールアドレスが空の行はスキップ ---
    if (!email) return;

    // --- テンプレートを差し込み置換 ---
    const finalSubject = subjectTemplate.replace(/{{subject}}/g, subject);
    const finalBody    = bodyTemplate
      .replace(/{{name}}/g, name)
      .replace(/{{company}}/g, company)
      .replace(/{{subject}}/g, subject);

    // --- テストモードなら自分宛に送信、本番なら本人宛 ---
    const recipient = TEST_MODE ? TEST_EMAIL : email;

    try {
      MailApp.sendEmail(recipient, finalSubject, finalBody, {
        name: SENDER_NAME
      });
      // --- 送信成功時はE列に「済」を書き込み ---
      if (!TEST_MODE) {
        sheet.getRange(i + 2, 5).setValue('済');
      }
      successCount++;
    } catch (e) {
      // --- 失敗時はE列にエラー内容を記録 ---
      sheet.getRange(i + 2, 5).setValue('エラー: ' + e.message);
      errorCount++;
    }
  });

  // --- 完了メッセージ ---
  const mode = TEST_MODE ? 'テスト' : '本番';
  SpreadsheetApp.getUi().alert(
    mode + '送信完了n成功: ' + successCount + '件 / 失敗: ' + errorCount + '件'
  );
}</code></pre>



<h3 class="wp-block-heading"><span id="toc9">実行手順</span></h3>



<ol class="wp-block-list"><li>スクリプトエディタ上部の関数選択で <code>sendBulkEmail</code> を選択</li><li>「実行」ボタンをクリック</li><li>初回は権限承認の画面が出るので、「権限を確認」→「（自分のアカウント）」→「詳細」→「（プロジェクト名）（安全ではないページ）に移動」→「許可」の順に進める</li><li>完了アラートが出れば成功</li></ol>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>WARNING: 初回は必ず TEST_MODE = true で実行してください</strong><br>いきなり本番送信すると誤送信のリスクが高いです。最初は <code>TEST_MODE = true</code> のまま自分のアドレス宛に何通か送って、本文と件名の差し込みが正しく動くか確認しましょう。問題なければ <code>TEST_MODE = false</code> に変更して本番実行します。</p></blockquote>



<h3 class="wp-block-heading"><span id="toc10">コードの読み解きポイント</span></h3>



<ul class="wp-block-list"><li><code>sheet.getDataRange().getValues()</code> でシート全体を2次元配列にして取得</li><li><code>values.slice(1)</code> で1行目（ヘッダー）を除外</li><li><code>replace(/{{name}}/g, name)</code> の <code>g</code> フラグは「全置換」の意味。同じプレースホルダーが複数回出てきても全部置換される</li><li><code>MailApp.sendEmail()</code> の第4引数 <code>options</code> で差出人表示名を指定</li><li>行番号は <code>i + 2</code>（配列インデックス0始まり + ヘッダー行1分）</li></ul>



<h2 class="wp-block-heading"><span id="toc11">【レシピ2】HTMLメール（装飾付き）で一括送信する</span></h2>



<p class="wp-block-paragraph">太字や色付き文字、表組みを入れたHTMLメールも、<code>htmlBody</code> オプションを使えば送信できます。請求書の合計金額を強調したい、注意事項を赤文字にしたい、といったケースで便利です。</p>



<pre class="wp-block-code"><code>// --- HTMLメールの一括送信 ---
function sendBulkHtmlEmail() {
  const SHEET_NAME = 'シート1';
  const TEST_MODE = true;
  const TEST_EMAIL = 'your-email@example.com';
  const SENDER_NAME = '山田 太郎';

  const subjectTemplate = '【重要】{{subject}}のご案内';

  // --- HTML本文テンプレート ---
  const htmlTemplate = `
&lt;p&gt;{{company}}&lt;br&gt;{{name}}様&lt;/p&gt;
&lt;p&gt;いつも大変お世話になっております。&lt;br&gt;山田です。&lt;/p&gt;
&lt;p&gt;{{subject}}についてご連絡いたします。&lt;/p&gt;
&lt;table style=&quot;border-collapse:collapse;border:1px solid #ccc;&quot;&gt;
  &lt;tr style=&quot;background:#f5f5f5;&quot;&gt;
    &lt;th style=&quot;padding:8px;border:1px solid #ccc;&quot;&gt;項目&lt;/th&gt;
    &lt;th style=&quot;padding:8px;border:1px solid #ccc;&quot;&gt;内容&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td style=&quot;padding:8px;border:1px solid #ccc;&quot;&gt;対応期限&lt;/td&gt;
    &lt;td style=&quot;padding:8px;border:1px solid #ccc;color:#c00;&quot;&gt;&lt;strong&gt;5月20日（火）まで&lt;/strong&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;ご不明点がございましたら、本メールに返信ください。&lt;/p&gt;
&lt;p&gt;引き続きよろしくお願いいたします。&lt;/p&gt;
`;

  // --- プレーンテキスト版（HTML非対応クライアント用） ---
  const plainTemplate = `{{company}}
{{name}}様

いつも大変お世話になっております。
山田です。

{{subject}}についてご連絡いたします。
対応期限: 5月20日（火）まで

ご不明点がございましたら、本メールに返信ください。
引き続きよろしくお願いいたします。`;

  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME);
  const rows = sheet.getDataRange().getValues().slice(1);

  let successCount = 0; // 成功カウンター
  rows.forEach((row, i) =&gt; {
    const email   = row[0]; // A列: メールアドレス
    const name    = row[1]; // B列: 名前
    const company = row[2]; // C列: 会社名
    const subject = row[3]; // D列: 件名差し込み
    const status  = row[4]; // E列: 送信ステータス
    if (status === '済' || !email) return;

    const finalSubject = subjectTemplate.replace(/{{subject}}/g, subject);
    const finalHtml = htmlTemplate
      .replace(/{{name}}/g, name)
      .replace(/{{company}}/g, company)
      .replace(/{{subject}}/g, subject);
    const finalPlain = plainTemplate
      .replace(/{{name}}/g, name)
      .replace(/{{company}}/g, company)
      .replace(/{{subject}}/g, subject);

    const recipient = TEST_MODE ? TEST_EMAIL : email;
    MailApp.sendEmail(recipient, finalSubject, finalPlain, {
      name: SENDER_NAME,
      htmlBody: finalHtml
    });
    if (!TEST_MODE) sheet.getRange(i + 2, 5).setValue('済');
    successCount++;
  });

  SpreadsheetApp.getUi().alert('HTML送信完了: ' + successCount + '件');
}</code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP: HTMLメールはインラインCSSのみ使う</strong><br>HTMLメールでは、外部CSSファイルや<code><style></code>タグ内のクラス指定が効かないクライアントが多いです。色や枠線などのスタイルは、すべて要素の <code>style</code> 属性に直接書く（インラインCSS）のが鉄則です。</p></blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE: スパム判定を避けるコツ</strong><br>HTMLメールは過度な装飾・大量の画像・リンク多すぎでスパム判定されやすくなります。本文内のリンクは2〜3個までに抑え、画像はロゴ程度にとどめましょう。件名に「【無料】」「【限定】」といった煽り文句を多用するのも避けてください。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc12">【レシピ3】PDF・画像を添付ファイルとして一括送信する</span></h2>



<p class="wp-block-paragraph">請求書PDFを行ごとに別ファイルで添付したい、といった要望もよくあります。Google Driveに保存したファイルを <code>DriveApp</code> 経由で取得して添付します。</p>



<h3 class="wp-block-heading"><span id="toc13">準備: スプレッドシートに「添付ファイルID列」を追加</span></h3>



<p class="wp-block-paragraph">F列に「添付ファイルID」列を追加し、Google DriveのファイルIDを各行に書きます。ファイルIDはDriveでファイルを開いたときのURL <code>https://drive.google.com/file/d/{ファイルID}/view</code> から取得できます。</p>



<figure class="wp-block-table"><table><thead><tr><th>A: メール</th><th>B: 名前</th><th>C: 会社</th><th>D: 件名</th><th>E: ステータス</th><th>F: ファイルID</th></tr></thead><tbody><tr><td>sample01@...</td><td>山田太郎</td><td>サンプル</td><td>4月度請求書</td><td>（空欄）</td><td>1AbCdEf...</td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><span id="toc14">コード本体</span></h3>



<pre class="wp-block-code"><code>// --- 添付ファイル付きの一括送信 ---
function sendBulkEmailWithAttachment() {
  const SHEET_NAME = 'シート1';
  const TEST_MODE = true;
  const TEST_EMAIL = 'your-email@example.com';
  const SENDER_NAME = '山田 太郎';

  const subjectTemplate = '{{subject}}（請求書添付）';
  const bodyTemplate = `{{company}}
{{name}}様

いつもお世話になっております。山田です。
{{subject}}を添付にてお送りいたします。
ご確認のほどよろしくお願いいたします。`;

  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME);
  const rows = sheet.getDataRange().getValues().slice(1);

  let successCount = 0; // 成功カウンター
  rows.forEach((row, i) =&gt; {
    const email   = row[0]; // A列: メールアドレス
    const name    = row[1]; // B列: 名前
    const company = row[2]; // C列: 会社名
    const subject = row[3]; // D列: 件名差し込み
    const status  = row[4]; // E列: 送信ステータス
    const fileId  = row[5]; // F列: 添付ファイルID
    if (status === '済' || !email) return;

    // --- 添付ファイルをDriveから取得 ---
    let attachmentBlob = null;
    if (fileId) {
      try {
        attachmentBlob = DriveApp.getFileById(fileId).getBlob();
      } catch (e) {
        sheet.getRange(i + 2, 5).setValue('エラー: ファイルID不正');
        return;
      }
    }

    const finalSubject = subjectTemplate.replace(/{{subject}}/g, subject);
    const finalBody = bodyTemplate
      .replace(/{{name}}/g, name)
      .replace(/{{company}}/g, company)
      .replace(/{{subject}}/g, subject);

    const recipient = TEST_MODE ? TEST_EMAIL : email;
    const options = { name: SENDER_NAME };
    if (attachmentBlob) options.attachments = [attachmentBlob];

    try {
      MailApp.sendEmail(recipient, finalSubject, finalBody, options);
      if (!TEST_MODE) sheet.getRange(i + 2, 5).setValue('済');
      successCount++;
    } catch (e) {
      sheet.getRange(i + 2, 5).setValue('エラー: ' + e.message);
    }
  });

  SpreadsheetApp.getUi().alert('添付付き送信完了: ' + successCount + '件');
}</code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP: 添付ファイルの合計サイズは25MBまで</strong><br>Gmailの仕様で、添付ファイルの合計サイズは1通あたり25MB以内です。これを超える場合はGoogle Driveのリンク共有を使い、本文に共有URLを差し込む方式が安全です。<code>DriveApp.getFileById(id).getUrl()</code> でファイルURLを取得できます。</p></blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE: スプレッドシート自体をPDF化して添付する場合</strong><br>別シートに作った請求書テーブルをPDFにして添付したい場合は、<code>DriveApp.getFileById(spreadsheetId).getAs('application/pdf')</code> でPDF Blobを生成できます。スプレッドシートIDはシートのURLから取得します。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc15">送信前のテスト方法と誤送信を防ぐ4つのコツ</span></h2>



<p class="wp-block-paragraph">一括送信は便利ですが、誤送信したときのダメージも大きいです。送信ボタンを押す前に、必ず以下の4つを実施しましょう。</p>



<h3 class="wp-block-heading"><span id="toc16">コツ1: TEST_MODE で自分宛に送信して確認する</span></h3>



<p class="wp-block-paragraph">レシピ1〜3のコードはすべて <code>TEST_MODE = true</code> で動作確認できる構造になっています。最初は必ず自分のアドレスにだけ送信し、件名・本文の差し込みが正しいか、添付ファイルが付いているかを目視確認してください。</p>



<h3 class="wp-block-heading"><span id="toc17">コツ2: 送信件数を絞ってから本番実行する</span></h3>



<p class="wp-block-paragraph">スプレッドシートのデータが100行ある場合、いきなり全部送信せず、最初の3〜5行だけ残して他は別シートに退避させ、少数で本番実行→問題なければ残りを実行、という段階的なやり方が安全です。</p>



<h3 class="wp-block-heading"><span id="toc18">コツ3: 送信前に getRemainingDailyQuota() で残数を確認</span></h3>



<p class="wp-block-paragraph">レシピ1のコードに含めてある通り、送信前に残り送信可能数をチェックします。これがないと、80通目で上限に到達して残り20通が未送信のまま停止する、という事故が起きます。</p>



<pre class="wp-block-code"><code>const quota = MailApp.getRemainingDailyQuota();
console.log('残り送信可能数: ' + quota);</code></pre>



<h3 class="wp-block-heading"><span id="toc19">コツ4: 送信ステータス列で重複送信を防ぐ</span></h3>



<p class="wp-block-paragraph">E列の「送信ステータス」に「済」を書き込む仕組みは、重複送信防止のためです。途中でブラウザが落ちたり、コードがエラーで停止したりしても、再実行時に「済」の行はスキップされるので安全です。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>WARNING: BCC欄に入れる安易な一斉送信は厳禁</strong><br>「Gmailの To 欄に複数アドレス」「BCCに大量アドレス」といったやり方は、相手のメールアドレスが他の受信者に見えてしまう個人情報漏洩リスクがあります。一括送信は必ずGAS経由で1通ずつ個別送信してください。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc20">BCC一斉送信とGAS差し込み送信の違い・使い分け</span></h2>



<p class="wp-block-paragraph">そもそも「Gmail BCCで全員に送ればいいのでは？」と思った方もいるかもしれません。両者の違いを表で整理します。</p>



<figure class="wp-block-table"><table><thead><tr><th>項目</th><th>BCC一斉送信</th><th>GAS差し込み送信</th></tr></thead><tbody><tr><td>個別の宛名差し込み</td><td>できない</td><td>できる（{{name}}様 等）</td></tr><tr><td>送信先のリスト管理</td><td>連絡先・アドレス帳</td><td>スプレッドシートで管理</td></tr><tr><td>送信履歴の追跡</td><td>1通分しか残らない</td><td>各通ごとに履歴</td></tr><tr><td>エラー時の個別検知</td><td>できない</td><td>try-catchで行ごとに検知</td></tr><tr><td>添付ファイルの個別変更</td><td>できない（全員同じ）</td><td>できる（行ごとに別ファイル）</td></tr><tr><td>個人情報漏洩リスク</td><td>TO/CCに入れると漏洩</td><td>1通ずつなのでなし</td></tr><tr><td>1メールの宛先上限</td><td>500件まで（Workspace）</td><td>100通/日（無料）, 1500通/日（有料）</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">ざっくり使い分けると、以下のようになります。</p>



<ul class="wp-block-list"><li><strong>BCC一斉送信が向くケース</strong>: 内容がまったく同じ・宛名差し込み不要・社内メンバー数十名への一斉連絡</li><li><strong>GAS差し込み送信が向くケース</strong>: 宛名・会社名・添付ファイルを個別に変えたい・送信履歴を残したい・送信ミスを行ごとに検知したい</li></ul>



<p class="wp-block-paragraph">社外への請求書送付や顧客向けセミナー案内などは、誤送信リスクと個別性の観点からGAS差し込み送信が安全です。</p>



<h2 class="wp-block-heading"><span id="toc21">スプレッドシート×Gmail一括送信でよくあるエラーと対処法</span></h2>



<p class="wp-block-paragraph">実際にコードを動かしてみて遭遇しやすいエラーをまとめました。</p>



<figure class="wp-block-table"><table><thead><tr><th>エラーメッセージ</th><th>原因</th><th>対処法</th></tr></thead><tbody><tr><td><code>Service invoked too many times: email</code></td><td>1日の送信上限に到達</td><td>24時間待つ、またはWorkspaceに切り替え</td></tr><tr><td><code>Authorization is required</code></td><td>権限承認が未完了</td><td>スクリプトエディタで「権限を確認」を実施</td></tr><tr><td><code>Invalid email: </code></td><td>メールアドレス列に不正な値</td><td>A列の値を確認、空欄行のスキップ処理を追加</td></tr><tr><td><code>Cannot find file with id: xxx</code></td><td>DriveApp.getFileById のIDが間違い</td><td>F列のファイルIDを再確認、共有設定も確認</td></tr><tr><td><code>Cannot read property '0' of undefined</code></td><td>シート名が間違い、またはシートが空</td><td><code>SHEET_NAME</code> の値を確認</td></tr><tr><td><code>Exception: Argument too large: subject</code></td><td>件名が長すぎ（256文字超）</td><td>件名を短く調整</td></tr><tr><td>メールが届かない</td><td>スパムフォルダ行き</td><td>件名・本文の煽り文句を減らす、送信元表示名を固定</td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><span id="toc22">よくある間違い: 「済」の判定で全角と半角が混在</span></h3>



<p class="wp-block-paragraph">「済」の文字を全角で書いたり、前後にスペースが入ったりすると、判定がうまくいかず重複送信が起きます。コード内で書き込む値と判定する値を完全一致させましょう。心配な場合は <code>if (String(status || '').trim() === '済') return;</code> のように <code>String()</code> でラップしてから <code>.trim()</code> で前後空白を除去すると、空セル（undefined/null）でも安全に判定できます。</p>



<h3 class="wp-block-heading"><span id="toc23">よくある間違い: 改行コードの混在</span></h3>



<p class="wp-block-paragraph">スプレッドシートのセル内改行（Alt+Enter）と、コード内のテンプレート文字列（バッククォート <code> </code> の改行）はどちらも <code>n</code> として扱われますが、Windows環境からコピペしたデータでは <code>rn</code> が混入することがあります。送信されたメールで改行が崩れる場合は、コード冒頭で <code>text.replace(/rn/g, 'n')</code> のように正規化を入れてください。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP: Slack通知と組み合わせる</strong><br>送信完了時にSlackへ自動通知すると、運用効率がさらに上がります。SlackのIncoming Webhookを使った通知方法は、<a href="https://mashukabu.com/google-form-gas-auto-aggregate/">GoogleフォームとGAS連携記事</a>のレシピ2で詳しく解説しています。一括送信の最後に流用できるので、合わせて確認してください。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc24">まとめ｜スプレッドシート×GASでメール送信業務を一気に効率化する</span></h2>



<p class="wp-block-paragraph">スプレッドシートからGmailを一括送信するGASの仕組みを、3パターンのコピペコード（基本／HTMLメール／添付ファイル付き）と実務Tipsで解説しました。重要なポイントを最後にもう一度まとめます。</p>



<ul class="wp-block-list"><li>スプレッドシートに「メール／名前／会社／件名／ステータス」の5列を用意する</li><li>本文に <code>{{name}}</code> 等のプレースホルダーを書き、<code>replace()</code> で差し込み置換する</li><li>必ず <code>TEST_MODE = true</code> で自分宛に動作確認してから本番実行する</li><li>Gmail送信上限は無料100通／日、Workspace 1,500通／日。<code>getRemainingDailyQuota()</code> で事前チェック</li><li>送信ステータス列で重複送信を防ぎ、try-catchでエラー行を記録する</li><li>HTMLメール・添付ファイルも <code>options</code> 引数で柔軟に対応できる</li><li>BCC一斉送信は宛名差し込みできず、TO欄に入れた誤送信で個人情報漏洩リスクあり</li><li>送信履歴・差し込み・添付ファイル個別変更が必要ならGAS差し込み送信が最適</li></ul>



<p class="wp-block-paragraph">これで、Word差し込み印刷のメール版が無料で実現できます。GAS自動化シリーズ3部作の最終回として、ぜひ業務に取り入れてみてください。</p>



<p class="wp-block-paragraph">シリーズ全体を読み返したい方は、入門の<a href="https://mashukabu.com/spreadsheet-gas-getting-started-recipes/">GAS入門｜スプレッドシート自動化レシピ5選</a>、続編の<a href="https://mashukabu.com/google-form-gas-auto-aggregate/">Googleフォーム×GASで回答を自動通知・集計する方法</a>も合わせてご覧ください。3記事を組み合わせれば、データ収集（フォーム）→ 自動集計（スプレッドシート＋GAS）→ メール送信（一括差し込み）という業務自動化の基本パターンがすべて押さえられます。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/spreadsheet-gmail-batch-send-gas/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>スプレッドシートのタイムラインビューの使い方｜関数ゼロでガントチャート風スケジュール管理</title>
		<link>https://mashukabu.com/google-sheets-timeline-view/</link>
					<comments>https://mashukabu.com/google-sheets-timeline-view/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Fri, 12 Jun 2026 21:58:05 +0000</pubDate>
				<category><![CDATA[Googleスプレッドシート]]></category>
		<category><![CDATA[Google Workspace]]></category>
		<category><![CDATA[ガントチャート]]></category>
		<category><![CDATA[スケジュール管理]]></category>
		<category><![CDATA[スプレッドシート]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=7978</guid>

					<description><![CDATA[スプレッドシートのタイムラインビューの使い方を解説します。関数や条件付き書式を使わず、表を選んで挿入するだけでガントチャート風のスケジュール管理が作れる公式機能です。データの準備・挿入手順・色分け・表示されないときの対処まで初心者向けにまとめました。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">プロジェクトやチームのスケジュールを、スプレッドシートでガントチャートのように見える化したい。そう思って調べると、たいてい「条件付き書式」や「IF関数」を使う作り方が出てきます。設定が複雑で、途中で挫折した経験はありませんか。</p>



<p class="wp-block-paragraph">実は、Googleスプレッドシートには「タイムラインビュー」という公式機能があります。これは、いつもの表を選んで挿入するだけで、ガントチャート風のスケジュールが自動で出来上がる機能です。関数も条件付き書式も使いません。</p>



<p class="wp-block-paragraph">この記事では、スプレッドシートのタイムラインビューの使い方を、初心者の方向けに順を追って解説します。データの準備から挿入手順、色分けやグループ化、うまく表示されないときの対処までまとめました。専用のプロジェクト管理ツールを契約する必要はありません。お使いのGoogle Workspaceだけで、スケジュール管理を完結できますよ。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-5" checked><label class="toc-title" for="toc-checkbox-5">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">スプレッドシートのタイムラインビューとは？関数ゼロで作るスケジュール管理</a></li><li><a href="#toc2" tabindex="0">タイムラインビューを使う前に：利用できるアカウントを確認しよう</a></li><li><a href="#toc3" tabindex="0">データを準備する（タイムラインビューの必要な列）</a><ol><li><a href="#toc4" tabindex="0">最低限そろえたい列</a></li><li><a href="#toc5" tabindex="0">あると便利な列</a></li></ol></li><li><a href="#toc6" tabindex="0">タイムラインビューを挿入する3ステップ</a><ol><li><a href="#toc7" tabindex="0">ステップ1：データ範囲を選ぶ</a></li><li><a href="#toc8" tabindex="0">ステップ2：「挿入」→「タイムライン」をクリック</a></li><li><a href="#toc9" tabindex="0">ステップ3：データ範囲を確認して「OK」</a></li></ol></li><li><a href="#toc10" tabindex="0">実務で役立つカスタマイズ（色分け・グループ化・期間単位）</a><ol><li><a href="#toc11" tabindex="0">カードを色分けする</a></li><li><a href="#toc12" tabindex="0">カードをグループ化する</a></li><li><a href="#toc13" tabindex="0">期間単位を切り替える</a></li><li><a href="#toc14" tabindex="0">表示モードを変える</a></li></ol></li><li><a href="#toc15" tabindex="0">うまく表示されないときの対処</a><ol><li><a href="#toc16" tabindex="0">カードが1日分しか表示されない</a></li><li><a href="#toc17" tabindex="0">「挿入」メニューに「タイムライン」がない</a></li><li><a href="#toc18" tabindex="0">元の表を直しても反映されない</a></li><li><a href="#toc19" tabindex="0">エラーメッセージが表示される</a></li></ol></li><li><a href="#toc20" tabindex="0">手作りガントチャート・タスク管理表との使い分け</a></li><li><a href="#toc21" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">スプレッドシートのタイムラインビューとは？関数ゼロで作るスケジュール管理</span></h2>



<p class="wp-block-paragraph">タイムラインビューは、スプレッドシートの表データをカード形式の横棒で表示する機能です。タスクごとに「いつ始まって、いつ終わるのか」が一目でわかる、ガントチャートのようなビューを作れます。</p>



<p class="wp-block-paragraph">ガントチャートとは、横軸に時間、縦軸にタスクを並べて、各タスクの期間を横棒で表したスケジュール表のことです。プロジェクトの全体像をつかむのに向いています。</p>



<p class="wp-block-paragraph">タイムラインビューのいちばんの魅力は、その手軽さです。タスク名・開始日・終了日を入力した表さえあれば、あとは範囲を選んで挿入するだけ。関数を覚える必要も、条件付き書式のルールを組む必要もありません。</p>



<p class="wp-block-paragraph">具体的には、次のような場面で役立ちます。</p>



<ul class="wp-block-list"><li>プロジェクトのタスク管理</li><li>マーケティングキャンペーンの日程管理</li><li>チームの作業スケジュール共有</li><li>今後の予定の見える化</li></ul>



<p class="wp-block-paragraph">「ガントチャートは作りたいけれど、複雑な設定はしたくない」という方にぴったりの機能ですよ。</p>



<h2 class="wp-block-heading"><span id="toc2">タイムラインビューを使う前に：利用できるアカウントを確認しよう</span></h2>



<p class="wp-block-paragraph">便利なタイムラインビューですが、使い始める前に1つだけ確認してほしいことがあります。それは「お使いのアカウントが対応しているか」です。</p>



<p class="wp-block-paragraph">タイムラインビューは、Google Workspaceの機能として提供されています。会社や学校で使っているアカウント、つまりBusiness StarterやBusiness Standard、Enterprise、Educationといったエディションで利用できます。</p>



<p class="wp-block-paragraph">一方で、個人で使っている無料のGoogleアカウントでは、「挿入」メニューに「タイムライン」が表示されないことがあります。メニューを探しても見つからないときは、まずアカウントの種類を疑ってみてください。</p>



<p class="wp-block-paragraph">会社や学校のアカウントを持っている方は、ほとんどの場合そのまま使えます。使えるかわからないときは、後ほど紹介する手順で「挿入」メニューを開いてみましょう。そこに「タイムライン」があるかどうかで確認できます。</p>



<h2 class="wp-block-heading"><span id="toc3">データを準備する（タイムラインビューの必要な列）</span></h2>



<p class="wp-block-paragraph">タイムラインビューは表データをもとに作られます。そのため、まずは元になる表を整えることが大切です。ここで一番のポイントは「日付を日付形式で入力する」ことです。</p>



<h3 class="wp-block-heading"><span id="toc4">最低限そろえたい列</span></h3>



<p class="wp-block-paragraph">タイムラインを作るには、少なくとも次の3つの列があると安心です。</p>



<figure class="wp-block-table"><table><thead><tr><th>列</th><th>役割</th><th>入力する内容</th></tr></thead><tbody><tr><td>カードのタイトル</td><td>各タスクの名前</td><td>「企画書作成」「デザイン確認」など</td></tr><tr><td>開始日</td><td>タスクが始まる日</td><td>日付形式（例: 2026/06/01）</td></tr><tr><td>終了日</td><td>タスクが終わる日</td><td>日付形式（例: 2026/06/05）</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">開始日と終了日は、必ず「日付形式」で入力してください。見た目が日付でも、文字列として入っていると正しく表示されません。日付形式かどうか不安なときは、後述の対処法でチェックできますよ。</p>



<h3 class="wp-block-heading"><span id="toc5">あると便利な列</span></h3>



<p class="wp-block-paragraph">次の列は必須ではありませんが、入れておくとタイムラインがぐっと見やすくなります。</p>



<figure class="wp-block-table"><table><thead><tr><th>列</th><th>役割</th></tr></thead><tbody><tr><td>期間</td><td>終了日の代わりに、タスクの長さを日数で指定できる</td></tr><tr><td>カードの詳細</td><td>各タスクの補足説明</td></tr><tr><td>カードの色</td><td>カードの背景色の元になる列</td></tr><tr><td>カードグループ</td><td>担当者やフェーズごとにカードをまとめる</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">「期間」は、終了日の代わりに使える便利な項目です。たとえば終了日を決めずに「このタスクは3日間」と日数で指定したいときに役立ちます。期間を使うと「週末を含めるかどうか」も選べるようになりますよ。</p>



<p class="wp-block-paragraph">サンプルとして、次のような表を用意したとイメージしてください。</p>



<figure class="wp-block-table"><table><thead><tr><th>タスク名</th><th>開始日</th><th>終了日</th><th>担当</th></tr></thead><tbody><tr><td>企画書作成</td><td>2026/06/01</td><td>2026/06/05</td><td>田中</td></tr><tr><td>デザイン制作</td><td>2026/06/04</td><td>2026/06/12</td><td>佐藤</td></tr><tr><td>レビュー</td><td>2026/06/13</td><td>2026/06/15</td><td>田中</td></tr><tr><td>公開準備</td><td>2026/06/16</td><td>2026/06/19</td><td>佐藤</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">この表があれば、すぐにタイムラインビューを作れます。次の章で実際に挿入してみましょう。</p>



<h2 class="wp-block-heading"><span id="toc6">タイムラインビューを挿入する3ステップ</span></h2>



<p class="wp-block-paragraph">表が準備できたら、いよいよタイムラインビューを作ります。手順はとてもシンプルで、3ステップで完了します。</p>



<h3 class="wp-block-heading"><span id="toc7">ステップ1：データ範囲を選ぶ</span></h3>



<p class="wp-block-paragraph">まず、タイムラインにしたい表の範囲を選択します。見出し行も含めて、表全体をドラッグして選んでおきましょう。範囲を選ばずに進めても、あとからスプレッドシートが範囲を提案してくれるので大丈夫です。</p>



<h3 class="wp-block-heading"><span id="toc8">ステップ2：「挿入」→「タイムライン」をクリック</span></h3>



<p class="wp-block-paragraph">メニューバーの「挿入」をクリックし、表示されたメニューから「タイムライン」を選びます。すると、データ範囲を確認する小さなウィンドウが開きます。</p>



<h3 class="wp-block-heading"><span id="toc9">ステップ3：データ範囲を確認して「OK」</span></h3>



<p class="wp-block-paragraph">ウィンドウに表示された範囲が正しいか確認し、「OK」をクリックします。これだけで、新しい「タイムライン ビュー」タブが追加され、横棒のカードが並んだスケジュールが表示されます。</p>



<p class="wp-block-paragraph">たったこれだけで、ガントチャート風のビューが完成です。関数も条件付き書式も一切使っていないのに、きれいなタイムラインができあがりましたね。</p>



<p class="wp-block-paragraph">なお、開始日や終了日の列をスプレッドシートが自動で読み取れないこともあります。その場合は、タイムラインビュータブの「設定」アイコンから、どの列を「開始日」「終了日」にするかを手動で割り当てられます。思った通りに表示されないときは、この設定を見直してみてください。</p>



<h2 class="wp-block-heading"><span id="toc10">実務で役立つカスタマイズ（色分け・グループ化・期間単位）</span></h2>



<p class="wp-block-paragraph">タイムラインビューは作って終わりではありません。少し手を加えるだけで、ぐっと見やすく実用的になります。ここでは実務でよく使うカスタマイズを紹介します。</p>



<h3 class="wp-block-heading"><span id="toc11">カードを色分けする</span></h3>



<p class="wp-block-paragraph">担当者やタスクの種類ごとに色を変えると、誰が何をいつやるのかが一目でわかります。タイムラインビュータブの「設定」から「カードの色」を開き、色の元にする列を選びます。</p>



<p class="wp-block-paragraph">たとえば「担当」列を指定すれば、担当者ごとに色を分けられます。個別のカードを選んで、直接色を変えることもできますよ。</p>



<p class="wp-block-paragraph">1つだけ注意点があります。元になる表のデータに条件付き書式を設定していると、タイムライン上でカードの色を変更できなくなります。色を自由に変えたいときは、元データの条件付き書式を外しておきましょう。</p>



<h3 class="wp-block-heading"><span id="toc12">カードをグループ化する</span></h3>



<p class="wp-block-paragraph">「カードグループ」を設定すると、同じ種類のカードを1つの行にまとめられます。たとえば担当者ごと、プロジェクトのフェーズごとにグループ化すると、整理されたスケジュールになります。</p>



<h3 class="wp-block-heading"><span id="toc13">期間単位を切り替える</span></h3>



<p class="wp-block-paragraph">タイムラインの横軸は、表示する期間の単位を切り替えられます。短期のタスクなら「日」や「週」、長期のプロジェクトなら「月」や「四半期」がおすすめです。</p>



<p class="wp-block-paragraph">選べる単位は、日・週・月・四半期・年・複数年の6種類です。プロジェクトの長さに合わせて切り替えてみてください。</p>



<h3 class="wp-block-heading"><span id="toc14">表示モードを変える</span></h3>



<p class="wp-block-paragraph">カードの並び方も3種類から選べます。</p>



<figure class="wp-block-table"><table><thead><tr><th>表示モード</th><th>特徴</th></tr></thead><tbody><tr><td>標準</td><td>カードの間隔が広い、見やすいデフォルト表示</td></tr><tr><td>最小</td><td>カードの間隔を狭めて、たくさんのタスクを表示</td></tr><tr><td>折りたたみ</td><td>同じグループのカードを1行にまとめて表示</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">タスクの数が多くて画面に収まらないときは「最小」、全体をコンパクトに見たいときは「折りたたみ」を使うと便利ですよ。</p>



<h2 class="wp-block-heading"><span id="toc15">うまく表示されないときの対処</span></h2>



<p class="wp-block-paragraph">タイムラインビューがうまく作れない、思った通りに表示されない。そんなときは、ここで紹介する原因をチェックしてみてください。よくあるパターンはだいたい決まっています。</p>



<h3 class="wp-block-heading"><span id="toc16">カードが1日分しか表示されない</span></h3>



<p class="wp-block-paragraph">横棒が伸びず、1日分の点のようにしか表示されないことがあります。これは次の2つが原因のほとんどです。</p>



<p class="wp-block-paragraph">1つ目は、日付が「日付形式」になっていないケースです。文字列として日付が入力されていると、タイムラインが正しく期間を読み取れません。セルを選んで日付形式に変換するか、<code>DATEVALUE</code>関数（文字列の日付を日付の値に変換する関数）を使って正しい形式にしましょう。</p>



<p class="wp-block-paragraph">2つ目は、開始日と終了日が同じになっているケースです。開始日は終了日より前の日付にしてください。同じ日や逆の日付だと、横棒が表示されません。</p>



<h3 class="wp-block-heading"><span id="toc17">「挿入」メニューに「タイムライン」がない</span></h3>



<p class="wp-block-paragraph">メニューを探しても「タイムライン」が見つからない場合、お使いのアカウントが対応していない可能性があります。前の章でも触れたとおり、個人の無料Googleアカウントでは表示されないことがあります。会社や学校のアカウントで試してみてください。</p>



<h3 class="wp-block-heading"><span id="toc18">元の表を直しても反映されない</span></h3>



<p class="wp-block-paragraph">タイムラインビューはあくまで表データを映す「ビュー」です。データの実体は元のシートにあります。内容を修正したいときは、カードを選んで「データを編集」をクリックすると、元のソースデータが開きます。そこで行を編集すれば、タイムラインにも反映されますよ。</p>



<h3 class="wp-block-heading"><span id="toc19">エラーメッセージが表示される</span></h3>



<p class="wp-block-paragraph">タイムラインビューにエラーメッセージが出たときは、メッセージの指示に沿ってデータを直すのが確実です。多くの場合、日付の形式や列の指定に原因があります。</p>



<h2 class="wp-block-heading"><span id="toc20">手作りガントチャート・タスク管理表との使い分け</span></h2>



<p class="wp-block-paragraph">スプレッドシートでスケジュールを管理する方法は、タイムラインビューだけではありません。当ブログでは「条件付き書式で作る手作りガントチャート」や「チェックボックスで作る進捗管理表」も紹介しています。それぞれ向いている場面が違うので、ここで整理しておきましょう。</p>



<figure class="wp-block-table"><table><thead><tr><th>方法</th><th>特徴</th><th>向いている人</th></tr></thead><tbody><tr><td>タイムラインビュー</td><td>表を選んで挿入するだけ。関数ゼロ</td><td>とにかく手軽に始めたい人</td></tr><tr><td>手作りガントチャート</td><td>条件付き書式とIF関数で自作</td><td>見た目を細かく作り込みたい人</td></tr><tr><td>タスク・進捗管理表</td><td>チェックボックスとCOUNTIFで進捗率を出す</td><td>進捗の数値管理をしたい人</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">タイムラインビューは「いちばん手軽な選択肢」です。まずは表があれば数クリックで始められます。</p>



<p class="wp-block-paragraph">一方で、「色やレイアウトを自分好みに細かく調整したい」という方には、条件付き書式で作る方法が向いています。詳しくは<a href="https://mashukabu.com/spreadsheet-gantt-chart/">スプレッドシートでガントチャートを作る方法</a>で解説しています。</p>



<p class="wp-block-paragraph">また、「タスクの進捗率をパーセントで管理したい」という方には、チェックボックスを使う方法がおすすめです。こちらは<a href="https://mashukabu.com/spreadsheet-task-progress-management/">スプレッドシートでタスク・進捗管理表を作る方法</a>を参考にしてみてください。</p>



<p class="wp-block-paragraph">目的に合わせて使い分けると、スケジュール管理がもっと快適になりますよ。</p>



<h2 class="wp-block-heading"><span id="toc21">まとめ</span></h2>



<p class="wp-block-paragraph">スプレッドシートのタイムラインビューについて解説しました。最後に要点を振り返ります。</p>



<ul class="wp-block-list"><li>タイムラインビューは、表を選んで挿入するだけでガントチャート風のスケジュールが作れる公式機能</li><li>関数も条件付き書式も使わないので、初心者でも数クリックで完成する</li><li>使う前に、対応アカウント（Google Workspace）かどうかを確認する</li><li>データは「カードのタイトル・開始日・終了日」を日付形式でそろえるのが基本</li><li>色分け・グループ化・期間単位の切り替えで、実務向けに見やすくできる</li><li>うまく表示されないときは、日付形式と開始日・終了日の設定を見直す</li></ul>



<p class="wp-block-paragraph">「ガントチャートは難しそう」と感じていた方も、タイムラインビューなら気軽に試せます。まずは手元の表で1つ作ってみてくださいね。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/google-sheets-timeline-view/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>スプレッドシートのチェックボックスで進捗管理シートを作る方法｜COUNTIFで完了率を自動計算</title>
		<link>https://mashukabu.com/spreadsheet-checkbox-progress/</link>
					<comments>https://mashukabu.com/spreadsheet-checkbox-progress/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Fri, 12 Jun 2026 21:57:45 +0000</pubDate>
				<category><![CDATA[Googleスプレッドシート]]></category>
		<category><![CDATA[COUNTA]]></category>
		<category><![CDATA[スプレッドシート]]></category>
		<category><![CDATA[チェックボックス]]></category>
		<category><![CDATA[フィルター]]></category>
		<category><![CDATA[条件付き書式]]></category>
		<category><![CDATA[進捗管理]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=7971</guid>

					<description><![CDATA[Googleスプレッドシートのチェックボックスで進捗管理シートを作る方法を解説。挿入手順から、COUNTIF・COUNTAで完了数や完了率を自動計算する数式、完了行に取り消し線を引く条件付き書式、未完了タスクだけをフィルターで表示する方法まで、実務で使える手順をステップごとに紹介します。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">「タスクの進み具合がパッとわからない」「やったかどうかを毎回口頭で確認している」。チームでToDoや進捗を共有するとき、こうした手間は地味にストレスですよね。これを解決してくれるのが、Googleスプレッドシートの<strong>チェックボックス</strong>です。</p>



<p class="wp-block-paragraph">この記事では、チェックボックスの挿入方法から解説します。COUNTIF・COUNTAで完了数や完了率を自動計算する数式まで、順を追って紹介します。さらに、完了した行に自動で取り消し線を引く方法、未完了のタスクだけをフィルターで表示する方法も紹介します。最後まで読めば、そのまま実務で使える進捗管理シートが1枚完成します。ぜひ手を動かしながら読んでみてください。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-6" checked><label class="toc-title" for="toc-checkbox-6">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">スプレッドシートのチェックボックスとは？</a><ol><li><a href="#toc2" tabindex="0">ExcelのチェックボックスとSheetsの違い</a></li></ol></li><li><a href="#toc3" tabindex="0">チェックボックスの挿入方法</a><ol><li><a href="#toc4" tabindex="0">手順：チェックボックスを挿入する</a></li><li><a href="#toc5" tabindex="0">チェックボックスの値を「完了／未完了」に変える</a></li></ol></li><li><a href="#toc6" tabindex="0">チェックボックスで完了数・完了率を自動計算する</a><ol><li><a href="#toc7" tabindex="0">完了したタスクの数をCOUNTIFで数える</a></li><li><a href="#toc8" tabindex="0">全タスクの数をCOUNTAで数える</a></li><li><a href="#toc9" tabindex="0">完了率を計算する</a></li><li><a href="#toc10" tabindex="0">担当者ごとの完了数を出す</a></li></ol></li><li><a href="#toc11" tabindex="0">チェックボックスで完了行に取り消し線を引く</a><ol><li><a href="#toc12" tabindex="0">手順：条件付き書式で取り消し線を設定する</a></li></ol></li><li><a href="#toc13" tabindex="0">フィルターで未完了タスクだけを表示する</a><ol><li><a href="#toc14" tabindex="0">手順：フィルターで未完了だけを絞り込む</a></li><li><a href="#toc15" tabindex="0">FILTER関数で未完了リストを別表示する</a></li></ol></li><li><a href="#toc16" tabindex="0">進捗管理シートをさらに便利にする応用テク</a><ol><li><a href="#toc17" tabindex="0">完了率を進捗バーで見える化する</a></li><li><a href="#toc18" tabindex="0">ステータスをプルダウンと組み合わせる</a></li><li><a href="#toc19" tabindex="0">期限が近いタスクを自動で通知する</a></li></ol></li><li><a href="#toc20" tabindex="0">よくあるトラブルと対処法</a><ol><li><a href="#toc21" tabindex="0">チェックボックスを消したい</a></li><li><a href="#toc22" tabindex="0">COUNTIFの結果が0になる</a></li><li><a href="#toc23" tabindex="0">チェックを入れても取り消し線がつかない</a></li><li><a href="#toc24" tabindex="0">フィルターが他の人の画面にも反映される</a></li></ol></li><li><a href="#toc25" tabindex="0">よくある質問（FAQ）</a><ol><li><a href="#toc26" tabindex="0">Q. チェックボックスを一括で挿入できますか？</a></li><li><a href="#toc27" tabindex="0">Q. チェックを入れた順番に並べ替えできますか？</a></li><li><a href="#toc28" tabindex="0">Q. スマホアプリでもチェックボックスは使えますか？</a></li><li><a href="#toc29" tabindex="0">Q. チェックの数を別シートで集計できますか？</a></li></ol></li><li><a href="#toc30" tabindex="0">まとめ：チェックボックスで進捗管理シートを作る手順</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">スプレッドシートのチェックボックスとは？</span></h2>



<p class="wp-block-paragraph">チェックボックスとは、クリックするだけでオン・オフを切り替えられる四角いマスのことです。タスクが終わったらチェックを入れる、という直感的な操作で進捗を記録できます。</p>



<p class="wp-block-paragraph">見た目は単なるチェック欄ですが、中身はちょっと特別です。チェックを入れたセルには <code>TRUE</code>、外したセルには <code>FALSE</code> という値が入っています。この <code>TRUE</code> と <code>FALSE</code> は「論理値」と呼ばれる正式なデータです。つまり、チェックボックスはただの飾りではありません。COUNTIFやCOUNTAといった集計関数で数えられる「データそのもの」なのです。</p>



<p class="wp-block-paragraph">この性質があるからこそ、「チェックが入った数を数える」「完了率を計算する」といった自動集計ができます。ToDo管理や進捗管理にチェックボックスが向いているのは、この点が理由です。</p>



<h3 class="wp-block-heading"><span id="toc2">ExcelのチェックボックスとSheetsの違い</span></h3>



<p class="wp-block-paragraph">Excelにもチェックボックスはありますが、設定の手間が大きく違います。</p>



<figure class="wp-block-table"><table><thead><tr><th>比較項目</th><th>Excel</th><th>Google スプレッドシート</th></tr></thead><tbody><tr><td>挿入方法</td><td>開発タブ > フォームコントロール</td><td>挿入 > チェックボックス</td></tr><tr><td>セルとの連動</td><td>「コントロールの書式設定」でリンクが必要</td><td>セル自体がTRUE/FALSEになる</td></tr><tr><td>集計のしやすさ</td><td>リンク先セルを別途用意する必要あり</td><td>そのままCOUNTIFで集計できる</td></tr><tr><td>モバイル操作</td><td>不安定</td><td>タップで切り替え可能</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">一番大きな違いは、セルとの連動のしやすさです。Excelはチェックボックスとセルを別々にリンクさせる必要があります。一方、スプレッドシートはセル自体が <code>TRUE</code>／<code>FALSE</code> になります。この手軽さのおかげで、スプレッドシートのチェックボックスは進捗管理にすぐ使えます。</p>



<h2 class="wp-block-heading"><span id="toc3">チェックボックスの挿入方法</span></h2>



<p class="wp-block-paragraph">それでは、実際にチェックボックスを挿入してみましょう。手順はとてもシンプルです。</p>



<h3 class="wp-block-heading"><span id="toc4">手順：チェックボックスを挿入する</span></h3>



<p class="wp-block-paragraph"><strong>1. チェックボックスを入れたいセルを選択する</strong></p>



<p class="wp-block-paragraph">たとえば、タスク名をA列に入力しておき、その横のB2セルを選びます。複数のタスクにまとめて入れたい場合は、B2:B11のように範囲で選択してください。</p>



<p class="wp-block-paragraph"><strong>2. メニューから「チェックボックス」を選ぶ</strong></p>



<p class="wp-block-paragraph">メニューバーの [挿入] をクリックし、[チェックボックス] を選択します。これだけで、選択したセルにチェックボックスが表示されます。</p>



<p class="wp-block-paragraph"><strong>3. クリックしてオン・オフを確認する</strong></p>



<p class="wp-block-paragraph">挿入されたチェックボックスをクリックしてみてください。チェックが入ったり外れたりすれば成功です。チェックが入っているとき、そのセルの値は <code>TRUE</code> になっています。</p>



<h3 class="wp-block-heading"><span id="toc5">チェックボックスの値を「完了／未完了」に変える</span></h3>



<p class="wp-block-paragraph">デフォルトのチェックボックスは、オンが <code>TRUE</code>、オフが <code>FALSE</code> です。集計では問題ありませんが、別のセルに状態を文字で表示したい場面もあります。その場合はカスタム値を設定できます。</p>



<p class="wp-block-paragraph">設定したいセルを選び、[データ] > [データの入力規則] を開きます。条件で [チェックボックス] を選び、[カスタムのセル値を使用する] にチェックを入れてください。すると「チェックマークが入っている場合」と「入っていない場合」の値を自由に決められます。</p>



<p class="wp-block-paragraph">ここに「完了」「未完了」と入力すれば、チェックのオン・オフでセルの値が「完了」「未完了」に切り替わります。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>カスタム値を使うときの集計の注意</strong></p><p>カスタム値を設定すると、集計の条件も変わります。デフォルトなら <code>TRUE</code> で数えますが、カスタム値の場合は <code>"完了"</code> のように文字列で数えてください。後述のCOUNTIFの条件も、この値に合わせて書き換える必要があります。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc6">チェックボックスで完了数・完了率を自動計算する</span></h2>



<p class="wp-block-paragraph">チェックボックスの本領は、ここからが本番です。チェックの数を自動で数えて、完了率まで出してみましょう。</p>



<p class="wp-block-paragraph">ここでは次のような進捗管理シートを例に説明します。A列にタスク名、B列にチェックボックスが入っているとします。</p>



<figure class="wp-block-table"><table><thead><tr><th>&nbsp;</th><th>A列（タスク）</th><th>B列（完了）</th></tr></thead><tbody><tr><td>2行目</td><td>資料作成</td><td>TRUE</td></tr><tr><td>3行目</td><td>メール送信</td><td>FALSE</td></tr><tr><td>4行目</td><td>データ集計</td><td>TRUE</td></tr><tr><td>&#8230;</td><td>&#8230;</td><td>&#8230;</td></tr><tr><td>11行目</td><td>議事録作成</td><td>FALSE</td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><span id="toc7">完了したタスクの数をCOUNTIFで数える</span></h3>



<p class="wp-block-paragraph">まず、チェックが入った（完了した）タスクの数を数えます。<a href="https://mashukabu.com/spreadsheet-countif-function/">COUNTIF関数</a>を使えば一発です。</p>



<pre class="wp-block-code"><code>=COUNTIF(B2:B11, TRUE)</code></pre>



<p class="wp-block-paragraph">この数式は、B2からB11の範囲で値が <code>TRUE</code> になっているセルの数を返します。チェックが3つ入っていれば「3」と表示されます。チェックを入れたり外したりするたびに、この数値も自動で更新されます。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>条件はTRUEと書く（&#8221;TRUE&#8221;ではない）</strong></p><p>条件を <code>"TRUE"</code> のようにダブルクォーテーションで囲むと、文字列として扱われてうまく数えられないことがあります。チェックボックスの値は論理値なので、クォートなしの <code>TRUE</code> で指定してください。カスタム値で「完了」を使っている場合は、逆に <code>"完了"</code> と文字列で指定します。</p></blockquote>



<h3 class="wp-block-heading"><span id="toc8">全タスクの数をCOUNTAで数える</span></h3>



<p class="wp-block-paragraph">次に、タスクの総数を数えます。タスク名が入っているA列を<a href="https://mashukabu.com/spreadsheet-counta-function/">COUNTA関数</a>で数えるのが確実です。</p>



<pre class="wp-block-code"><code>=COUNTA(A2:A11)</code></pre>



<p class="wp-block-paragraph">COUNTAは空白でないセルの数を返します。タスク名が10個入っていれば「10」になります。</p>



<p class="wp-block-paragraph">ここでチェックボックス列（B列）を数えないのには理由があります。チェックボックスは、外していても <code>FALSE</code> という値が入っています。そのためB列をCOUNTAで数えると、未完了も含めて全部カウントされてしまいます。タスクの総数を正確に出すには、タスク名の列を数えるのが安全です。</p>



<h3 class="wp-block-heading"><span id="toc9">完了率を計算する</span></h3>



<p class="wp-block-paragraph">完了数と総数がそろえば、完了率は割り算で出せます。</p>



<pre class="wp-block-code"><code>=COUNTIF(B2:B11, TRUE) / COUNTA(A2:A11)</code></pre>



<p class="wp-block-paragraph">このままだと「0.3」のような小数で表示されます。パーセント表示にするには、セルを選んでツールバーの [%] ボタンを押してください。すると「30%」のように表示されます。</p>



<p class="wp-block-paragraph">数式の中でパーセント文字列にしたい場合は、TEXT関数で囲む方法もあります。</p>



<pre class="wp-block-code"><code>=TEXT(COUNTIF(B2:B11, TRUE) / COUNTA(A2:A11), &quot;0%&quot;)</code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>完了率を1つのセルにまとめて表示する</strong></p><p>「3 / 10 完了（30%）」のように、まとめて表示したいときは文字列結合が便利です。</p></blockquote>



<pre class="wp-block-code"><code>=COUNTIF(B2:B11,TRUE) &amp; &quot; / &quot; &amp; COUNTA(A2:A11) &amp; &quot; 完了（&quot; &amp; TEXT(COUNTIF(B2:B11,TRUE)/COUNTA(A2:A11),&quot;0%&quot;) &amp; &quot;）&quot;</code></pre>



<h3 class="wp-block-heading"><span id="toc10">担当者ごとの完了数を出す</span></h3>



<p class="wp-block-paragraph">タスクに担当者列（C列）があるなら、担当者別の完了数も出せます。COUNTIFS関数で2つの条件を組み合わせます。</p>



<pre class="wp-block-code"><code>=COUNTIFS(C2:C11, &quot;山田&quot;, B2:B11, TRUE)</code></pre>



<p class="wp-block-paragraph">この数式は、担当者が「山田」さんで、なおかつチェックが入っているタスクの数を返します。チーム全体の進捗を担当者ごとに把握したいときに役立ちます。</p>



<h2 class="wp-block-heading"><span id="toc11">チェックボックスで完了行に取り消し線を引く</span></h2>



<p class="wp-block-paragraph">チェックを入れたら、その行のタスク名に取り消し線が引かれる。こうすると、終わったタスクが一目でわかります。これは条件付き書式で実現できます。</p>



<h3 class="wp-block-heading"><span id="toc12">手順：条件付き書式で取り消し線を設定する</span></h3>



<p class="wp-block-paragraph"><strong>1. 取り消し線を引きたい範囲を選択する</strong></p>



<p class="wp-block-paragraph">タスク名のA列を中心に、A2:C11のように行全体を選びます。</p>



<p class="wp-block-paragraph"><strong>2. [表示形式] > [条件付き書式] を開く</strong></p>



<p class="wp-block-paragraph">メニューバーの [表示形式] から [条件付き書式] をクリックします。</p>



<p class="wp-block-paragraph"><strong>3. 「カスタム数式」を選ぶ</strong></p>



<p class="wp-block-paragraph">「書式ルール」のドロップダウンで [カスタム数式] を選択します。</p>



<p class="wp-block-paragraph"><strong>4. 数式を入力する</strong></p>



<p class="wp-block-paragraph">入力欄に次の数式を入れます。</p>



<pre class="wp-block-code"><code>=$B2=TRUE</code></pre>



<p class="wp-block-paragraph">先頭の <code>$B</code> は、B列を固定するための書き方です。これにより、B列にチェックが入っている行だけが対象になります。行全体に書式を適用したいときの基本パターンです。</p>



<p class="wp-block-paragraph"><strong>5. 書式スタイルで取り消し線を選ぶ</strong></p>



<p class="wp-block-paragraph">書式設定のメニューで、取り消し線のアイコンをクリックします。文字色を薄いグレーにしておくと、完了タスクがさらに目立たなくなって見やすくなります。</p>



<p class="wp-block-paragraph"><strong>6. [完了] をクリックして保存する</strong></p>



<p class="wp-block-paragraph">これで、チェックを入れた行のタスク名に自動で取り消し線が引かれます。チェックを外せば取り消し線も消えます。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>条件付き書式をもっと活用したい場合</strong></p><p>取り消し線だけでなく、行全体の背景色を変えたり、複数のルールを優先順位付きで組み合わせたりもできます。色付けやカスタム数式の応用は<a href="https://mashukabu.com/spreadsheet-conditional-formatting/">スプレッドシートの条件付き書式の使い方</a>で詳しく解説しています。あわせて読むと、進捗管理シートの見栄えがぐっと良くなります。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc13">フィルターで未完了タスクだけを表示する</span></h2>



<p class="wp-block-paragraph">タスクが増えてくると、「まだ終わっていないものだけ見たい」という場面が出てきます。フィルター機能を使えば、未完了のタスクだけを画面に表示できます。</p>



<h3 class="wp-block-heading"><span id="toc14">手順：フィルターで未完了だけを絞り込む</span></h3>



<p class="wp-block-paragraph"><strong>1. データ範囲を選択する</strong></p>



<p class="wp-block-paragraph">見出し行を含めて、表全体を選択します。</p>



<p class="wp-block-paragraph"><strong>2. [データ] > [フィルタを作成] をクリックする</strong></p>



<p class="wp-block-paragraph">メニューバーの [データ] から [フィルタを作成] を選びます。各列の見出しにフィルターアイコンが表示されます。</p>



<p class="wp-block-paragraph"><strong>3. チェックボックス列のフィルターを開く</strong></p>



<p class="wp-block-paragraph">完了列（B列）の見出しにあるフィルターアイコンをクリックします。</p>



<p class="wp-block-paragraph"><strong>4. 「FALSE」だけにチェックを残す</strong></p>



<p class="wp-block-paragraph">「値でフィルタ」の一覧から <code>TRUE</code> のチェックを外し、<code>FALSE</code> だけを残して [OK] を押します。これで、未完了（チェックが入っていない）タスクだけが表示されます。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>共有シートではフィルタ表示を使う</strong></p><p>[フィルタを作成] は、絞り込みが全員の画面に反映されます。共有シートで自分だけ絞り込みたいときは、[データ] > [フィルタ表示] > [新しいフィルタ表示を作成] を使ってください。フィルタ表示なら、ほかのメンバーの画面に影響を与えずに自分だけタスクを絞り込めます。</p></blockquote>



<h3 class="wp-block-heading"><span id="toc15">FILTER関数で未完了リストを別表示する</span></h3>



<p class="wp-block-paragraph">元の表をいじらずに、未完了タスクだけを別の場所に一覧表示する方法もあります。<a href="https://mashukabu.com/spreadsheet-filter-function/">FILTER関数</a>を使います。</p>



<pre class="wp-block-code"><code>=FILTER(A2:A11, B2:B11=FALSE)</code></pre>



<p class="wp-block-paragraph">この数式は、B列が <code>FALSE</code> の行だけをA列から抜き出して表示します。元の表はそのままに、未完了タスクのリストを別シートやサマリー欄に作れるので便利です。タスクが完了するたびに、このリストからも自動で消えていきます。</p>



<h2 class="wp-block-heading"><span id="toc16">進捗管理シートをさらに便利にする応用テク</span></h2>



<p class="wp-block-paragraph">基本ができたら、もうひと工夫して見やすさと使いやすさを高めましょう。</p>



<h3 class="wp-block-heading"><span id="toc17">完了率を進捗バーで見える化する</span></h3>



<p class="wp-block-paragraph">数字だけでなく、バーで進捗を見せると直感的です。REPT関数で四角を繰り返すと、簡易的な進捗バーが作れます。</p>



<pre class="wp-block-code"><code>=REPT(&quot;■&quot;, ROUND(COUNTIF(B2:B11,TRUE)/COUNTA(A2:A11)*10, 0)) &amp; REPT(&quot;□&quot;, 10 - ROUND(COUNTIF(B2:B11,TRUE)/COUNTA(A2:A11)*10, 0))</code></pre>



<p class="wp-block-paragraph">この数式は、完了率を10個の四角で表します。完了率が30%なら「■■■□□□□□□□」のように表示されます。グラフを挿入するほどではないけれど、進み具合をひと目で見せたいときに重宝します。</p>



<h3 class="wp-block-heading"><span id="toc18">ステータスをプルダウンと組み合わせる</span></h3>



<p class="wp-block-paragraph">「完了／未完了」の2択ではなく、「未着手・対応中・完了」のように段階を分けたい場合は、チェックボックスよりプルダウンが向いています。チェックボックスは完了・未完了の二択、プルダウンは多段階のステータス管理、と使い分けるのがおすすめです。プルダウンの作り方は<a href="https://mashukabu.com/spreadsheet-pulldown/">スプレッドシートのプルダウン作り方</a>で解説しています。</p>



<h3 class="wp-block-heading"><span id="toc19">期限が近いタスクを自動で通知する</span></h3>



<p class="wp-block-paragraph">進捗管理が定着してくると、「期限が近いタスクを自動でリマインドしたい」という欲が出てきます。GAS（Google Apps Script）のトリガーを使えば、未完了タスクを毎朝チャットに自動通知することも可能です。発展的な自動化に興味がある方は<a href="https://mashukabu.com/gas-trigger-automation/">GASのトリガーでスプレッドシートの集計・通知を自動化する方法</a>を参考にしてください。</p>



<h2 class="wp-block-heading"><span id="toc20">よくあるトラブルと対処法</span></h2>



<h3 class="wp-block-heading"><span id="toc21">チェックボックスを消したい</span></h3>



<p class="wp-block-paragraph">チェックを外すだけならクリックすればOKです。チェックボックスそのものを削除したい場合は、セルを選択して Delete キーを押すか、[データ] > [データの入力規則] からルールを削除してください。</p>



<h3 class="wp-block-heading"><span id="toc22">COUNTIFの結果が0になる</span></h3>



<p class="wp-block-paragraph">完了数が正しく数えられない場合、条件の書き方を確認しましょう。チェックボックスの値は論理値なので、<code>COUNTIF(B2:B11, TRUE)</code> のようにクォートなしで指定します。<code>"TRUE"</code> と文字列で書くと、一致せずに0になることがあります。カスタム値を設定している場合は、その値（例: <code>"完了"</code>）を文字列で指定してください。</p>



<h3 class="wp-block-heading"><span id="toc23">チェックを入れても取り消し線がつかない</span></h3>



<p class="wp-block-paragraph">条件付き書式が反応しない場合、カスタム数式の書き方を見直します。<code>=$B2=TRUE</code> のように、列の前に <code>$</code> を付けているか確認してください。<code>$</code> がないと、行全体に正しく適用されません。また、設定した範囲とチェックボックスの位置がずれていないかもチェックしましょう。</p>



<h3 class="wp-block-heading"><span id="toc24">フィルターが他の人の画面にも反映される</span></h3>



<p class="wp-block-paragraph">[フィルタを作成] は全員に影響するため、共有シートでは注意が必要です。自分だけ絞り込みたいときは [フィルタ表示] を使ってください。フィルタ表示なら、ほかのメンバーの表示を変えずに済みます。</p>



<h2 class="wp-block-heading"><span id="toc25">よくある質問（FAQ）</span></h2>



<h3 class="wp-block-heading"><span id="toc26">Q. チェックボックスを一括で挿入できますか？</span></h3>



<p class="wp-block-paragraph">A. できます。チェックボックスを入れたいセル範囲をまとめて選択してから [挿入] > [チェックボックス] を選べば、選択した全セルに一度に挿入されます。あとから行が増えたときは、すでにチェックボックスがあるセルをコピーして貼り付けるのが速いです。</p>



<h3 class="wp-block-heading"><span id="toc27">Q. チェックを入れた順番に並べ替えできますか？</span></h3>



<p class="wp-block-paragraph">A. できます。チェックボックス列を基準に並べ替えると、<code>TRUE</code>（完了）と <code>FALSE</code>（未完了）でグループ分けされます。[データ] > [範囲を並べ替え] で完了列を指定すれば、完了タスクと未完了タスクをまとめて表示できます。</p>



<h3 class="wp-block-heading"><span id="toc28">Q. スマホアプリでもチェックボックスは使えますか？</span></h3>



<p class="wp-block-paragraph">A. 使えます。iOS・Androidのスプレッドシートアプリでもチェックボックスをタップするだけでオン・オフを切り替えられます。外出先からタスクの進捗を更新したいときにも便利です。</p>



<h3 class="wp-block-heading"><span id="toc29">Q. チェックの数を別シートで集計できますか？</span></h3>



<p class="wp-block-paragraph">A. できます。COUNTIFの範囲指定でシート名を付ければ、別シートのチェックボックスも集計できます。たとえば <code>=COUNTIF('タスク管理'!B2:B11, TRUE)</code> のように書けば、サマリー用のシートに完了数を表示できます。</p>



<h2 class="wp-block-heading"><span id="toc30">まとめ：チェックボックスで進捗管理シートを作る手順</span></h2>



<p class="wp-block-paragraph">この記事で作った進捗管理シートのポイントを整理します。</p>



<figure class="wp-block-table"><table><thead><tr><th>機能</th><th>使うもの</th><th>役割</th></tr></thead><tbody><tr><td>チェックボックス</td><td>挿入 > チェックボックス</td><td>完了・未完了を記録する</td></tr><tr><td>完了数</td><td>COUNTIF(範囲, TRUE)</td><td>チェックが入った数を数える</td></tr><tr><td>完了率</td><td>COUNTIF ÷ COUNTA</td><td>進み具合をパーセントで出す</td></tr><tr><td>取り消し線</td><td>条件付き書式（カスタム数式）</td><td>完了タスクを見やすくする</td></tr><tr><td>未完了の抽出</td><td>フィルター／FILTER関数</td><td>残りのタスクだけ表示する</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">まずはチェックボックスの挿入と、COUNTIFでの完了数カウントから試してみてください。そこに完了率の計算と取り消し線を足していけば、実務でそのまま使える進捗管理シートが完成します。</p>



<p class="wp-block-paragraph">集計に使ったCOUNTIF・COUNTAの詳しい使い方は、<a href="https://mashukabu.com/spreadsheet-countif-function/">スプレッドシートのCOUNTIF関数の使い方</a>と<a href="https://mashukabu.com/spreadsheet-counta-function/">スプレッドシートのCOUNTA関数の使い方</a>で解説しています。見やすさをさらに高めたい方は<a href="https://mashukabu.com/spreadsheet-conditional-formatting/">スプレッドシートの条件付き書式の使い方</a>も、ステータスを多段階で管理したい方は<a href="https://mashukabu.com/spreadsheet-pulldown/">スプレッドシートのプルダウン作り方</a>もあわせてどうぞ。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/spreadsheet-checkbox-progress/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>GASのトリガーでスプレッドシートの集計・通知を自動化する方法｜時間指定・フォーム送信を起点に動かす</title>
		<link>https://mashukabu.com/gas-trigger-automation/</link>
					<comments>https://mashukabu.com/gas-trigger-automation/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Fri, 12 Jun 2026 21:57:41 +0000</pubDate>
				<category><![CDATA[Googleスプレッドシート]]></category>
		<category><![CDATA[GAS]]></category>
		<category><![CDATA[Google Apps Script]]></category>
		<category><![CDATA[スプレッドシート]]></category>
		<category><![CDATA[トリガー]]></category>
		<category><![CDATA[メール自動化]]></category>
		<category><![CDATA[時間指定]]></category>
		<category><![CDATA[自動化]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=7969</guid>

					<description><![CDATA[GASのトリガーを使えば、スプレッドシートの集計やメール通知を自動実行できます。時間主導型トリガーで毎朝9時に売上集計をGmail送信、フォーム送信時トリガーで回答を即通知する2つの実務シナリオを、コピペで動く完成コード付きで解説します。トリガーが動かないときの対処法も網羅。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">「毎朝、出社したらまず昨日の売上を集計してメールで共有する」「フォームに回答が来ても、誰かが気づくまで放置されてしまう」——スプレッドシートで業務を回していると、こうした定型作業に時間を取られますよね。</p>



<p class="wp-block-paragraph">この記事では、Google Apps Script（GAS）の<strong>トリガー</strong>を使って、スプレッドシートの集計やメール通知を「自分が何もしなくても自動で動く」状態にする方法を解説します。トリガーとは、決まった時刻やユーザーの操作を引き金に、指定した関数を自動実行する仕組みのことです。</p>



<p class="wp-block-paragraph">GASの基本的な書き方や実行ボタンの押し方は、シリーズ1本目で丁寧に解説しています。GASに初めて触る方は、先にこちらを読むとつまずきにくいですよ。</p>



<p class="wp-block-paragraph"><a href="https://mashukabu.com/spreadsheet-gas-getting-started-recipes/">GAS入門｜コピペで動くスプレッドシート自動化レシピ5選</a></p>



<p class="wp-block-paragraph">なお、この記事で紹介する「毎朝9時に自動集計」「フォーム回答で自動通知」は、Microsoft の Power Automate でやるような自動化を、Google Workspace の無料環境で実現するイメージです。Microsoft 365 を使えない環境でも、GASのトリガーがあれば同じことができます。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-7" checked><label class="toc-title" for="toc-checkbox-7">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">GASのトリガーとは？｜手動実行から自動実行への第一歩</a><ol><li><a href="#toc2" tabindex="0">シンプルトリガーとインストーラブルトリガーの違い</a></li></ol></li><li><a href="#toc3" tabindex="0">GASのトリガーの種類と使い分け｜時間主導型とイベント型</a><ol><li><a href="#toc4" tabindex="0">時間主導型トリガーで指定できる間隔</a></li><li><a href="#toc5" tabindex="0">イベント型トリガーで反応できる操作</a></li></ol></li><li><a href="#toc6" tabindex="0">GASのトリガーを設定する手順｜スクリプトエディタからの操作</a></li><li><a href="#toc7" tabindex="0">【シナリオA】毎朝9時に前日の売上を集計してGmailに自動送信</a><ol><li><a href="#toc8" tabindex="0">前提となるスプレッドシートの形</a></li><li><a href="#toc9" tabindex="0">コピペで動くサンプルコード</a></li><li><a href="#toc10" tabindex="0">コードのポイント解説</a></li><li><a href="#toc11" tabindex="0">時間主導型トリガーを設定する</a></li></ol></li><li><a href="#toc12" tabindex="0">【シナリオB】フォーム回答があったら担当者にメール通知</a><ol><li><a href="#toc13" tabindex="0">フォーム送信時トリガーが使えるスプレッドシート</a></li><li><a href="#toc14" tabindex="0">コピペで動くサンプルコード</a></li><li><a href="#toc15" tabindex="0">コードのポイント解説</a></li><li><a href="#toc16" tabindex="0">フォーム送信時トリガーを設定する</a></li></ol></li><li><a href="#toc17" tabindex="0">GASのトリガーが動かない・二重実行するときの対処法</a><ol><li><a href="#toc18" tabindex="0">トリガーが動かないとき</a></li><li><a href="#toc19" tabindex="0">メールが2通来る・処理が二重に走るとき</a></li><li><a href="#toc20" tabindex="0">実行回数・時間の上限に注意</a></li><li><a href="#toc21" tabindex="0">トリガーは作成した本人の権限で動く</a></li></ol></li><li><a href="#toc22" tabindex="0">まとめ｜GASのトリガーで定型業務を自動化しよう</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">GASのトリガーとは？｜手動実行から自動実行への第一歩</span></h2>



<p class="wp-block-paragraph">GASのトリガーとは、<strong>「ある条件（時刻や操作）をきっかけに、指定した関数を自動で実行する仕組み」</strong>です。</p>



<p class="wp-block-paragraph">通常、スプレッドシートで書いたGASのコードは、スクリプトエディタの「実行」ボタンを押さないと動きません。これが手動実行です。便利な処理を書いても、自分でボタンを押し続けるなら手作業とあまり変わりませんよね。</p>



<p class="wp-block-paragraph">ここでトリガーの出番です。「毎朝9時になったら」「フォームに回答が届いたら」といった条件を設定しておけば、その瞬間に関数が自動で走ります。パソコンを開いていなくても、Googleのサーバー上で勝手に実行してくれるのが大きな特徴です。</p>



<p class="wp-block-paragraph">トリガーで自動実行される関数のことを、この記事では<strong>ハンドラ関数</strong>と呼びます。トリガーが発火したときに呼び出される関数、という意味です。</p>



<figure class="wp-block-table"><table><thead><tr><th>項目</th><th>手動実行</th><th>トリガーによる自動実行</th></tr></thead><tbody><tr><td>実行のきっかけ</td><td>自分で実行ボタンを押す</td><td>時刻・操作などの条件</td></tr><tr><td>パソコンの状態</td><td>開いている必要あり</td><td>閉じていてもGoogleが実行</td></tr><tr><td>向いている用途</td><td>テスト・単発の処理</td><td>定期処理・イベント対応</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">トリガーを覚えると、GASの活用範囲が一気に広がります。「同じ作業を毎日繰り返している」と感じている方ほど、効果を実感しやすいですよ。</p>



<h3 class="wp-block-heading"><span id="toc2">シンプルトリガーとインストーラブルトリガーの違い</span></h3>



<p class="wp-block-paragraph">GASのトリガーには、実は2つの系統があります。最初にここを押さえておくと、後で「なぜか動かない」を避けられます。</p>



<ul class="wp-block-list"><li><strong>シンプルトリガー</strong>: 関数名を <code>onOpen</code> や <code>onEdit</code> のような決まった名前にするだけで、設定なしに自動発火するトリガーです。手軽ですが、メール送信や外部サービスへのアクセスができないという強い制約があります。</li><li><strong>インストーラブルトリガー</strong>: スクリプトエディタの専用画面から設定するトリガーです。権限の承認を経るため、メール送信や定期実行など、制約のある操作も実行できます。</li></ul>



<p class="wp-block-paragraph">この記事で扱う「自動メール送信」「毎朝の定期実行」は、いずれも<strong>インストーラブルトリガーが必須</strong>です。シンプルトリガーの <code>onEdit</code> の中にメール送信を書いても動かないので、ここは混同しないようにしましょう。以降、この記事で単に「トリガー」と書く場合は、インストーラブルトリガーを指します。</p>



<h2 class="wp-block-heading"><span id="toc3">GASのトリガーの種類と使い分け｜時間主導型とイベント型</span></h2>



<p class="wp-block-paragraph">インストーラブルトリガーは、大きく<strong>時間主導型</strong>と<strong>イベント型</strong>の2タイプに分かれます。どちらを選ぶかは、「いつ動かしたいか」で決まります。</p>



<figure class="wp-block-table"><table><thead><tr><th>やりたいこと</th><th>選ぶトリガー</th><th>具体例</th></tr></thead><tbody><tr><td>決まった時刻・間隔で動かしたい</td><td>時間主導型</td><td>毎朝9時に集計、1時間おきに同期</td></tr><tr><td>何かが起きたら動かしたい</td><td>イベント型</td><td>フォーム回答時、セル編集時</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">判断はシンプルです。「スケジュールで動かす」なら時間主導型、「きっかけに反応して動かす」ならイベント型と覚えておきましょう。</p>



<h3 class="wp-block-heading"><span id="toc4">時間主導型トリガーで指定できる間隔</span></h3>



<p class="wp-block-paragraph">時間主導型トリガーは、設定画面でかなり細かく実行タイミングを選べます。主な選択肢は次の通りです。</p>



<ul class="wp-block-list"><li>特定の日時（一度だけ実行）</li><li>分ベース（1分・5分・10分・15分・30分おき）</li><li>時間ベース（1〜12時間おき）</li><li>日ベース（毎日。実行する時間帯を選択）</li><li>週ベース（曜日 + 時間帯）</li><li>月ベース（日にち + 時間帯）</li></ul>



<p class="wp-block-paragraph">ここで1つ大事な仕様があります。<strong>時間帯はあくまで「その1時間の枠のどこか」で実行される</strong>という点です。たとえば「午前9時〜10時」を選んでも、きっちり9時00分に動くとは限りません。9時5分や9時40分など、枠内のどこかで実行されます。「1分の誤差も許されない」という用途には向かないので、覚えておくと安心ですよ。</p>



<h3 class="wp-block-heading"><span id="toc5">イベント型トリガーで反応できる操作</span></h3>



<p class="wp-block-paragraph">スプレッドシートやフォームに紐づくイベント型トリガーでは、次のような操作をきっかけにできます。</p>



<ul class="wp-block-list"><li>起動時（スプレッドシートを開いたとき）</li><li>編集時（セルの値が変わったとき）</li><li>変更時（行・列の追加など構造が変わったとき）</li><li>フォーム送信時（リンクされたフォームに回答が届いたとき）</li></ul>



<p class="wp-block-paragraph">この記事では、最も実務ニーズが高い「時間主導型（毎朝の集計）」と「フォーム送信時（回答通知）」の2つを、完成コード付きで実装していきます。</p>



<h2 class="wp-block-heading"><span id="toc6">GASのトリガーを設定する手順｜スクリプトエディタからの操作</span></h2>



<p class="wp-block-paragraph">実際のコードに入る前に、トリガーをどこで設定するのかを押さえておきましょう。トリガーの設定画面は、コードを書く画面とは別の場所にあります。</p>



<p class="wp-block-paragraph">スプレッドシートのメニューから <code>拡張機能</code> → <code>Apps Script</code> でスクリプトエディタを開いたら、次の手順で進みます。</p>



<ol class="wp-block-list"><li>エディタの左側メニューにある<strong>時計のアイコン（トリガー）</strong>をクリック</li><li>画面右下の「<strong>トリガーを追加</strong>」ボタンをクリック</li><li>設定ダイアログで、実行する関数・イベントの種類などを選ぶ</li><li>「保存」をクリック</li><li>初回のみ権限の承認画面が表示されるので、自分のGoogleアカウントで承認する</li></ol>



<p class="wp-block-paragraph">設定ダイアログでは、主に次の項目を選びます。</p>



<figure class="wp-block-table"><table><thead><tr><th>設定項目</th><th>選ぶ内容</th></tr></thead><tbody><tr><td>実行する関数を選択</td><td>自動実行したいハンドラ関数の名前</td></tr><tr><td>実行するデプロイを選択</td><td><code>Head</code>（基本はこのまま）</td></tr><tr><td>イベントのソースを選択</td><td><code>時間主導型</code> または <code>スプレッドシートから</code></td></tr><tr><td>イベントの種類を選択</td><td>ソースに応じて表示される選択肢</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">承認画面で「このアプリはGoogleで確認されていません」という警告が出ますが、自作スクリプトでは正常な挙動です。「詳細」→「（プロジェクト名）に移動（安全ではないページ）」をクリックして、利用する権限を確認のうえ許可してください。権限承認の詳しい流れは入門記事でも解説しています。</p>



<p class="wp-block-paragraph"><a href="https://mashukabu.com/spreadsheet-gas-getting-started-recipes/">GAS入門｜コピペで動くスプレッドシート自動化レシピ5選</a></p>



<p class="wp-block-paragraph">それでは、具体的なシナリオを2つ作っていきましょう。</p>



<h2 class="wp-block-heading"><span id="toc7">【シナリオA】毎朝9時に前日の売上を集計してGmailに自動送信</span></h2>



<p class="wp-block-paragraph">最初のシナリオは、<strong>毎朝9時に前日分の売上を集計し、その結果をGmailで送る</strong>という時間主導型トリガーの実装です。朝イチの「昨日いくら売れた？」を、出社前に自動で用意しておくイメージです。</p>



<h3 class="wp-block-heading"><span id="toc8">前提となるスプレッドシートの形</span></h3>



<p class="wp-block-paragraph">ここでは、次のような売上記録シート（シート名「売上」）を想定します。A列に日付、B列に商品名、C列に金額が入っている形です。</p>



<figure class="wp-block-table"><table><thead><tr><th>日付</th><th>商品名</th><th>金額</th></tr></thead><tbody><tr><td>2026/05/26</td><td>商品A</td><td>12000</td></tr><tr><td>2026/05/26</td><td>商品B</td><td>8000</td></tr><tr><td>2026/05/27</td><td>商品A</td><td>5000</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">1行目はヘッダー、2行目以降が明細です。この中から「前日の日付」に一致する行だけを集めて、合計を出します。</p>



<h3 class="wp-block-heading"><span id="toc9">コピペで動くサンプルコード</span></h3>



<p class="wp-block-paragraph">スクリプトエディタに以下を貼り付けて、<code>'your-address@example.com'</code> を自分の通知先メールアドレスに、<code>'売上'</code> を実際のシート名に書き換えてください。</p>



<pre class="wp-block-code"><code>// --- シナリオA: 前日分の売上を集計してGmailで送信 ---
function dailySalesReport() {
  try {
    // --- 設定（自分の環境に合わせて書き換える） ---
    const toAddress = 'your-address@example.com';
    const sheetName = '売上';

    // --- 前日の日付を求める ---
    const yesterday = new Date();
    yesterday.setDate(yesterday.getDate() - 1);
    const targetDateStr = Utilities.formatDate(
      yesterday,
      'Asia/Tokyo',
      'yyyy/MM/dd'
    );

    // --- シートのデータを2次元配列で取得 ---
    const sheet = SpreadsheetApp
      .getActiveSpreadsheet()
      .getSheetByName(sheetName);
    const values = sheet.getDataRange().getValues();

    // --- 前日分だけ合計する（1行目ヘッダーはスキップ） ---
    let total = 0;
    let count = 0;
    for (let i = 1; i &lt; values.length; i++) {
      const cellDate = values[i][0]; // A列: 日付
      const amount = values[i][2];   // C列: 金額
      if (!(cellDate instanceof Date)) continue;
      const rowDateStr = Utilities.formatDate(
        cellDate,
        'Asia/Tokyo',
        'yyyy/MM/dd'
      );
      if (rowDateStr === targetDateStr) {
        total += Number(amount);
        count++;
      }
    }

    // --- メール本文を組み立てて送信 ---
    const subject = '[日報] ' + targetDateStr + ' の売上集計';
    const body =
      targetDateStr + ' の売上をお知らせします。nn' +
      '件数: ' + count + ' 件n' +
      '合計金額: ' + total.toLocaleString() + ' 円';
    GmailApp.sendEmail(toAddress, subject, body);
  } catch (err) {
    // --- エラー時はログに残す ---
    console.log('日報送信エラー: ' + err.message);
  }
}</code></pre>



<h3 class="wp-block-heading"><span id="toc10">コードのポイント解説</span></h3>



<p class="wp-block-paragraph">ポイントを順番に見ていきましょう。</p>



<ul class="wp-block-list"><li><strong><code>new Date()</code> と <code>setDate(...)</code></strong>: 今日の日付から1日引いて前日を求めています。<code>setDate(getDate() - 1)</code> は月初でも正しく前月末に戻るので、月またぎを気にする必要はありません</li><li><strong><code>Utilities.formatDate(...)</code></strong>: 日付を <code>yyyy/MM/dd</code> の文字列にそろえる関数です。タイムゾーンに <code>'Asia/Tokyo'</code> を指定して、日本時間でずれないようにしています</li><li><strong><code>getDataRange().getValues()</code></strong>: シートの入力済み範囲をまとめて2次元配列で取り出します。1行ずつ読むより高速で、GASの定番パターンです</li><li><strong><code>if (!(cellDate instanceof Date)) continue;</code></strong>: 日付セルが空欄や文字列だった場合に備えて、日付型でない行は飛ばしています</li><li><strong><code>try/catch</code></strong>: トリガー実行中にエラーが出ても、処理を安全に終わらせるためのガードです</li></ul>



<p class="wp-block-paragraph">このコードを保存したら、まず手動で1回実行してみましょう。前日分の売上が入っていれば、自分宛にメールが届くはずです。動作を確認できたら、いよいよトリガーを設定します。</p>



<h3 class="wp-block-heading"><span id="toc11">時間主導型トリガーを設定する</span></h3>



<p class="wp-block-paragraph">先ほどの手順でトリガー画面を開き、「トリガーを追加」から次のように設定します。</p>



<ol class="wp-block-list"><li>実行する関数: <code>dailySalesReport</code></li><li>イベントのソース: <code>時間主導型</code></li><li>時間ベースのトリガーのタイプ: <code>日付ベースのタイマー</code></li><li>時刻: <code>午前9時〜10時</code></li><li>「保存」をクリック</li></ol>



<p class="wp-block-paragraph">これで、毎朝9時台に前日の売上集計メールが自動で届くようになります。前述の通り、実行は「9時〜10時の枠内のどこか」で行われる点だけ覚えておきましょう。</p>



<p class="wp-block-paragraph">なお、メールの本文をもっと作り込みたい場合は、HTML形式での送信や商品別の内訳追加なども可能です。差し込みメールのテクニックは、こちらの記事が参考になりますよ。</p>



<p class="wp-block-paragraph"><a href="https://mashukabu.com/spreadsheet-gmail-batch-send-gas/">スプレッドシートからGmailを一括送信する方法｜GASで差し込みメールを自動化</a></p>



<h2 class="wp-block-heading"><span id="toc12">【シナリオB】フォーム回答があったら担当者にメール通知</span></h2>



<p class="wp-block-paragraph">次は、<strong>Googleフォームに回答が届いた瞬間に、担当者へメールで通知する</strong>というフォーム送信時トリガーの実装です。問い合わせや申込フォームの「気づかず放置」をなくせます。</p>



<h3 class="wp-block-heading"><span id="toc13">フォーム送信時トリガーが使えるスプレッドシート</span></h3>



<p class="wp-block-paragraph">フォーム送信時トリガーを使うには、<strong>フォームの回答が流れ込むスプレッドシート</strong>が起点になります。フォーム編集画面の「回答」タブから「スプレッドシートにリンク」しておくと、回答のたびにスプレッドシートへ行が追加されます。</p>



<p class="wp-block-paragraph">このリンク先スプレッドシートで <code>拡張機能</code> → <code>Apps Script</code> を開いて、コードを書いていきます。フォーム連携の基本をもっと詳しく知りたい方は、こちらの記事もあわせてどうぞ。</p>



<p class="wp-block-paragraph"><a href="https://mashukabu.com/google-form-gas-auto-aggregate/">Googleフォーム×GASで回答を自動通知・集計する方法｜コピペで動く3レシピ</a></p>



<h3 class="wp-block-heading"><span id="toc14">コピペで動くサンプルコード</span></h3>



<p class="wp-block-paragraph">回答先スプレッドシートのスクリプトエディタに、以下を貼り付けます。<code>'tantou@example.com'</code> を担当者のメールアドレスに書き換えてください。</p>



<pre class="wp-block-code"><code>// --- シナリオB: フォーム回答を担当者にメール通知 ---
function notifyOnFormSubmit(e) {
  try {
    // --- 通知先（担当者のアドレスに書き換える） ---
    const toAddress = 'tantou@example.com';

    // --- 質問名をキーにした回答オブジェクト ---
    const namedValues = e.namedValues;

    // --- 「質問: 回答」の形に整形して連結 ---
    const body = Object.entries(namedValues)
      .map(function(entry) {
        return entry[0] + ': ' + entry[1].join(', ');
      })
      .join('n');

    // --- メールを送信 ---
    const subject = '[フォーム] 新しい回答が届きました';
    GmailApp.sendEmail(toAddress, subject, body);
  } catch (err) {
    console.log('フォーム通知エラー: ' + err.message);
  }
}</code></pre>



<h3 class="wp-block-heading"><span id="toc15">コードのポイント解説</span></h3>



<p class="wp-block-paragraph">フォーム送信時トリガーでは、ハンドラ関数が<strong>イベントオブジェクト</strong>を受け取れます。引数の <code>e</code> がそれで、トリガー発火時に「どんな回答が来たか」という情報が自動で渡されます。</p>



<ul class="wp-block-list"><li><strong><code>e.namedValues</code></strong>: イベントオブジェクト <code>e</code> が持つプロパティで、<strong>質問テキストをキー、回答を配列値とするオブジェクト</strong>です。列の順番に依存しないため、後から質問を追加・並び替えしても壊れにくくなります</li><li><strong><code>entry[1].join(', ')</code></strong>: チェックボックスなど複数回答の場合に備えて、回答をカンマ区切りで結合しています</li><li><strong><code>try/catch</code></strong>: エラー時もトリガーを安全に終わらせるためのガードです</li></ul>



<h3 class="wp-block-heading"><span id="toc16">フォーム送信時トリガーを設定する</span></h3>



<p class="wp-block-paragraph">コードを保存したら、トリガー画面で次のように設定します。</p>



<ol class="wp-block-list"><li>実行する関数: <code>notifyOnFormSubmit</code></li><li>イベントのソース: <code>スプレッドシートから</code></li><li>イベントの種類: <code>フォーム送信時</code></li><li>「保存」をクリック</li></ol>



<p class="wp-block-paragraph">設定できたら、テスト用にフォームを1件送信してみましょう。担当者のメールアドレスに通知が届けば成功です。これで「回答が来たのに誰も気づかない」状態から抜け出せますよ。</p>



<h2 class="wp-block-heading"><span id="toc17">GASのトリガーが動かない・二重実行するときの対処法</span></h2>



<p class="wp-block-paragraph">トリガーは便利な反面、「設定したのに動かない」「メールが2通来る」といったトラブルも起きがちです。よくあるパターンと対処法をまとめておきます。</p>



<h3 class="wp-block-heading"><span id="toc18">トリガーが動かないとき</span></h3>



<p class="wp-block-paragraph">まず確認したいのは、<strong>実行ログ</strong>です。スクリプトエディタ左メニューの「実行数」をクリックすると、トリガーが実際に走ったかどうかと、その結果（完了・失敗）を確認できます。ステータスが「失敗」になっていれば、クリックしてエラー内容を見てみましょう。</p>



<p class="wp-block-paragraph">動かないときに多い原因は次の通りです。</p>



<ul class="wp-block-list"><li><strong>シンプルトリガーでメール送信を書いている</strong>: <code>onEdit</code> などのシンプルトリガーではメール送信ができません。インストーラブルトリガーに設定し直す必要があります</li><li><strong>関数名やシート名のタイプミス</strong>: コード内の <code>getSheetByName('売上')</code> のシート名が、実際のシート名と1文字でも違うと動きません</li><li><strong>権限承認が完了していない</strong>: 初回の承認画面を途中で閉じてしまうと、トリガーは設定されても実行時に止まります</li></ul>



<p class="wp-block-paragraph">なお、インストーラブルトリガーで起動した関数がエラーになると、Googleからトリガー所有者宛に<strong>エラー通知メール</strong>が自動で届きます。<code>try/catch</code> でエラーを完全に握りつぶすと、この通知も来なくなり「気づかないうちに止まっている」状態になりやすいので、開発中は <code>console.log</code> でログを残しておくと安心です。</p>



<h3 class="wp-block-heading"><span id="toc19">メールが2通来る・処理が二重に走るとき</span></h3>



<p class="wp-block-paragraph">同じ処理が2回実行される場合、<strong>トリガーを重複して登録している</strong>のが原因のほとんどです。</p>



<p class="wp-block-paragraph">トリガー画面で「トリガーを追加」を何度も押すと、同じ関数に複数のトリガーがぶら下がります。すると1回のイベントで関数が2回・3回と実行され、メールも同じ数だけ届いてしまいます。トリガー一覧を開いて、不要なトリガーは行末のメニューから削除しましょう。</p>



<h3 class="wp-block-heading"><span id="toc20">実行回数・時間の上限に注意</span></h3>



<p class="wp-block-paragraph">GASには<strong>割り当て（quota）</strong>という1日あたりの上限があります。個人のGoogleアカウント（@gmail.com）の主な上限は次の通りです。</p>



<figure class="wp-block-table"><table><thead><tr><th>項目</th><th>個人アカウントの上限</th></tr></thead><tbody><tr><td>メール送信数（GmailApp）</td><td>1日 100通</td></tr><tr><td>スクリプト1回の実行時間</td><td>最大 6分</td></tr><tr><td>トリガーの合計実行時間</td><td>1日 90分</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">「毎朝1通メールを送る」程度なら、この上限にはまったく届きません。ただし「1分おきのトリガーで毎回メールを送る」といった設計だと、あっという間に上限に達してしまいます。トリガーの頻度は、本当に必要な間隔だけにしておきましょう。</p>



<h3 class="wp-block-heading"><span id="toc21">トリガーは作成した本人の権限で動く</span></h3>



<p class="wp-block-paragraph">もう1つ知っておきたいのが、<strong>トリガーは設定した本人のアカウント権限で実行される</strong>という点です。スプレッドシートをチームで共有していても、トリガーは作成者として動き、メールは作成者のGmailから送られます。割り当て（1日100通など）も作成者のものが消費されます。チームで運用する場合は、誰のアカウントでトリガーを設定したかを把握しておくと、トラブルを避けられますよ。</p>



<h2 class="wp-block-heading"><span id="toc22">まとめ｜GASのトリガーで定型業務を自動化しよう</span></h2>



<p class="wp-block-paragraph">GASのトリガーを使えば、これまで手作業で繰り返していた集計や通知を、自分が何もしなくても自動で動かせます。最後に要点を整理しておきます。</p>



<ul class="wp-block-list"><li><strong>トリガーには時間主導型とイベント型がある</strong>: スケジュールで動かすなら時間主導型、操作をきっかけに動かすならイベント型</li><li><strong>メール送信や定期実行はインストーラブルトリガーが必須</strong>: シンプルトリガー（onEditなど）ではメール送信ができない</li><li><strong>時間主導型は「枠内のどこか」で実行される</strong>: 9時〜10時を指定しても9時00分ぴったりではない</li><li><strong>動かないときは実行ログ、二重実行は重複トリガーを疑う</strong>: まずは「実行数」画面を確認する</li><li><strong>割り当て（1日100通など）に注意</strong>: 高頻度トリガーは上限に届きやすい</li></ul>



<p class="wp-block-paragraph">「毎朝9時の自動集計」と「フォーム回答の自動通知」が動かせるようになれば、GASの自動化はぐっと実用的になります。今日紹介したコードはコピペで動くので、ぜひ自分の業務に合わせて書き換えて試してみてください。</p>



<p class="wp-block-paragraph">GASの基礎を固め直したい方や、フォーム・メール連携をさらに掘り下げたい方は、シリーズの関連記事もあわせてどうぞ。</p>



<ul class="wp-block-list"><li><a href="https://mashukabu.com/spreadsheet-gas-getting-started-recipes/">GAS入門｜コピペで動くスプレッドシート自動化レシピ5選</a></li><li><a href="https://mashukabu.com/google-form-gas-auto-aggregate/">Googleフォーム×GASで回答を自動通知・集計する方法｜コピペで動く3レシピ</a></li><li><a href="https://mashukabu.com/spreadsheet-gmail-batch-send-gas/">スプレッドシートからGmailを一括送信する方法｜GASで差し込みメールを自動化</a></li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/gas-trigger-automation/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>スプレッドシート×Gemini応用｜サイドパネルで数式・複数シート分析・グラフを口頭指示</title>
		<link>https://mashukabu.com/spreadsheet-gemini-sidepanel-applied/</link>
					<comments>https://mashukabu.com/spreadsheet-gemini-sidepanel-applied/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Fri, 12 Jun 2026 21:56:25 +0000</pubDate>
				<category><![CDATA[Googleスプレッドシート]]></category>
		<category><![CDATA[Gemini]]></category>
		<category><![CDATA[Google Workspace]]></category>
		<category><![CDATA[サイドパネル]]></category>
		<category><![CDATA[スプレッドシート]]></category>
		<category><![CDATA[ヒストグラム]]></category>
		<category><![CDATA[数式自動生成]]></category>
		<category><![CDATA[生成AI]]></category>
		<category><![CDATA[複数シート分析]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=7946</guid>

					<description><![CDATA[GoogleスプレッドシートのGeminiサイドパネルで使える応用3テクニックを解説。日本語の説明から数式を自動生成、複数シートをまたいだ売上分析、口頭指示でのヒストグラム作成まで。=AI()関数との使い分け早見表とコピペで使えるプロンプト例付きです。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">「スプレッドシートでGeminiが使えるって聞いたけど、セルに=AI()を入れる方法だけで終わっちゃった」という方は多いですよね。実は右上の星マーク（サイドパネル）からも Gemini が使えて、こちらのほうが応用の幅が広いんです。</p>



<p class="wp-block-paragraph">この記事では、サイドパネル限定の3つの応用テクニックを解説します。「日本語の説明から数式を作ってもらう」「複数シートをまたいだ売上データを分析させる」「口頭指示でヒストグラムを出力する」の3つです。=AI()関数との使い分け早見表も冒頭に置いたので、どちらを使うべきか迷ったときの判断基準にしてください。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-8" checked><label class="toc-title" for="toc-checkbox-8">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">Geminiサイドパネルとは？スプレッドシートでできることと=AI()関数との使い分け早見表</a><ol><li><a href="#toc2" tabindex="0">サイドパネルの基本機能</a></li><li><a href="#toc3" tabindex="0">=AI()関数との使い分け早見表</a></li><li><a href="#toc4" tabindex="0">利用条件と対応プラン</a></li></ol></li><li><a href="#toc5" tabindex="0">サイドパネルの開き方と基本操作</a><ol><li><a href="#toc6" tabindex="0">起動手順（右上の星マークから）</a></li><li><a href="#toc7" tabindex="0">プロンプト入力の基本ルール</a></li></ol></li><li><a href="#toc8" tabindex="0">応用1：日本語で説明するだけで数式を作ってもらう</a><ol><li><a href="#toc9" tabindex="0">使う場面：複雑な集計・条件分岐の数式組み立て</a></li><li><a href="#toc10" tabindex="0">操作手順</a></li><li><a href="#toc11" tabindex="0">コピペで使えるプロンプト例</a></li></ol></li><li><a href="#toc12" tabindex="0">応用2：複数シートをまたいだ売上データを分析させる</a><ol><li><a href="#toc13" tabindex="0">使う場面：月次シート・支店別シートの横断集計</a></li><li><a href="#toc14" tabindex="0">事前準備チェックリスト（シート名/ヘッダー/データ範囲）</a></li><li><a href="#toc15" tabindex="0">操作手順</a></li></ol></li><li><a href="#toc16" tabindex="0">応用3：自然言語の指示でヒストグラムを出力する</a><ol><li><a href="#toc17" tabindex="0">使う場面：年齢別・売上額別の分布把握</a></li><li><a href="#toc18" tabindex="0">操作手順</a></li><li><a href="#toc19" tabindex="0">思った通りに出ない時のプロンプト書き換え</a></li></ol></li><li><a href="#toc20" tabindex="0">うまくいかないときのプロンプト改善のコツ</a></li><li><a href="#toc21" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">Geminiサイドパネルとは？スプレッドシートでできることと=AI()関数との使い分け早見表</span></h2>



<h3 class="wp-block-heading"><span id="toc2">サイドパネルの基本機能</span></h3>



<p class="wp-block-paragraph">Gemini サイドパネルは、画面右上の星マーク（Geminiボタン）から起動する対話型アシスタントです。シート全体・選択範囲・複数シートに対して、自然言語で指示を出せます。</p>



<p class="wp-block-paragraph">2025年の機能強化で「複数テーブルの参照」「複数シートをまたいだ分析」が加わり、より実務的な使い方ができるようになりました。</p>



<p class="wp-block-paragraph">主な機能は以下の4つです。</p>



<ul class="wp-block-list"><li>シート内データの要約・傾向分析</li><li>自然言語からの数式生成（貼り付けボタンでセルに直接挿入）</li><li>チャート（棒・折れ線・円・ヒストグラムなど）の生成</li><li>入力テンプレート・サンプルデータの作成</li></ul>



<h3 class="wp-block-heading"><span id="toc3">=AI()関数との使い分け早見表</span></h3>



<figure class="wp-block-table"><table><thead><tr><th>&nbsp;</th><th>サイドパネル</th><th>=AI()関数</th></tr></thead><tbody><tr><td>主な用途</td><td>シート全体の分析・数式生成・チャート作成</td><td>セルごとの分類・翻訳・テキスト変換</td></tr><tr><td>実行タイミング</td><td>1回の指示で完結</td><td>セル計算のたびに実行</td></tr><tr><td>繰り返し処理</td><td>不向き（一括処理向け）</td><td>向き（行ごとの処理に強い）</td></tr><tr><td>結果の配置</td><td>提案→手動で貼り付け</td><td>セル内に直接出力</td></tr><tr><td>APIコール</td><td>指示1回につき1回</td><td>再計算のたびに発生</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><strong>選び方の目安</strong>：「一度分析してその結果を見たい」ならサイドパネル、「100行のデータを行ごとに変換したい」なら=AI()関数、と覚えておくとシンプルです。</p>



<p class="wp-block-paragraph">=AI()関数の詳しい使い方は<a href="https://mashukabu.com/spreadsheet-gemini-ai-function/">Gemini in スプレッドシートの使い方｜AI関数でデータ整理を自動化</a>で解説しています。</p>



<h3 class="wp-block-heading"><span id="toc4">利用条件と対応プラン</span></h3>



<p class="wp-block-paragraph">Gemini サイドパネルは <strong>Google Workspace の対応プラン</strong>（Business Standard / Business Plus / Enterprise Standard / Enterprise Plus）で利用できます。2025年1月15日から、これらのプランに追加コストなしで標準搭載されました。</p>



<p class="wp-block-paragraph">個人の gmail.com アカウント（無料版）では利用できません。会社の Workspace アカウントでログインしているか確認してください。</p>



<h2 class="wp-block-heading"><span id="toc5">サイドパネルの開き方と基本操作</span></h2>



<h3 class="wp-block-heading"><span id="toc6">起動手順（右上の星マークから）</span></h3>



<ol class="wp-block-list"><li>Google スプレッドシートでシートを開く</li><li>画面右上の星マーク（Gemini アイコン）をクリック</li><li>右側にサイドパネルが開く</li><li>下部のテキスト入力欄にプロンプトを入力して送信</li></ol>



<p class="wp-block-paragraph"><!-- screenshot: スプレッドシート右上のGeminiアイコンとサイドパネル全体 --></p>



<h3 class="wp-block-heading"><span id="toc7">プロンプト入力の基本ルール</span></h3>



<p class="wp-block-paragraph">サイドパネルへの指示は、この3点を意識すると精度が上がります。</p>



<ul class="wp-block-list"><li><strong>対象範囲を明示する</strong>:「A列からD列の売上データを分析して」のように列名や範囲を伝える</li><li><strong>求める結果を具体的に書く</strong>:「月ごとに合計する数式を作って」「ヒストグラムにして」など出力の形を指定する</li><li><strong>シート名を入れる</strong>（複数シートのとき）:「『2024年売上』シートと『2025年売上』シートを比較して」のように明示する</li></ul>



<h2 class="wp-block-heading"><span id="toc8">応用1：日本語で説明するだけで数式を作ってもらう</span></h2>



<p class="wp-block-paragraph">SUMIFS や FILTER など関数の組み合わせが複雑になってくると、数式を一から書くのは時間がかかりますよね。サイドパネルなら「〇〇を集計したい」と日本語で伝えるだけで候補数式を出してもらえます。</p>



<h3 class="wp-block-heading"><span id="toc9">使う場面：複雑な集計・条件分岐の数式組み立て</span></h3>



<p class="wp-block-paragraph">こんな場面で特に効果があります。</p>



<ul class="wp-block-list"><li>「特定の部署かつ特定の月だけを合計したい」（複数条件の集計）</li><li>「売上上位5件だけを抽出したい」（LARGE関数との組み合わせ）</li><li>「空白セルを除外して平均を出したい」（条件付き平均）</li><li>「別シートのマスタから名前を引っ張りたい」（VLOOKUP/XLOOKUP系）</li></ul>



<h3 class="wp-block-heading"><span id="toc10">操作手順</span></h3>



<ol class="wp-block-list"><li>数式を入力したいセルをクリックして選択する</li><li>サイドパネルを開く（右上の星マーク）</li><li>「〇〇を集計する数式を作って」とプロンプトを送信する</li><li>候補数式が提案され、右に「貼り付け」ボタンが表示される</li><li>確認したら「貼り付け」をクリックして選択中のセルに入力する</li></ol>



<p class="wp-block-paragraph"><!-- screenshot: サイドパネルに数式生成の提案と「貼り付け」ボタンが表示された状態 --></p>



<h3 class="wp-block-heading"><span id="toc11">コピペで使えるプロンプト例</span></h3>



<pre class="wp-block-code"><code>（条件付き集計）
A列に部署名、B列に月（1〜12の数字）、C列に売上金額が入っています。
営業部かつ4月の売上合計を出す数式を作ってください。

（上位N件の抽出）
A列に営業担当者名、B列に売上金額があります。
売上上位3件の担当者名と金額をD列E列に取り出す数式を作ってください。

（別シート参照）
「マスタ」シートにA列：社員番号、B列：氏名があります。
今のシートのA列に社員番号が入っています。
B列に氏名を引っ張ってくる数式を作ってください。</code></pre>



<p class="wp-block-paragraph">提案された数式が意図と違う場合は、「条件をもう一つ追加したい」「集計対象の列が違う」のように追加指示を送れば修正案を返してくれます。</p>



<h2 class="wp-block-heading"><span id="toc12">応用2：複数シートをまたいだ売上データを分析させる</span></h2>



<p class="wp-block-paragraph">月次シートが12枚、支店別シートが5枚……そんな構成のスプレッドシートで「全体の傾向を見たい」ときに、SUMIFS や IMPORTRANGE を書かなくても、サイドパネルに頼めます。</p>



<h3 class="wp-block-heading"><span id="toc13">使う場面：月次シート・支店別シートの横断集計</span></h3>



<ul class="wp-block-list"><li>1〜12月の月次シートを一度に比較して、売上が最も高い月を教えてほしい</li><li>支店A・支店B・支店Cの売上を比較して、差が最も大きいカテゴリを教えてほしい</li><li>前年と今年の数値を並べて、増減率が大きい項目を教えてほしい</li></ul>



<p class="wp-block-paragraph">従来は IMPORTRANGE や 3D 参照で手動集計するか、コピペで別シートに集約する必要がありましたが、サイドパネルならその手間が省けます。</p>



<h3 class="wp-block-heading"><span id="toc14">事前準備チェックリスト（シート名/ヘッダー/データ範囲）</span></h3>



<p class="wp-block-paragraph">複数シート分析を成功させるには、以下の3点を事前に確認しておきましょう。</p>



<ul class="wp-block-list"><li><strong>シート名が意味のある名前になっている</strong>（例: 「Sheet1」「Sheet2」より「2024年売上」「2025年売上」）</li><li><strong>各シートのヘッダー行が統一されている</strong>（「売上金額」と「売上高」が混在していると誤認識のもとに）</li><li><strong>データが空白セルで分断されていない</strong>（連続した表形式が望ましい）</li></ul>



<p class="wp-block-paragraph">これら3点が整っていないと、Gemini がシートを正しく認識できない場合があります。分析前に確認しておくと安心ですよ。</p>



<h3 class="wp-block-heading"><span id="toc15">操作手順</span></h3>



<ol class="wp-block-list"><li>サイドパネルを開く</li><li>比較したいシート名を明示してプロンプトを送信する</li><li>分析結果がテキストや表で返ってくる</li><li>「まとめの表を貼り付けて」と追加指示すると、新しいシートに結果を挿入してくれる場合もある</li></ol>



<p class="wp-block-paragraph"><!-- screenshot: 複数シートを参照したプロンプト結果がサイドパネルに表示された状態 --></p>



<pre class="wp-block-code"><code>（月次シート横断比較）
「1月」〜「12月」の各シートには、A列に商品名、B列に売上金額が入っています。
月ごとの売上合計を比較して、最も売上が多い月と少ない月を教えてください。

（支店別シート比較）
「東京」「大阪」「名古屋」の各シートに同じ構成の売上データがあります。
3支店の4月〜6月の売上を比較して、支店ごとの合計と差を表でまとめてください。</code></pre>



<p class="wp-block-paragraph">従来の集計方法として<a href="https://mashukabu.com/spreadsheet-sumifs-function/">SUMIFS関数</a>や<a href="https://mashukabu.com/spreadsheet-filter-function/">FILTER関数</a>を使う方法もあります。数式として保存・再利用したい場合はそちらも合わせて確認してみてください。</p>



<h2 class="wp-block-heading"><span id="toc16">応用3：自然言語の指示でヒストグラムを出力する</span></h2>



<p class="wp-block-paragraph">「このデータの分布を見たい」というとき、チャートウィザードを開いて種類を選んで……という操作より、サイドパネルに一言伝えるほうが速いです。</p>



<h3 class="wp-block-heading"><span id="toc17">使う場面：年齢別・売上額別の分布把握</span></h3>



<ul class="wp-block-list"><li>アンケートの回答者年齢分布をヒストグラムで確認したい</li><li>顧客の購入金額帯の分布を見て、価格設定の参考にしたい</li><li>試験の点数分布を可視化して成績の偏りを把握したい</li></ul>



<p class="wp-block-paragraph">「どの区間に集中しているか」「外れ値が多いか」を一目で確認できるのがヒストグラムの強みです。</p>



<h3 class="wp-block-heading"><span id="toc18">操作手順</span></h3>



<ol class="wp-block-list"><li>ヒストグラムにしたいデータ列を選択する（例: A列全体を選択）</li><li>サイドパネルを開く</li><li>「選択した列のデータをヒストグラムにして」とプロンプトを送信する</li><li>チャートのプレビューと「挿入」ボタンが表示される</li><li>確認して「挿入」をクリックするとシートにチャートが追加される</li></ol>



<p class="wp-block-paragraph"><!-- screenshot: サイドパネルでヒストグラムの提案が表示された状態 --></p>



<h3 class="wp-block-heading"><span id="toc19">思った通りに出ない時のプロンプト書き換え</span></h3>



<p class="wp-block-paragraph">デフォルトのビン（区間）幅が細かすぎる・粗すぎる場合は、プロンプトに指定を追加します。</p>



<pre class="wp-block-code"><code>（基本）
A列に入っている年齢データをヒストグラムにして。

（ビン幅を指定）
A列に入っている年齢データを、ビン幅10歳でヒストグラムにして（10代・20代・30代…の区切りで）。

（タイトル付き）
B列の購入金額データをヒストグラムにして。
グラフのタイトルは「購入金額の分布（2026年4月）」にして。</code></pre>



<p class="wp-block-paragraph">軸や色を調整したい場合は、生成されたチャートを右クリック → 「グラフを編集」から通常のチャートエディタで微調整できます。</p>



<h2 class="wp-block-heading"><span id="toc20">うまくいかないときのプロンプト改善のコツ</span></h2>



<p class="wp-block-paragraph">サイドパネルの回答が期待と違ったり、「データが見つかりません」と返ってくる場合は、次の順番で確認してください。</p>



<p class="wp-block-paragraph"><strong>1. 範囲を明示する</strong>: 「A1:D100のデータを分析して」のように範囲を具体的に指定すると、認識精度が上がります。</p>



<p class="wp-block-paragraph"><strong>2. シート名を明示する（複数シートのとき）</strong>: 「『売上一覧』シートの」のように対象シートを冒頭に書くとミスが減ります。</p>



<p class="wp-block-paragraph"><strong>3. 出力形式を具体的にする</strong>: 「箇条書きで5点」「表形式で月ごとに集計」「数式だけ出して」のように出力のフォーマットを明示すると、使いやすい形で返ってきます。</p>



<p class="wp-block-paragraph"><strong>4. 一度に頼みすぎない</strong>: 「数式を作りつつ、チャートも作って、要約もして」とまとめて依頼するより、1回の指示で1つのタスクに絞るほうが精度が高くなります。</p>



<h2 class="wp-block-heading"><span id="toc21">まとめ</span></h2>



<p class="wp-block-paragraph">GoogleスプレッドシートのGeminiサイドパネルで使える3つの応用テクニックを見てきました。</p>



<ul class="wp-block-list"><li><strong>応用1</strong>: 日本語で説明して数式を生成 → 複雑な SUMIFS や FILTER を一から書かなくてよい</li><li><strong>応用2</strong>: 複数シートをまたいだ分析 → 12枚の月次シートも一言で横断比較できる</li><li><strong>応用3</strong>: 口頭指示でヒストグラム生成 → チャートウィザードを使わずにデータ分布を可視化</li></ul>



<p class="wp-block-paragraph">=AI()関数との使い分けは「一度の分析 → サイドパネル」「行ごとの変換 → =AI()関数」がシンプルな基準です。</p>



<p class="wp-block-paragraph">ドキュメント・Gmail・スライドでのGeminiサイドパネル活用は<a href="https://mashukabu.com/gemini-docs-gmail-slides-daily-use/">GeminiでGoogleドキュメント・Gmail・スライドを使いこなす｜会社員が毎日使える3つの機能</a>で解説しています。Gemini をWorkspace全体でどう使うかの全体像は<a href="https://mashukabu.com/google-workspace-gemini-workflow/">Google Workspace Geminiの使い方｜4つの業務シーンで仕事を半分にする</a>も合わせて確認してみてください。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/spreadsheet-gemini-sidepanel-applied/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>GASとGeminiでスプレッドシートのデータを自動要約｜AIが日次レポートを作る仕組み</title>
		<link>https://mashukabu.com/gas-gemini-spreadsheet-auto-summary/</link>
					<comments>https://mashukabu.com/gas-gemini-spreadsheet-auto-summary/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Tue, 09 Jun 2026 01:45:36 +0000</pubDate>
				<category><![CDATA[生成AI × Office]]></category>
		<category><![CDATA[GAS]]></category>
		<category><![CDATA[Gemini]]></category>
		<category><![CDATA[Google Apps Script]]></category>
		<category><![CDATA[スプレッドシート]]></category>
		<category><![CDATA[日次レポート]]></category>
		<category><![CDATA[生成AI]]></category>
		<category><![CDATA[自動化]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=7880</guid>

					<description><![CDATA[GASからGemini APIを呼び出せば、スプレッドシートの売上やアンケートデータをAIが自動で要約し、日次レポートとしてメール配信できます。APIキー取得・UrlFetchAppでのリクエスト・トリガー定期実行まで、コピペで動く完成コードと、コスト・送信上限の注意点付きで解説します。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">「スプレッドシートに毎日データは溜まっていくのに、その中身を誰も読んでいない」。そんな状態になっていませんか。</p>



<p class="wp-block-paragraph">売上の推移、問い合わせの傾向、アンケートの自由記述。どれも宝の山のはずなのに、行数が増えるほど目を通すのが面倒になり、結局放置されてしまいます。気づけば「今週の数字どうだった？」と聞かれて慌てて手集計、というのが定番化していたりしますよね。</p>



<p class="wp-block-paragraph">この記事では、GAS（Google Apps Script）からGemini APIを呼び出して、スプレッドシートのデータをAIに自動で要約させ、毎朝メールで届く日次レポートを作る方法を解説します。手順通りに進めれば、コピペで動く仕組みが完成します。最後にコストと送信上限の注意点もまとめているので、安心して導入できますよ。</p>



<p class="wp-block-paragraph">GASそのものが初めてという方は、先に<a href="https://mashukabu.com/spreadsheet-gas-getting-started-recipes/">【GAS入門】スプレッドシート自動化の始め方とコピペで使えるレシピ集</a>に目を通しておくと、この記事の内容がぐっと理解しやすくなります。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-9" checked><label class="toc-title" for="toc-checkbox-9">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">GAS × Gemini で何ができるのか</a><ol><li><a href="#toc2" tabindex="0">必要な前提条件</a></li></ol></li><li><a href="#toc3" tabindex="0">手順【全5ステップ】</a><ol><li><a href="#toc4" tabindex="0">ステップ1: Gemini APIキーを取得する</a></li><li><a href="#toc5" tabindex="0">ステップ2: スプレッドシートとGASエディタを開く</a></li><li><a href="#toc6" tabindex="0">ステップ3: APIキーを安全に保存する</a></li><li><a href="#toc7" tabindex="0">ステップ4: Geminiに要約させる本体コードを書く</a></li><li><a href="#toc8" tabindex="0">ステップ5: トリガーで毎朝自動実行する</a></li></ol></li><li><a href="#toc9" tabindex="0">応用テクニック・カスタマイズ</a></li><li><a href="#toc10" tabindex="0">うまくいかないときの対処法</a></li><li><a href="#toc11" tabindex="0">コストと送信上限の注意点</a></li><li><a href="#toc12" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">GAS × Gemini で何ができるのか</span></h2>



<p class="wp-block-paragraph">まず、これから作る仕組みの全体像を確認しておきましょう。</p>



<p class="wp-block-paragraph">GASは、GoogleスプレッドシートやGmailを自動で操作できるプログラミング環境です。一方のGeminiは、Googleが提供する生成AIで、文章の要約やコメント生成が得意です。この2つを組み合わせると、次のような流れが自動で回ります。</p>



<ol class="wp-block-list"><li>GASがスプレッドシートから最新のデータを読み取る</li><li>そのデータをGemini APIに渡して、要約とコメントを生成させる</li><li>AIが返した文章を、GASがメールやChatに送信する</li><li>トリガーで毎朝自動実行する</li></ol>



<p class="wp-block-paragraph">つまり、人間が一切手を動かさなくても、「昨日の売上は前日比12%増。特に午後の時間帯が好調でした」といったAIの分析コメント付きレポートが、毎朝メールボックスに届くようになります。</p>



<p class="wp-block-paragraph">専門用語を1つだけ補足します。<strong>API（エーピーアイ）</strong> とは、外部のサービスを自分のプログラムから呼び出すための窓口のことです。GASからGeminiに「このデータを要約して」とお願いするには、このAPIという窓口を使います。難しく見えますが、やることは「決められた住所に決められた形式でお願いを送るだけ」とイメージしてもらえれば大丈夫です。</p>



<p class="wp-block-paragraph">完成後のゴール状態は、こうです。毎朝9時に、スプレッドシートの当日分データをAIが要約したレポートが、指定したメールアドレスに自動で届く。これを目指して進めていきましょう。</p>



<h3 class="wp-block-heading"><span id="toc2">必要な前提条件</span></h3>



<p class="wp-block-paragraph">始める前に、以下を確認してください。</p>



<ul class="wp-block-list"><li>Googleアカウント（無料のもので構いません）</li><li>要約したいデータが入ったGoogleスプレッドシート</li><li>Google AI Studio でGemini APIキーを取得できること（次のセクションで取得します）</li></ul>



<p class="wp-block-paragraph">プログラミングの経験は不要です。コードはすべてコピペで使えます。</p>



<h2 class="wp-block-heading"><span id="toc3">手順【全5ステップ】</span></h2>



<p class="wp-block-paragraph">ここからは実際に手を動かしていきます。1ステップずつ確実に進めれば、迷わず完成できますよ。</p>



<h3 class="wp-block-heading"><span id="toc4">ステップ1: Gemini APIキーを取得する</span></h3>



<p class="wp-block-paragraph">Gemini APIを使うには、自分専用の「APIキー」が必要です。これはAIに「あなたは許可された利用者ですよ」と伝えるためのパスワードのようなものだと考えてください。</p>



<ol class="wp-block-list"><li>ブラウザで Google AI Studio（aistudio.google.com）を開く</li><li>Googleアカウントでログインする</li><li>画面左メニューまたは右上の[Get API key]（APIキーを取得）ボタンをクリックする</li><li>[Create API key]（APIキーを作成）を選び、表示された文字列をコピーする</li></ol>



<p class="wp-block-paragraph">コピーしたAPIキーは、この後コードに貼り付けます。<strong>このキーは絶対に他人に見せたり、公開したりしないでください。</strong> 流出すると他人に使われて、思わぬ料金が発生する恐れがあります。</p>



<p class="wp-block-paragraph">無料枠については後ほど詳しく触れますが、個人や小さなチームで使う分には無料の範囲内で十分まかなえることがほとんどです。</p>



<h3 class="wp-block-heading"><span id="toc5">ステップ2: スプレッドシートとGASエディタを開く</span></h3>



<p class="wp-block-paragraph">要約したいデータが入ったスプレッドシートを開きます。</p>



<ol class="wp-block-list"><li>対象のスプレッドシートを開く</li><li>上部メニューの[拡張機能]をクリックする</li><li>[Apps Script]を選ぶ</li></ol>



<p class="wp-block-paragraph">新しいタブでGASのコードエディタが開きます。最初から <code>function myFunction() {}</code> という空のコードが書かれていますが、これは丸ごと消して大丈夫です。</p>



<p class="wp-block-paragraph">今回サンプルとして想定するデータは、A列に「日付」、B列に「売上」、C列に「問い合わせ件数」が並んでいるシートです。皆さんの実際のデータに合わせて、後でコード内の列指定を調整してください。</p>



<h3 class="wp-block-heading"><span id="toc6">ステップ3: APIキーを安全に保存する</span></h3>



<p class="wp-block-paragraph">APIキーをコードに直接書くこともできますが、おすすめしません。コードを誰かと共有したときに、キーまで一緒に渡ってしまうからです。</p>



<p class="wp-block-paragraph">GASには「スクリプトプロパティ」という、キーなどの秘密情報を安全にしまっておく場所があります。まずはここにAPIキーを保存しましょう。</p>



<p class="wp-block-paragraph">エディタに次のコードを貼り付けて、<code>ここにAPIキーを貼る</code> の部分をステップ1でコピーしたキーに置き換えてください。</p>



<pre class="wp-block-code"><code>// このコードは1回だけ実行する（APIキーをスクリプトプロパティに保存）
function setApiKey() {
  const apiKey = 'ここにAPIキーを貼る';
  PropertiesService.getScriptProperties().setProperty('GEMINI_API_KEY', apiKey);
  console.log('APIキーを保存しました');
}</code></pre>



<p class="wp-block-paragraph">貼り付けたら、エディタ上部の関数選択メニューで <code>setApiKey</code> を選び、[実行]ボタンを押します。初回は「承認が必要です」という画面が出るので、自分のアカウントを選んで許可してください。</p>



<p class="wp-block-paragraph">実行後、ログに「APIキーを保存しました」と出れば成功です。これで以降のコードからは、キーの文字列を書かずに安全に呼び出せるようになります。</p>



<p class="wp-block-paragraph">保存が終わったら、<code>setApiKey</code> のコードからAPIキーの文字列を消しておくと、より安全です。</p>



<h3 class="wp-block-heading"><span id="toc7">ステップ4: Geminiに要約させる本体コードを書く</span></h3>



<p class="wp-block-paragraph">いよいよメインのコードです。スプレッドシートのデータを読み取り、Geminiに渡して要約させ、メールで送信する一連の処理を書きます。</p>



<p class="wp-block-paragraph">少し長く見えますが、やっていることは「データを集める → AIにお願いする → 結果を送る」の3つだけです。コメントで各処理を説明しているので、安心してコピペしてください。</p>



<pre class="wp-block-code"><code>function sendDailyReport() {
  // --- 1. スプレッドシートからデータを読み取る ---
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const data = sheet.getDataRange().getValues();

  // ヘッダー行を含めてテキスト化する（行数が多い場合は直近30行などに絞る）
  const rows = data.slice(-30); // 最新30行に限定（コスト・上限対策）
  let dataText = '';
  rows.forEach(function(row) {
    dataText += row.join(', ') + 'n';
  });

  // --- 2. Geminiに渡すプロンプト（指示文）を組み立てる ---
  const prompt =
    'あなたは優秀なデータアナリストです。以下のスプレッドシートのデータを読み、n' +
    '日次レポートとして次の形式で日本語でまとめてください。n' +
    '1. 全体サマリー（2〜3文）n' +
    '2. 注目すべき変化や傾向（箇条書き2〜3点）n' +
    '3. 明日に向けたひとことコメントnn' +
    '【データ】n' + dataText;

  // --- 3. Gemini APIを呼び出す ---
  const summary = callGemini(prompt);

  // --- 4. メールで送信する ---
  const today = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd');
  GmailApp.sendEmail(
    'あなたのメールアドレス@example.com', // ← 送信先に変更
    '【日次レポート】' + today,
    summary
  );
}

// Gemini API を呼び出す関数（UrlFetchApp を使用）
function callGemini(prompt) {
  const apiKey = PropertiesService.getScriptProperties().getProperty('GEMINI_API_KEY');
  const model = 'gemini-2.0-flash'; // 軽量・低コストなモデル
  const url = 'https://generativelanguage.googleapis.com/v1beta/models/'
    + model + ':generateContent?key=' + apiKey;

  const payload = {
    contents: [
      { parts: [ { text: prompt } ] }
    ]
  };

  const options = {
    method: 'post',
    contentType: 'application/json',
    payload: JSON.stringify(payload),
    muteHttpExceptions: true // エラー時も中身を確認できるようにする
  };

  const response = UrlFetchApp.fetch(url, options);
  const json = JSON.parse(response.getContentText());

  // 正常時は要約テキストを取り出す
  if (json.candidates &amp;&amp; json.candidates.length &gt; 0) {
    return json.candidates[0].content.parts[0].text;
  } else {
    // エラー時は内容をそのまま返す（原因確認用）
    return 'AIの応答取得に失敗しました。詳細: ' + response.getContentText();
  }
}</code></pre>



<p class="wp-block-paragraph">ここで使っている <strong>UrlFetchApp（ユーアールエルフェッチアップ）</strong> が、GASから外部のAPIにHTTPリクエストを送るための機能です。Geminiの窓口（URL）に、要約してほしいデータと指示文をまとめて送り、返ってきた文章を受け取っています。</p>



<p class="wp-block-paragraph">コードを貼り付けたら、次の2か所を必ず書き換えてください。</p>



<ul class="wp-block-list"><li>メール送信先（<code>あなたのメールアドレス@example.com</code>）を自分の宛先に変更する</li><li>データの列構成が違う場合は、プロンプト内の説明をデータに合わせて調整する</li></ul>



<p class="wp-block-paragraph">書き換えたら、関数メニューで <code>sendDailyReport</code> を選んで[実行]してみましょう。数秒後、指定したメールアドレスにAIの要約レポートが届けば成功です。</p>



<p class="wp-block-paragraph">うまくいかないときは、後半の「うまくいかないときの対処法」を確認してください。</p>



<h3 class="wp-block-heading"><span id="toc8">ステップ5: トリガーで毎朝自動実行する</span></h3>



<p class="wp-block-paragraph">最後に、このレポートを毎朝自動で送る設定をします。手動で実行する手間をなくす、いちばん大事なステップです。</p>



<p class="wp-block-paragraph">GASには「トリガー」という、決まった時刻にコードを自動実行する仕組みがあります。</p>



<ol class="wp-block-list"><li>GASエディタの左メニューにある時計アイコン（[トリガー]）をクリックする</li><li>右下の[トリガーを追加]ボタンをクリックする</li><li>実行する関数に <code>sendDailyReport</code> を選ぶ</li><li>イベントのソースを「時間主導型」にする</li><li>「日付ベースのタイマー」を選び、時刻を「午前8時〜9時」などに設定する</li><li>[保存]をクリックする</li></ol>



<p class="wp-block-paragraph">これで毎朝、指定した時間帯にAIが自動でレポートを作り、メールで届けてくれます。あとは放っておくだけで、毎日データの要約が手に入る状態になりました。</p>



<p class="wp-block-paragraph">トリガーの設定をもっと細かくカスタマイズしたい方は、<a href="https://mashukabu.com/gas-trigger-automation/">GASのトリガーでスプレッドシートの集計・通知を自動化する方法</a>で、時間指定やフォーム送信時の起動など、応用パターンを詳しく解説しています。</p>



<h2 class="wp-block-heading"><span id="toc9">応用テクニック・カスタマイズ</span></h2>



<p class="wp-block-paragraph">基本の仕組みができたら、少しの工夫でさらに実用的になります。</p>



<p class="wp-block-paragraph"><strong>送信先をChatに変える</strong>。メールではなくGoogle ChatやSlackに通知したい場合は、Webhook（ウェブフック)というURL宛にUrlFetchAppでメッセージを送れば実現できます。チームの全員に共有したいときに便利です。</p>



<p class="wp-block-paragraph"><strong>要約の切り口を変える</strong>。プロンプト（指示文）を書き換えるだけで、レポートの内容は自由に調整できます。たとえば「ネガティブな問い合わせだけを抽出して」「先週との比較を中心に」といった指示にすると、目的に合った分析が返ってきます。プロンプトこそがこの仕組みの心臓部だと考えてください。</p>



<p class="wp-block-paragraph"><strong>複数シートをまとめる</strong>。売上シートとアンケートシートを両方読み込んで、1通のレポートにまとめることもできます。<code>getSheetByName('シート名')</code> で対象シートを指定すれば、データを組み合わせられます。</p>



<p class="wp-block-paragraph"><strong>アンケートの自由記述を要約する</strong>。数値データだけでなく、お客様アンケートの自由記述欄をGeminiに渡せば、「不満の声に多かったキーワード」や「全体の感情傾向」をAIがまとめてくれます。手作業では時間のかかる定性分析が一瞬で終わります。</p>



<h2 class="wp-block-heading"><span id="toc10">うまくいかないときの対処法</span></h2>



<p class="wp-block-paragraph">実行してエラーが出ても、原因はだいたい決まっています。落ち着いて確認していきましょう。</p>



<p class="wp-block-paragraph"><strong>メールが届かない・要約が空っぽ</strong>。まずGASエディタの[実行ログ]を確認してください。「AIの応答取得に失敗しました」と出ている場合は、APIキーが正しく保存されているかを疑います。ステップ3の <code>setApiKey</code> をもう一度実行してみてください。</p>



<p class="wp-block-paragraph"><strong>「APIキーが無効」というエラー</strong>。Google AI Studioで取得したキーが正しくコピーされているか確認します。前後に余計なスペースが入っていることがよくあるので、貼り直すと直る場合が多いです。</p>



<p class="wp-block-paragraph"><strong>429エラー（リクエストが多すぎます）</strong>。短時間にAPIを呼びすぎると出ます。無料枠の1分あたりの上限を超えた可能性が高いので、少し時間をおいてから再実行してください。トリガーは1日1回なら問題になりません。</p>



<p class="wp-block-paragraph"><strong>承認画面が繰り返し出る</strong>。GASが初めてGmailや外部通信を使うときに表示されます。「詳細」→「（プロジェクト名）に移動」を選んで、許可を進めてください。一度許可すれば次回からは出ません。</p>



<p class="wp-block-paragraph"><strong>それでも解決しない場合</strong>は、<code>callGemini</code> 関数の戻り値（エラー詳細）をメール本文や実行ログでそのまま確認すると、Geminiが返したエラーメッセージから原因を特定できます。</p>



<h2 class="wp-block-heading"><span id="toc11">コストと送信上限の注意点</span></h2>



<p class="wp-block-paragraph">最後に、安心して使い続けるための注意点をまとめます。ここを押さえておけば、想定外の請求に驚くことはありません。</p>



<p class="wp-block-paragraph"><strong>無料枠の範囲</strong>。Gemini APIには無料利用枠があり、軽量モデル（gemini-2.0-flashなど）を1日1回のレポート用途で使う程度であれば、無料の範囲内で十分まかなえることがほとんどです。ただし無料枠の具体的な上限値は変更されることがあるため、Google AI Studio や公式の料金ページで最新の条件を確認してください。</p>



<p class="wp-block-paragraph"><strong>送るデータ量を絞る</strong>。AIに渡すデータが多いほど処理コストは上がります。サンプルコードで <code>data.slice(-30)</code> として最新30行に限定しているのは、このためです。何百行も丸ごと渡す必要はありません。要約に必要な分だけ渡すのがコツです。</p>



<p class="wp-block-paragraph"><strong>実行回数を増やしすぎない</strong>。トリガーを「1時間ごと」などにすると、呼び出し回数が一気に増えて無料枠を超えやすくなります。レポート用途なら1日1回で十分です。</p>



<p class="wp-block-paragraph"><strong>有料化が必要になったら</strong>。データ量や回数が増えて無料枠を超える場合は、Google Cloud側で課金設定（Vertex AI など）を行う方法もあります。本格運用に移る際は、まず無料枠でしばらく試してから判断すると安全です。</p>



<p class="wp-block-paragraph">GASの自動化が初めての方は、まず<a href="https://mashukabu.com/spreadsheet-gas-getting-started-recipes/">【GAS入門】スプレッドシート自動化の始め方とコピペで使えるレシピ集</a>で基礎を固めてから、この仕組みに挑戦するのもおすすめです。そもそもGASで自動化すべき業務かどうか迷ったら<a href="https://mashukabu.com/gas-suitable-unsuitable-tasks/">GASが向く業務・向かない業務の見分け方</a>を確認してみてください。</p>



<h2 class="wp-block-heading"><span id="toc12">まとめ</span></h2>



<p class="wp-block-paragraph">GASとGeminiを組み合わせれば、スプレッドシートに溜まったデータを、AIが毎朝自動で要約してレポートにしてくれます。今回のポイントを振り返りましょう。</p>



<ul class="wp-block-list"><li>Google AI Studio でAPIキーを取得し、スクリプトプロパティに安全に保存する</li><li>UrlFetchApp でGemini APIにデータと指示文を送り、要約を受け取る</li><li>プロンプト（指示文）を変えれば、レポートの切り口は自由に調整できる</li><li>トリガーで毎朝自動実行すれば、放っておくだけでレポートが届く</li><li>渡すデータは必要な分に絞り、実行は1日1回にしてコストを抑える</li></ul>



<p class="wp-block-paragraph">一度仕組みを作ってしまえば、あとは毎朝AIが分析してくれる状態が続きます。手集計に追われていた時間を、本来やるべき仕事に使えるようになりますよ。まずはAPIキーの取得から、気軽に試してみてください。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/gas-gemini-spreadsheet-auto-summary/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>GASで期限リマインド・未対応タスクを自動アラート｜Google Chatとメールに通知</title>
		<link>https://mashukabu.com/gas-deadline-reminder-alert/</link>
					<comments>https://mashukabu.com/gas-deadline-reminder-alert/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Tue, 09 Jun 2026 01:45:35 +0000</pubDate>
				<category><![CDATA[仕事効率化]]></category>
		<category><![CDATA[GAS]]></category>
		<category><![CDATA[Google Apps Script]]></category>
		<category><![CDATA[Google Chat]]></category>
		<category><![CDATA[スプレッドシート]]></category>
		<category><![CDATA[リマインド]]></category>
		<category><![CDATA[自動化]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=7876</guid>

					<description><![CDATA[スプレッドシートのタスク一覧から期限が近い行・未対応のまま放置された行をGASが自動検出し、Google ChatやGmailに毎朝アラート通知する仕組みを解説します。時間主導トリガーで定期実行し、通知済みフラグで重複通知を防ぐコピペコード付き。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">タスクや案件をスプレッドシートで管理していると、「気づいたら期限を過ぎていた」「未対応のまま放置されていた」という事態が起きますよね。</p>



<p class="wp-block-paragraph">毎日シートを開いてチェックすればよいのですが、件数が増えると見落としが必ず発生します。放置すれば対応漏れがクレームや納期遅延につながり、後始末のほうがずっと大変です。</p>



<p class="wp-block-paragraph">この記事では、GAS（Google Apps Script）を使ってスプレッドシートの「期限が近い行」「未対応のまま放置された行」を自動検出し、Google Chat やメールに毎朝アラートを飛ばす仕組みを作ります。コピペで動くコード付きなので、シートに合わせて少し書き換えるだけで使えます。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-10" checked><label class="toc-title" for="toc-checkbox-10">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">この仕組みでできること</a></li><li><a href="#toc2" tabindex="0">前提：スプレッドシートの準備</a></li><li><a href="#toc3" tabindex="0">アラートを検出するコードを書く</a></li><li><a href="#toc4" tabindex="0">Google Chatに通知する設定</a><ol><li><a href="#toc5" tabindex="0">Webhook URLを取得する</a></li><li><a href="#toc6" tabindex="0">通知用の関数を追加する</a></li><li><a href="#toc7" tabindex="0">メールで受け取りたい場合</a></li></ol></li><li><a href="#toc8" tabindex="0">毎朝自動で実行する（時間主導トリガー）</a></li><li><a href="#toc9" tabindex="0">重複通知を防ぐ仕組みと注意点</a></li><li><a href="#toc10" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">この仕組みでできること</span></h2>



<p class="wp-block-paragraph">GAS とは、Google スプレッドシートやドキュメントを操作できる、Google 公式のプログラム実行環境のことです。Excel でいうマクロ（VBA）の Google 版だと考えると分かりやすいです。</p>



<p class="wp-block-paragraph">今回作る仕組みのゴールはシンプルです。</p>



<ul class="wp-block-list"><li>スプレッドシートのタスク一覧を上から順にチェックする</li><li>「期限が3日以内に迫っている」または「期限を過ぎているのに未対応」の行を見つける</li><li>該当した行の内容を Google Chat やメールにまとめて通知する</li><li>これを毎朝決まった時刻に自動実行する</li><li>一度通知した行は再通知しないよう「通知済み」フラグを立てる</li></ul>



<p class="wp-block-paragraph">つまり、自分でシートを見に行かなくても、対応が必要なタスクだけが毎朝手元に届く状態を作るわけです。タスク管理だけでなく、案件の進捗管理や、<a href="https://mashukabu.com/gas-spreadsheet-invoice-pdf/">スプレッドシートから請求書PDFを自動作成する仕組み</a>と組み合わせれば、請求の入金確認など「期限つきで状態を管理する一覧」ならほぼ同じ仕組みで応用できます。</p>



<p class="wp-block-paragraph">GAS自体がはじめての方は、先に基本操作をおさえておくとスムーズです。スクリプトエディタの開き方や実行・承認の流れは、<a href="https://mashukabu.com/spreadsheet-gas-getting-started-recipes/">GASの始め方とすぐ使えるレシピ集</a>で詳しく解説しています。</p>



<h2 class="wp-block-heading"><span id="toc2">前提：スプレッドシートの準備</span></h2>



<p class="wp-block-paragraph">まずは通知対象になるシートを用意します。今回は次のような列構成を前提に進めます。</p>



<figure class="wp-block-table"><table><thead><tr><th>列</th><th>内容</th><th>例</th></tr></thead><tbody><tr><td>A</td><td>タスク名</td><td>請求書送付（A社）</td></tr><tr><td>B</td><td>担当者</td><td>田中</td></tr><tr><td>C</td><td>期限</td><td>2026-06-10</td></tr><tr><td>D</td><td>ステータス</td><td>未対応</td></tr><tr><td>E</td><td>通知済みフラグ</td><td>（空欄でOK）</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">ポイントは2つあります。</p>



<p class="wp-block-paragraph">1行目は見出し行にして、2行目からデータを入れてください。コードは2行目以降を処理対象とします。</p>



<p class="wp-block-paragraph">C列の「期限」は、必ず日付として入力してください。文字列の「6/10」ではなく、日付形式で入れるのがポイントです。セルを選択して右下に日付らしい表示が出ていればOKです。</p>



<p class="wp-block-paragraph">E列の「通知済みフラグ」は、最初は空欄のままで構いません。GASが通知を送ったときに、自動で「通知済」と書き込みます。これによって、同じタスクを毎朝何度も通知してしまうのを防ぎます。</p>



<h2 class="wp-block-heading"><span id="toc3">アラートを検出するコードを書く</span></h2>



<p class="wp-block-paragraph">それではメインのコードを作ります。ちょっと長く見えますが、やっていることは「上から順に行を見て、条件に合う行を集めて通知する」だけのシンプルな処理です。</p>



<p class="wp-block-paragraph">スプレッドシートのメニューから「拡張機能」→「Apps Script」を開き、次のコードを貼り付けてください。</p>



<pre class="wp-block-code"><code>// ===== 設定（ここだけ環境に合わせて変更）=====
const SHEET_NAME = 'タスク一覧';   // 対象シート名
const DEADLINE_DAYS = 3;          // 期限まで何日以内を「期限間近」とするか
const STATUS_DONE = '完了';        // 完了とみなすステータス名

function checkDeadlineAndAlert() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME);
  if (!sheet) {
    Logger.log('シートが見つかりません: ' + SHEET_NAME);
    return;
  }

  const lastRow = sheet.getLastRow();
  if (lastRow &lt; 2) return; // データなし

  // 2行目以降のA〜E列をまとめて取得
  const values = sheet.getRange(2, 1, lastRow - 1, 5).getValues();

  // 今日の0時を基準にする（時刻のズレで判定がブレないように）
  const today = new Date();
  today.setHours(0, 0, 0, 0);

  const alerts = [];      // 通知メッセージの材料を貯める
  const flagUpdates = []; // 通知済みフラグを立てる行番号

  for (let i = 0; i &lt; values.length; i++) {
    const [taskName, owner, deadline, status, notified] = values[i];
    const rowNumber = i + 2; // 実際のシート行番号

    // 完了済み・通知済み・期限が空の行はスキップ
    if (status === STATUS_DONE) continue;
    if (notified === '通知済') continue;
    if (!(deadline instanceof Date)) continue;

    // 期限を0時に揃えて、今日との差を「日数」で求める
    const dueDate = new Date(deadline);
    dueDate.setHours(0, 0, 0, 0);
    const diffDays = Math.round((dueDate - today) / (1000 * 60 * 60 * 24));

    let label = '';
    if (diffDays &lt; 0) {
      label = '期限切れ（' + (-diffDays) + '日経過）';
    } else if (diffDays &lt;= DEADLINE_DAYS) {
      label = '期限間近（あと' + diffDays + '日）';
    } else {
      continue; // まだ余裕があるのでスキップ
    }

    alerts.push('・' + taskName + '【' + owner + '】 ' + label + ' / 状態: ' + status);
    flagUpdates.push(rowNumber);
  }

  if (alerts.length === 0) {
    Logger.log('通知対象なし');
    return;
  }

  // 通知本文を組み立てる
  const message = '対応が必要なタスクが ' + alerts.length + ' 件あります。nn'
    + alerts.join('n');

  // 通知を送る（次の見出しで関数を用意します）
  sendChatNotification(message);
  // sendMailNotification(message); // メールで送りたい場合はこちらを使う

  // 通知できた行に「通知済」を書き込む
  flagUpdates.forEach(function(rowNumber) {
    sheet.getRange(rowNumber, 5).setValue('通知済');
  });

  Logger.log(alerts.length + ' 件を通知しました');
}</code></pre>



<p class="wp-block-paragraph">コードの上部にある「設定」エリアの3つの変数を、自分のシートに合わせて変えてください。</p>



<ul class="wp-block-list"><li><code>SHEET_NAME</code>：通知したいシートの名前（タブの名前）に変更します</li><li><code>DEADLINE_DAYS</code>：期限の何日前から通知するかです。「3」なら3日前から知らせます</li><li><code>STATUS_DONE</code>：完了を表すステータス名です。シートで使っている言葉に合わせてください</li></ul>



<p class="wp-block-paragraph">判定のコツは、今日も期限も「0時」に揃えてから引き算している点です。こうしないと、時刻のわずかな差で「あと0日」と「あと1日」がブレてしまいます。<code>setHours(0, 0, 0, 0)</code> で時刻部分をリセットしているのが、地味ですが大事なポイントです。</p>



<h2 class="wp-block-heading"><span id="toc4">Google Chatに通知する設定</span></h2>



<p class="wp-block-paragraph">検出したアラートを Google Chat に飛ばすには、Webhook（ウェブフック）という仕組みを使います。Webhook とは、特定の URL に文章を送ると、その内容が自動でチャットに投稿される仕組みのことです。</p>



<h3 class="wp-block-heading"><span id="toc5">Webhook URLを取得する</span></h3>



<p class="wp-block-paragraph">通知を受け取りたい Google Chat のスペースを開きます。スペース名をクリックして「アプリと統合」を選び、「Webhook を管理」から新しい Webhook を追加します。名前（例：タスクアラート）を付けて保存すると、URL が発行されます。</p>



<p class="wp-block-paragraph">この URL は外部に漏れると誰でも投稿できてしまうので、扱いには注意してください。</p>



<h3 class="wp-block-heading"><span id="toc6">通知用の関数を追加する</span></h3>



<p class="wp-block-paragraph">取得した URL を使って、先ほどのコードに次の関数を追加します。</p>



<pre class="wp-block-code"><code>function sendChatNotification(message) {
  // 発行したWebhook URLに置き換える
  const webhookUrl = 'https://chat.googleapis.com/v1/spaces/XXXX/messages?key=...';

  const payload = { text: message };

  const options = {
    method: 'post',
    contentType: 'application/json',
    payload: JSON.stringify(payload),
    muteHttpExceptions: true
  };

  const response = UrlFetchApp.fetch(webhookUrl, options);
  Logger.log('Chat送信結果: ' + response.getResponseCode());
}</code></pre>



<p class="wp-block-paragraph"><code>webhookUrl</code> の部分を、先ほど発行した URL に書き換えてください。これで <code>checkDeadlineAndAlert</code> が実行されると、対象タスクがチャットにまとめて投稿されます。</p>



<h3 class="wp-block-heading"><span id="toc7">メールで受け取りたい場合</span></h3>



<p class="wp-block-paragraph">Google Chat を使っていない場合は、Gmail への通知に切り替えられます。次の関数を追加し、メインコードのコメントアウトを切り替えてください。</p>



<pre class="wp-block-code"><code>function sendMailNotification(message) {
  const to = Session.getActiveUser().getEmail(); // 自分宛て
  const subject = '【タスクアラート】対応が必要なタスクがあります';

  GmailApp.sendEmail(to, subject, message);
  Logger.log('メールを送信しました: ' + to);
}</code></pre>



<p class="wp-block-paragraph">メインコードの <code>sendChatNotification(message);</code> をコメントアウトし、<code>sendMailNotification(message);</code> のコメントを外せば、メール通知に切り替わります。両方を有効にして、チャットとメールの両方に送ることもできます。</p>



<h2 class="wp-block-heading"><span id="toc8">毎朝自動で実行する（時間主導トリガー）</span></h2>



<p class="wp-block-paragraph">ここまでで、手動で実行すれば通知が飛ぶ状態になりました。最後に「毎朝決まった時刻に勝手に動く」ように設定します。これに使うのが時間主導トリガーです。</p>



<p class="wp-block-paragraph">トリガーとは、「決まった条件になったら自動でこの関数を動かす」という予約設定のことです。Apps Script エディタの左メニューにある時計のアイコン（トリガー）をクリックします。</p>



<p class="wp-block-paragraph">右下の「トリガーを追加」を押し、次のように設定してください。</p>



<ol class="wp-block-list"><li>実行する関数：<code>checkDeadlineAndAlert</code> を選ぶ</li><li>イベントのソース：「時間主導型」を選ぶ</li><li>時間ベースのトリガーのタイプ：「日付ベースのタイマー」を選ぶ</li><li>時刻：「午前8時〜9時」など、出社前後の時間帯を選ぶ</li></ol>



<p class="wp-block-paragraph">保存すれば完了です。これで毎朝、その時間帯に自動でシートがチェックされ、対応が必要なタスクだけが通知されるようになります。</p>



<p class="wp-block-paragraph">トリガーの種類や、フォーム送信を起点に動かす方法など、もっと詳しい使い分けは<a href="https://mashukabu.com/gas-trigger-automation/">GASのトリガーで集計・通知を自動化する方法</a>で解説しています。あわせて読むと、自動化の幅が一気に広がります。</p>



<h2 class="wp-block-heading"><span id="toc9">重複通知を防ぐ仕組みと注意点</span></h2>



<p class="wp-block-paragraph">今回のコードでは、通知した行の E 列に「通知済」と書き込むことで、翌日以降に同じタスクを何度も通知しないようにしています。</p>



<p class="wp-block-paragraph">ただし、運用していると「一度通知したけれど、まだ対応していないタスクをもう一度知らせてほしい」という場面も出てきます。そのときは、考え方を切り替えて使い分けてください。</p>



<ul class="wp-block-list"><li>1回だけ知らせれば十分なら：今回のコードのまま使う（通知済フラグで重複防止）</li><li>対応するまで毎日しつこく知らせたいなら：<code>if (notified === '通知済') continue;</code> の行を削除する</li></ul>



<p class="wp-block-paragraph">毎日通知する運用にする場合は、フラグ書き込みの処理も不要になるので、合わせて外しておくと動作がすっきりします。</p>



<p class="wp-block-paragraph">そのほか、運用前に確認しておきたい点をまとめます。</p>



<ul class="wp-block-list"><li>期限のセルは必ず日付形式にする。文字列だと <code>deadline instanceof Date</code> の判定で弾かれ、通知されません</li><li>シート名・列の順番を変えた場合は、コード上部の設定や列番号も合わせて直す</li><li>Webhook URL やメールアドレスは外部に共有しない（不正利用を防ぐため）</li><li>初回実行時は GAS の承認画面が出るので、内容を確認して許可する</li></ul>



<h2 class="wp-block-heading"><span id="toc10">まとめ</span></h2>



<p class="wp-block-paragraph">スプレッドシートの一覧から「期限が近い行」「未対応で放置された行」を自動検出し、Google Chat やメールに毎朝通知する仕組みを作りました。</p>



<p class="wp-block-paragraph">ポイントを振り返ります。</p>



<ul class="wp-block-list"><li>行を上から順にチェックし、期限と今日の差を「日数」で判定する</li><li>Webhook を使えば Google Chat に、<code>GmailApp</code> を使えばメールに通知できる</li><li>時間主導トリガーで毎朝自動実行できる</li><li>通知済みフラグで、同じタスクの重複通知を防げる</li></ul>



<p class="wp-block-paragraph">一度作ってしまえば、あとはシートを更新するだけで対応漏れを自動で拾ってくれます。タスク管理だけでなく、案件の進捗や入金チェックなど、期限つきで状態を管理する一覧ならそのまま応用できます。フォームと連携した自動化に興味があれば、<a href="https://mashukabu.com/gas-form-reservation-google-calendar/">GASでフォーム予約をGoogleカレンダーに自動登録する方法</a>もあわせてどうぞ。まずは自分のシートに合わせてコードを書き換え、手動実行で動きを確かめてから、トリガーで自動化してみてください。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/gas-deadline-reminder-alert/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
