<?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/%e8%87%aa%e5%8b%95%e5%8c%96/feed/" rel="self" type="application/rss+xml" />
	<link>https://mashukabu.com</link>
	<description></description>
	<lastBuildDate>Fri, 12 Jun 2026 22:00:08 +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>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-1" checked><label class="toc-title" for="toc-checkbox-1">目次</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>Googleフォーム×GASで回答を自動通知・集計する方法｜コピペで動く3レシピ</title>
		<link>https://mashukabu.com/google-form-gas-auto-aggregate/</link>
					<comments>https://mashukabu.com/google-form-gas-auto-aggregate/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Fri, 12 Jun 2026 21:59:52 +0000</pubDate>
				<category><![CDATA[Googleスプレッドシート]]></category>
		<category><![CDATA[GAS]]></category>
		<category><![CDATA[Googleフォーム]]></category>
		<category><![CDATA[Webhook]]></category>
		<category><![CDATA[自動化]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=8001</guid>

					<description><![CDATA[Googleフォームの回答をGASで自動通知・自動集計する方法を、コピペで動く3レシピで解説します。Slack通知・Gmail通知・カテゴリ別集計シート更新まで、フォーム送信時トリガーの設定方法と暴走対策もまとめて紹介します。]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading">Googleフォーム×GASで回答を自動通知・集計する方法｜コピペで動く3レシピ</h1>



<p class="wp-block-paragraph">「フォームに回答が来ても、誰も気づかない」「定例会議の前に毎回スプレッドシートを集計し直すのが地味に面倒」——Googleフォームを業務で使い始めると、ほとんどの人が一度はぶつかる悩みです。</p>



<p class="wp-block-paragraph">この記事では、<strong>Googleフォームの回答をスプレッドシートとGAS（Google Apps Script）で連携させて、Gmail通知・Slack通知・集計シート自動更新の3つを「コピペで動く形」で実装する方法</strong>を解説します。GASは入門レベル前提で、1本ずつ動かしながら読めるよう構成しました。</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">なお、<strong>LINE Notifyは2025年3月末でサービス終了</strong>しているため、本記事では現行で誰でも使える「Slack Incoming Webhook」と「Gmail」を通知手段として採用しています。古い記事のコードでつまずいた経験がある方も、ここから読み直せば動くところまで戻れます。</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><li><a href="#toc1" tabindex="0">GoogleフォームとGASを連携してできること</a><ol><li><a href="#toc2" tabindex="0">自動通知（Slack・Gmail・チャット）</a></li><li><a href="#toc3" tabindex="0">自動集計（別シートでのカテゴリ別カウント）</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">拡張機能 → Apps Script を開く</a></li></ol></li><li><a href="#toc8" tabindex="0">レシピ1｜回答が来たらGmailに自動通知する（GAS）</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｜回答が来たらSlackに自動通知する（GAS Webhook）</a><ol><li><a href="#toc13" tabindex="0">事前準備：Slack Incoming Webhook URLを取得</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">関数（COUNTIF）と組み合わせる場合との使い分け</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">トリガー暴走を防ぐ3つの基本ルール</a></li></ol></li><li><a href="#toc23" tabindex="0">スクリプトプロパティでWebhook URLを安全に管理する</a><ol><li><a href="#toc24" tabindex="0">スクリプトプロパティとは</a></li><li><a href="#toc25" tabindex="0">設定方法とコードからの呼び出し方</a></li></ol></li><li><a href="#toc26" tabindex="0">GoogleフォームとGAS連携でよくあるエラーと対処法</a><ol><li><a href="#toc27" tabindex="0">エラー1: 「TypeError: Cannot read properties of undefined」</a></li><li><a href="#toc28" tabindex="0">エラー2: 「Exception: Service Spreadsheets failed while accessing document」</a></li><li><a href="#toc29" tabindex="0">エラー3: 「Exception: Request failed for hooks.slack.com returned code 404」</a></li><li><a href="#toc30" tabindex="0">エラー4: 通知が同じ内容で2回・3回飛ぶ</a></li><li><a href="#toc31" tabindex="0">エラー5: 「このアプリは確認されていません」が消えない</a></li></ol></li><li><a href="#toc32" tabindex="0">まとめ｜Googleフォーム×GASで通知と集計を一気に自動化する</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">GoogleフォームとGASを連携してできること</span></h2>



<p class="wp-block-paragraph">Googleフォームは標準でも「回答をスプレッドシートに集める」機能を持っていますが、それだけだと「シートに溜まる」止まりで、能動的に何かが起きるわけではありません。GASを噛ませることで、はじめて以下のような自動化が可能になります。</p>



<h3 class="wp-block-heading"><span id="toc2">自動通知（Slack・Gmail・チャット）</span></h3>



<p class="wp-block-paragraph">回答が送信された瞬間に、指定の宛先へ通知を飛ばせます。本記事で扱うのはGmailとSlackですが、同じ仕組みでDiscordやMicrosoft Teamsにも応用できます（DiscordはWebhookの仕様がSlackとほぼ同じ）。</p>



<ul class="wp-block-list"><li>問い合わせフォーム → 担当者にGmail通知</li><li>申込フォーム → 営業チームのSlackチャンネルに通知</li><li>イベント参加登録 → 運営チャンネルに通知</li></ul>



<p class="wp-block-paragraph">「気づかない」を解消するだけで、対応スピードが半日単位で改善することも珍しくありません。</p>



<h3 class="wp-block-heading"><span id="toc3">自動集計（別シートでのカテゴリ別カウント）</span></h3>



<p class="wp-block-paragraph">回答が来るたびに、<strong>別シートに置いた集計表のカウントを1ずつ加算する</strong>処理を自動化できます。会議前の手動集計から解放され、いつ見ても最新の数字が乗っている状態を作れます。</p>



<p class="wp-block-paragraph">スプレッドシート関数のCOUNTIFでも同じことはできますが、GASを使う利点は「集計時に他の処理（通知・条件分岐）を一緒にやれる」点です。レシピ3で詳しく扱います。</p>



<h3 class="wp-block-heading"><span id="toc4">関連処理の自動化（タスク登録・差し込み返信）</span></h3>



<p class="wp-block-paragraph">応用範囲はもっと広く、たとえば以下のような連携もGASなら実装できます。</p>



<ul class="wp-block-list"><li>回答内容に応じて自動返信メールを送る（フォーム標準の返信機能より柔軟）</li><li>特定キーワードを含む回答だけを別シートに転記する</li><li>Googleカレンダーに予定を自動登録する</li></ul>



<p class="wp-block-paragraph">本記事では3つの基本レシピに絞りますが、土台が同じなので、ここで紹介するレシピさえ動けば応用は難しくありません。</p>



<h2 class="wp-block-heading"><span id="toc5">連携の前提｜フォーム回答スプレッドシートを準備する</span></h2>



<p class="wp-block-paragraph">GASでフォーム連携を始める前に、<strong>「回答先のスプレッドシート」</strong>を準備しておきます。Googleフォーム単体ではなく、フォームの回答が流れ込むスプレッドシートが起点になる点が重要です。</p>



<h3 class="wp-block-heading"><span id="toc6">フォーム回答先のスプレッドシートを開く</span></h3>



<ol class="wp-block-list"><li>Googleフォームの編集画面を開く</li><li>上部タブ「回答」をクリック</li><li>右側の緑色の「スプレッドシートにリンク」アイコンをクリック</li><li>「新しいスプレッドシートを作成」または「既存のスプレッドシートを選択」</li></ol>



<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>2026/05/09 10:23:11</td><td>田中</td><td>質問</td><td>営業時間を教えてください</td></tr><tr><td>2026/05/09 10:45:02</td><td>佐藤</td><td>申込</td><td>サービスAを申し込みたい</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">1行目がヘッダー（質問のテキスト）、2行目以降が回答です。GASからは<strong>この「質問テキスト」をキーに回答内容を取り出します</strong>。後でコードを書くときに重要になるので、質問のテキストはあらかじめ確定させておくと安全です。</p>



<h3 class="wp-block-heading"><span id="toc7">拡張機能 → Apps Script を開く</span></h3>



<p class="wp-block-paragraph">回答先スプレッドシートを開いた状態で、メニューから次の手順でスクリプトエディタを開きます。</p>



<ol class="wp-block-list"><li>スプレッドシート上部メニュー「拡張機能」をクリック</li><li>「Apps Script」を選択</li><li>別タブでエディタが開く</li></ol>



<p class="wp-block-paragraph">ここから先は基本的に1本目記事の延長です。エディタの基本操作（保存・実行・ログ表示）に不安がある方は、こちらを先に押さえておきましょう。</p>



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



<h2 class="wp-block-heading"><span id="toc8">レシピ1｜回答が来たらGmailに自動通知する（GAS）</span></h2>



<p class="wp-block-paragraph">最も簡単で、追加の設定が要らないレシピです。GmailApp はGASにビルトインされている上に、外部のWebhook URLを取得する手間もありません。<strong>まずはこのレシピで「フォーム送信トリガーが発火する感覚」を掴んでから、レシピ2に進む</strong>のがおすすめです。</p>



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



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



<pre class="wp-block-code"><code>// --- レシピ1: フォーム回答をGmailで通知 ---
function onFormSubmitGmail(e) {
  try {
    // --- 通知先メールアドレス（自分のアドレスに書き換える） ---
    const toAddress = 'your-address@example.com';

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

    // --- 件名と本文を組み立て ---
    const subject = '[フォーム] 新しい回答が届きました';
    const body = Object.entries(namedValues)
      .map(function(entry) {
        return entry[0] + ': ' + entry[1].join(', ');
      })
      .join('n');

    // --- メール送信 ---
    GmailApp.sendEmail(toAddress, subject, body);
  } catch (err) {
    // --- エラー時もトリガーを止めない（暴走対策） ---
    console.log('Gmail通知エラー: ' + err.message);
  }
}</code></pre>



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



<ul class="wp-block-list"><li><strong><code>e.namedValues</code></strong>: フォーム送信時のイベントオブジェクト <code>e</code> が持っているプロパティで、<strong>質問テキストをキー、回答を配列の形で持つオブジェクト</strong>です。<code>e.values</code> と違って列順に依存しないため、質問の追加・並び替えに強くなります</li><li><strong><code>Object.entries(...).map(...)</code></strong>: 全ての質問と回答を「質問: 回答」の形に整形し、改行で連結します</li><li><strong><code>entry[1].join(', ')</code></strong>: 回答が配列形式（チェックボックス複数選択など）の場合に備えて、カンマ区切りで結合しています</li><li><strong><code>try/catch</code></strong>: トリガー実行中にエラーが出ても、Googleからのエラー通知メールが暴走しないようにする最低限のガードです（後述）</li></ul>



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



<p class="wp-block-paragraph">コードを貼り付けて保存しただけでは、まだフォーム送信時に動きません。<strong>トリガーの設定</strong>が別途必要です。</p>



<ol class="wp-block-list"><li>スクリプトエディタ左メニューの <strong>時計アイコン（トリガー）</strong> をクリック</li><li>右下の「<strong>トリガーを追加</strong>」をクリック</li><li>以下のように設定:</li></ol>



<ul class="wp-block-list"><li>実行する関数: <code>onFormSubmitGmail</code></li><li>実行するデプロイ: <code>Head</code></li><li>イベントのソース: <code>スプレッドシートから</code></li><li>イベントの種類: <code>フォーム送信時</code></li></ul>



<ol class="wp-block-list"><li>「保存」をクリック</li><li>初回のみ承認画面が表示されるので、自分のGoogleアカウントで承認</li></ol>



<p class="wp-block-paragraph">承認画面で「このアプリは確認されていません」が出るのは、自作スクリプトでは正常な挙動です。「詳細」→「（プロジェクト名）に移動（安全ではないページ）」をクリックして進めます。</p>



<p class="wp-block-paragraph">設定後、テスト用に1件フォームを送信して、メールが届けば成功です。</p>



<h2 class="wp-block-heading"><span id="toc12">レシピ2｜回答が来たらSlackに自動通知する（GAS Webhook）</span></h2>



<p class="wp-block-paragraph">チームでフォームを運用しているなら、Gmailよりも<strong>Slackチャンネルへの通知のほうが見落としが減ります</strong>。Slack Incoming Webhookを使えば、外部APIキーやアプリ承認の手間なく、チャンネル単位で通知を飛ばせます。</p>



<h3 class="wp-block-heading"><span id="toc13">事前準備：Slack Incoming Webhook URLを取得</span></h3>



<p class="wp-block-paragraph">Slack側で以下の手順でWebhook URLを発行します（管理者権限が必要な場合があります）。</p>



<ol class="wp-block-list"><li>Slack ワークスペースで「Apps」→「アプリを管理」→「Incoming Webhooks」を検索</li><li>「Slackに追加」をクリック</li><li>通知先のチャンネルを選択</li><li><strong>「Webhook URL」をコピーして安全な場所にメモ</strong>（後で使います）</li></ol>



<p class="wp-block-paragraph">Webhook URLは <code>https://hooks.slack.com/services/T.../B.../...</code> のような形式です。<strong>このURLが漏れると誰でもそのチャンネルに投稿できてしまうため、絶対にコードに直書きしないでください</strong>。次のH2で扱う「スクリプトプロパティ」で管理します。</p>



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



<pre class="wp-block-code"><code>// --- レシピ2: フォーム回答をSlackで通知 ---
function onFormSubmitSlack(e) {
  try {
    // --- スクリプトプロパティから Webhook URL を取得 ---
    const webhookUrl = PropertiesService
      .getScriptProperties()
      .getProperty('SLACK_WEBHOOK_URL');

    if (!webhookUrl) {
      throw new Error('SLACK_WEBHOOK_URL が未設定です');
    }

    // --- 質問と回答を箇条書き形式に整形 ---
    const lines = Object.entries(e.namedValues)
      .map(function(entry) {
        return '• ' + entry[0] + ': ' + entry[1].join(', ');
      })
      .join('n');

    // --- Slack に送信するペイロード ---
    const payload = {
      text: '*新しい回答が届きました*n' + lines
    };

    // --- HTTP POST で Webhook に送信 ---
    UrlFetchApp.fetch(webhookUrl, {
      method: 'post',
      contentType: 'application/json',
      payload: JSON.stringify(payload),
      muteHttpExceptions: true
    });
  } catch (err) {
    console.log('Slack通知エラー: ' + err.message);
  }
}</code></pre>



<p class="wp-block-paragraph">このコードをそのまま実行する前に、<strong>スクリプトプロパティに <code>SLACK_WEBHOOK_URL</code> を登録</strong>しておく必要があります。手順は次のH2「スクリプトプロパティでWebhook URLを安全に管理する」で詳しく説明します。先にスクリプトプロパティを設定してから、レシピ1と同じ手順でフォーム送信時トリガーを <code>onFormSubmitSlack</code> に対して設定してください。</p>



<h3 class="wp-block-heading"><span id="toc15">通知メッセージのカスタマイズ例</span></h3>



<p class="wp-block-paragraph">Slack通知は <code>text</code> だけでも機能しますが、強調や絵文字を入れて見やすくすることもできます。以下のように <code>payload</code> を組み替えるだけです。</p>



<pre class="wp-block-code"><code>// --- 強調と絵文字入りメッセージ ---
const payload = {
  text: ':bell: *新しい回答が届きました*',
  attachments: [
    {
      color: '#36a64f',
      text: lines
    }
  ]
};</code></pre>



<p class="wp-block-paragraph"><code>attachments</code> を使うと、左側に色付きの縦線が付いて視認性が上がります。最初は <code>text</code> のみで動かして、慣れてからカスタマイズに進むのがおすすめです。</p>



<h2 class="wp-block-heading"><span id="toc16">レシピ3｜カテゴリ別の回答件数を集計シートに自動更新する</span></h2>



<p class="wp-block-paragraph">通知に加えて、<strong>回答数のリアルタイム集計</strong>まで自動化するレシピです。「会議前にピボットを作り直す」「先週の問い合わせ件数を手動で数える」といった作業が消えます。</p>



<h3 class="wp-block-heading"><span id="toc17">集計シートの準備</span></h3>



<p class="wp-block-paragraph">回答先スプレッドシートに、<code>集計</code> という名前の新しいシートを作成しておきます（コードで自動作成もできますが、最初は手動で作っておくと挙動が見えやすいです）。</p>



<figure class="wp-block-table"><table><thead><tr><th>A列</th><th>B列</th></tr></thead><tbody><tr><td>カテゴリ</td><td>件数</td></tr><tr><td>質問</td><td>0</td></tr><tr><td>申込</td><td>0</td></tr><tr><td>苦情</td><td>0</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">1行目はヘッダー、2行目以降にカテゴリ名と初期件数（0）を入れておきます。フォームの「カテゴリ」質問で選ばれる選択肢と一致させてください。</p>



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



<pre class="wp-block-code"><code>// --- レシピ3: カテゴリ別件数を集計シートで自動カウント ---
function onFormSubmitAggregate(e) {
  try {
    const ss = SpreadsheetApp.getActiveSpreadsheet();
    const sheet = ss.getSheetByName('集計');
    if (!sheet) {
      throw new Error('「集計」シートが見つかりません');
    }

    // --- 回答からカテゴリを取り出す（質問名は実際のフォームに合わせる） ---
    const category = e.namedValues['カテゴリ']
      ? e.namedValues['カテゴリ'][0]
      : '未分類';

    // --- 集計シート全体の値を取得 ---
    const data = sheet.getDataRange().getValues();
    let updated = false;

    // --- 既存カテゴリ行のカウントを+1 ---
    for (let i = 1; i &lt; data.length; i++) {
      if (data[i][0] === category) {
        sheet.getRange(i + 1, 2).setValue(data[i][1] + 1);
        updated = true;
        break;
      }
    }

    // --- カテゴリ行が無ければ最終行に追記 ---
    if (!updated) {
      sheet.appendRow([category, 1]);
    }
  } catch (err) {
    console.log('集計エラー: ' + err.message);
  }
}</code></pre>



<p class="wp-block-paragraph">このコードもレシピ1・2と同じく、<strong>フォーム送信時トリガーを <code>onFormSubmitAggregate</code> に対して設定</strong>することで自動発火します。</p>



<p class="wp-block-paragraph">ポイント:</p>



<ul class="wp-block-list"><li><strong><code>e.namedValues['カテゴリ']</code></strong> の <code>'カテゴリ'</code> 部分は、<strong>フォームの質問テキストと完全一致</strong>している必要があります。質問名を変更したらコードも合わせて変更します</li><li>想定外のカテゴリ（自由記述や新しい選択肢）が来ても、<code>appendRow</code> で末尾に追加されるので集計から漏れません</li><li><code>getDataRange().getValues()</code> でシート全体を一度に読むため、件数が多くてもAPI呼び出しは1回で済みます</li></ul>



<h3 class="wp-block-heading"><span id="toc19">関数（COUNTIF）と組み合わせる場合との使い分け</span></h3>



<p class="wp-block-paragraph">「これ、わざわざGASで書かなくてもCOUNTIFでよくない？」という疑問は当然出ます。実際、<strong>単純な件数集計だけならCOUNTIF関数のほうが圧倒的に楽</strong>です。GAS実装が活きるのは以下のようなケースです。</p>



<figure class="wp-block-table"><table><thead><tr><th>やりたいこと</th><th>おすすめ手段</th></tr></thead><tbody><tr><td>単純なカテゴリ別件数</td><td>COUNTIF関数</td></tr><tr><td>件数 + Slack通知を同時に</td><td>GAS（レシピ2と統合）</td></tr><tr><td>条件によって書き込み先シートを分ける</td><td>GAS</td></tr><tr><td>件数が一定数を超えたらアラート</td><td>GAS</td></tr><tr><td>関数でセルを汚したくない（参照崩れリスク回避）</td><td>GAS</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">ロジックが分岐する瞬間にGASの真価が出ます。逆に、純粋に件数だけ見たいなら、まずCOUNTIFで作ってからGASに育てる流れでも遅くありません。</p>



<h2 class="wp-block-heading"><span id="toc20">フォーム送信時トリガーの設定方法と注意点</span></h2>



<p class="wp-block-paragraph">3つのレシピで何度か出てきた「フォーム送信時トリガー」を、ここで一度まとめて整理します。<strong>トリガーの設定ミスや重複登録は、GAS自動化で最もハマりやすい落とし穴</strong>です。</p>



<h3 class="wp-block-heading"><span id="toc21">トリガーの設定手順</span></h3>



<ol class="wp-block-list"><li>スクリプトエディタ左メニューの<strong>時計アイコン</strong>をクリック</li><li>右下「<strong>トリガーを追加</strong>」</li><li>設定項目:</li></ol>



<ul class="wp-block-list"><li><strong>実行する関数</strong>: 動かしたい関数名（例: <code>onFormSubmitGmail</code>）</li><li><strong>実行するデプロイ</strong>: <code>Head</code></li><li><strong>イベントのソース</strong>: <code>スプレッドシートから</code></li><li><strong>イベントの種類</strong>: <code>フォーム送信時</code></li><li>失敗通知設定: <code>毎日通知を受け取る</code>（デフォルト推奨）</li></ul>



<ol class="wp-block-list"><li>「保存」→ 初回のみ承認</li></ol>



<p class="wp-block-paragraph">設定後、トリガー一覧画面に戻り、<strong>狙った関数のトリガーが1つだけ並んでいることを確認</strong>してください。</p>



<h3 class="wp-block-heading"><span id="toc22">トリガー暴走を防ぐ3つの基本ルール</span></h3>



<p class="wp-block-paragraph">GAS連携で最もやってはいけないのが「トリガー暴走」です。設定ミス1つで、フォーム1回の送信で何通も通知が飛んだり、エラー通知メールで受信箱が埋まったりします。以下の3つのルールを守れば、大半のトラブルは避けられます。</p>



<h4 class="wp-block-heading">ルール1: 1関数につきトリガーは1つだけ</h4>



<p class="wp-block-paragraph">開発中に「動かない」と思って何度もトリガーを追加してしまい、気づくと同じ関数のトリガーが3つ並んでいる——あるあるです。1回の送信で同じ通知が3回飛びます。</p>



<p class="wp-block-paragraph">対策: コードを修正したときは、トリガー一覧画面で<strong>古いトリガーが残っていないか</strong>を必ず確認してください。重複していたら、不要な行の右側「⋮」→「トリガーを削除」で消します。</p>



<h4 class="wp-block-heading">ルール2: 関数の冒頭で必ず try/catch</h4>



<p class="wp-block-paragraph">GASのトリガーは、関数内でエラーが出ると「実行失敗通知メール」をGoogleが自動送信します。さらに悪いことに、フォーム送信が連続するとこの通知メールも連続で届き、受信箱が埋まります。</p>



<pre class="wp-block-code"><code>function onFormSubmitGmail(e) {
  try {
    // --- 本来の処理 ---
  } catch (err) {
    console.log('エラー: ' + err.message);
  }
}</code></pre>



<p class="wp-block-paragraph">このように <strong><code>try/catch</code> で全体を包み、エラーは <code>console.log</code> で記録するだけにしておく</strong>と、トリガーは正常終了扱いになり、暴走通知が止まります。</p>



<h4 class="wp-block-heading">ルール3: トリガーから別のトリガーを呼び出さない</h4>



<p class="wp-block-paragraph">たとえば「フォーム送信時トリガー」内でセルに値を書き込み、それが別の <code>onEdit</code> トリガーを発火させて……という連鎖は、簡単に無限ループに発展します。</p>



<p class="wp-block-paragraph">対策: トリガーから呼ばれる関数では、<strong>意図しない <code>onEdit</code> 系トリガーが別途設定されていないか</strong>を必ず確認してください。1つのスプレッドシートで複数の自動化を組む場合は、トリガー間の依存関係を紙に書き出してから実装するのがおすすめです。</p>



<h2 class="wp-block-heading"><span id="toc23">スクリプトプロパティでWebhook URLを安全に管理する</span></h2>



<p class="wp-block-paragraph">レシピ2のSlack通知で前提となっていた「スクリプトプロパティ」を、ここで詳しく扱います。<strong>Webhook URLやAPIキーをコードに直書きするのは絶対NG</strong>で、その代替手段がスクリプトプロパティです。</p>



<h3 class="wp-block-heading"><span id="toc24">スクリプトプロパティとは</span></h3>



<p class="wp-block-paragraph">スクリプトプロパティは、GASプロジェクトに紐づいた<strong>キーバリュー型の設定保管庫</strong>です。コードの外側に値を置けるため、以下のメリットがあります。</p>



<ul class="wp-block-list"><li>コードをGitHubや社内Wikiに公開しても、Webhook URLが漏れない</li><li>環境ごと（本番・テスト）に値を切り替えやすい</li><li>スクリプト実行時に <code>PropertiesService</code> 経由で取り出せる</li></ul>



<p class="wp-block-paragraph">スプレッドシートのセルとは別物なので、<strong>通常の操作では値が見えない</strong>点も安全性に寄与しています。</p>



<h3 class="wp-block-heading"><span id="toc25">設定方法とコードからの呼び出し方</span></h3>



<p class="wp-block-paragraph">設定はスクリプトエディタの設定画面から行います。</p>



<ol class="wp-block-list"><li>スクリプトエディタ左メニューの<strong>歯車アイコン（プロジェクトの設定）</strong>をクリック</li><li>下にスクロールして「<strong>スクリプト プロパティ</strong>」セクションへ</li><li>「スクリプト プロパティを追加」をクリック</li><li>以下のように入力:</li></ol>



<ul class="wp-block-list"><li>プロパティ: <code>SLACK_WEBHOOK_URL</code></li><li>値: <code>https://hooks.slack.com/services/...</code>（コピーしたWebhook URL）</li></ul>



<ol class="wp-block-list"><li>「スクリプト プロパティを保存」</li></ol>



<p class="wp-block-paragraph">コードからは <code>PropertiesService.getScriptProperties().getProperty('キー名')</code> で取り出します。レシピ2のサンプルでは以下の3行で読み出していました。</p>



<pre class="wp-block-code"><code>const webhookUrl = PropertiesService
  .getScriptProperties()
  .getProperty('SLACK_WEBHOOK_URL');</code></pre>



<p class="wp-block-paragraph">複数の値（例: <code>GMAIL_TO</code>, <code>DISCORD_WEBHOOK_URL</code>）を扱う場合も、全て同じスクリプトプロパティに登録して、関数ごとに必要なキーを取り出すのが定石です。</p>



<h2 class="wp-block-heading"><span id="toc26">GoogleフォームとGAS連携でよくあるエラーと対処法</span></h2>



<p class="wp-block-paragraph">実装中に高確率で出るエラーを、上から順に潰せる形でまとめます。</p>



<h3 class="wp-block-heading"><span id="toc27">エラー1: 「TypeError: Cannot read properties of undefined」</span></h3>



<p class="wp-block-paragraph"><strong>原因</strong>: <code>e.namedValues['カテゴリ']</code> のように指定した質問名が、フォームの実際の質問テキストと一致していない。質問名にスペースが含まれていたり、絵文字が入っていたりすると詰みやすいです。</p>



<p class="wp-block-paragraph"><strong>対処</strong>: スクリプトエディタで以下のコードを単発実行し、実際の <code>namedValues</code> のキー一覧を確認してください。</p>



<pre class="wp-block-code"><code>function debugCheckKeys() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
  console.log(headers);
}</code></pre>



<p class="wp-block-paragraph">ログに表示された通りの文字列を、コードの <code>e.namedValues['...']</code> に貼り付け直します。</p>



<h3 class="wp-block-heading"><span id="toc28">エラー2: 「Exception: Service Spreadsheets failed while accessing document」</span></h3>



<p class="wp-block-paragraph"><strong>原因</strong>: スプレッドシートのアクセス権限が不足している、または承認画面で適切に許可されていない。</p>



<p class="wp-block-paragraph"><strong>対処</strong>: トリガーを一度削除して、関数を手動実行（再生ボタン）して承認をやり直します。承認画面で「詳細」→「安全ではないページに移動」→「許可」の手順を踏んでください。</p>



<h3 class="wp-block-heading"><span id="toc29">エラー3: 「Exception: Request failed for hooks.slack.com returned code 404」</span></h3>



<p class="wp-block-paragraph"><strong>原因</strong>: Slack Webhook URLが無効、または削除済み。</p>



<p class="wp-block-paragraph"><strong>対処</strong>: Slack側でWebhookを再発行し、新しいURLでスクリプトプロパティを更新してください。<code>muteHttpExceptions: true</code> を付けていると例外は出ませんが、ログには記録されているので <code>console.log</code> で確認できます。</p>



<h3 class="wp-block-heading"><span id="toc30">エラー4: 通知が同じ内容で2回・3回飛ぶ</span></h3>



<p class="wp-block-paragraph"><strong>原因</strong>: トリガーが重複登録されている。</p>



<p class="wp-block-paragraph"><strong>対処</strong>: 時計アイコンからトリガー一覧を開き、同じ関数のトリガーが2行以上ある場合は1つを残して削除します。</p>



<h3 class="wp-block-heading"><span id="toc31">エラー5: 「このアプリは確認されていません」が消えない</span></h3>



<p class="wp-block-paragraph"><strong>原因</strong>: GAS自作スクリプトの正常な挙動です。Googleの審査を通したアプリではないため、毎回承認のたびにこの画面が出ます。</p>



<p class="wp-block-paragraph"><strong>対処</strong>: 「詳細」→「（プロジェクト名）に移動（安全ではないページ）」をクリックして進めてください。<strong>自分で書いたスクリプト以外には、絶対にこの操作をしないでください</strong>。</p>



<h2 class="wp-block-heading"><span id="toc32">まとめ｜Googleフォーム×GASで通知と集計を一気に自動化する</span></h2>



<p class="wp-block-paragraph">ここまで、Googleフォームの回答をGASで連携させる3つのレシピを見てきました。最後にポイントを整理します。</p>



<ul class="wp-block-list"><li><strong>レシピ1（Gmail通知）</strong>: 追加設定なしで動く。最初の動作確認に最適</li><li><strong>レシピ2（Slack通知）</strong>: チームでの共有に強い。Webhook URLは必ずスクリプトプロパティ管理</li><li><strong>レシピ3（集計シート自動更新）</strong>: COUNTIFでは届かない、条件分岐や通知連動の場面で威力を発揮</li><li><strong>トリガー設定</strong>: 「フォーム送信時」を選ぶ。重複登録に注意し、必ず <code>try/catch</code> で囲む</li><li><strong>LINE Notifyは2025年3月末で終了</strong>しているため、本記事では非掲載。代替はSlack + Gmailで十分</li></ul>



<p class="wp-block-paragraph">GASの基本操作（保存・実行・ログ）に不安がある場合は、シリーズ1本目の入門記事で体得しておくと、本記事のコードがより理解しやすくなります。</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">次のステップとしては、<strong>フォームに連動した自動返信メール</strong>や、<strong>回答内容に応じた条件分岐通知</strong>にチャレンジするのがおすすめです。本記事のコードはどれも <code>try/catch</code> と <code>e.namedValues</code> という共通の土台に乗っているので、追加機能は同じ構造の中に書き足していけます。</p>



<p class="wp-block-paragraph">「気づかない」「集計が手間」がなくなるだけで、Googleフォームの活用範囲は劇的に広がります。まずはレシピ1から、自分の手元のスプレッドシートで動かしてみてください。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/google-form-gas-auto-aggregate/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-3" checked><label class="toc-title" for="toc-checkbox-3">目次</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>Power QueryでWebの表データを自動取得する方法</title>
		<link>https://mashukabu.com/power-query-web-data/</link>
					<comments>https://mashukabu.com/power-query-web-data/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Fri, 12 Jun 2026 21:57:04 +0000</pubDate>
				<category><![CDATA[仕事効率化]]></category>
		<category><![CDATA[Power Query]]></category>
		<category><![CDATA[データ収集]]></category>
		<category><![CDATA[パワークエリ]]></category>
		<category><![CDATA[自動化]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=7958</guid>

					<description><![CDATA[Power Query（パワークエリ）のWebコネクタを使い、Webサイト上の表データをExcelに自動取得する手順を解説。URLの指定から取得する表の選択、整形、更新ボタンでの最新化までを画像つきで紹介。為替・株価・統計データの収集をコピペから卒業したい事務職向けのガイドです。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">「Webサイトに載っている表を、毎週Excelにコピペして集計表を更新する」。為替レート、株価、ランキング、各種の統計データ。こうした公開データを、手作業で集めていませんか？</p>



<p class="wp-block-paragraph">コピペは一見すぐ終わりそうに見えて、実は地味に時間を食います。しかもセルの書式が崩れたり、貼り付ける場所を間違えたりと、ミスの温床になりがちですよね。来週になればまた同じ作業のくり返しです。</p>



<p class="wp-block-paragraph">この「Webの表を集める作業」は、Excel標準の <strong>Power Query（パワークエリ）</strong> で丸ごと自動化できます。一度URLと取得する表を指定しておけば、あとは <strong>更新ボタン1つで最新のデータに入れ替わる</strong> ようになります。コピペも手入力も、もう必要ありません。</p>



<p class="wp-block-paragraph">この記事では、Power QueryのWebコネクタを使ってWebページの表を取り込む手順を、最初から順に解説します。URLの指定、取得する表の選び方、整形、定期更新の設定まで一通りカバーします。取得できないページの見分け方や注意点も後半でまとめているので、安心して進めてくださいね。</p>



<p class="wp-block-paragraph">なお本記事は <strong>Windows 版 Excel（2016以降）</strong> での操作を前提にしています。Mac 版 Excel ではWebからの取り込み機能が制限されているのでご注意ください。</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">Power QueryのWebデータ取得とは？</a><ol><li><a href="#toc2" tabindex="0">Webデータ取得が向いているデータ</a></li><li><a href="#toc3" tabindex="0">取り込む前に準備しておくこと</a></li></ol></li><li><a href="#toc4" tabindex="0">WebサイトのデータをExcelに取り込む手順【4ステップ】</a><ol><li><a href="#toc5" tabindex="0">ステップ1: 「Webから」を選んでURLを入力する</a></li><li><a href="#toc6" tabindex="0">ステップ2: 取得する表をプレビューで選ぶ</a></li><li><a href="#toc7" tabindex="0">ステップ3: Power Queryエディターでデータを整える</a></li><li><a href="#toc8" tabindex="0">ステップ4: シートに読み込んで完成</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">ファイルを開いたときに自動更新する</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><li><a href="#toc16" tabindex="0">取り込んだデータが文字化けする</a></li><li><a href="#toc17" tabindex="0">更新するたびに列が増減してエラーになる</a></li><li><a href="#toc18" tabindex="0">サイトの利用規約を確認しておく</a></li></ol></li><li><a href="#toc19" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">Power QueryのWebデータ取得とは？</span></h2>



<p class="wp-block-paragraph">Power QueryのWebデータ取得とは、<strong>Webページに掲載された表をURLで指定してExcelに読み込む</strong> 機能です。「Webコネクタ」や「Webクエリ」とも呼ばれます。データタブから数クリックするだけで、ページ内の表を丸ごと取り込めます。</p>



<p class="wp-block-paragraph">いちばんの魅力は、取り込んだあとの <strong>更新がボタン1つで済む</strong> ことです。Webページ側のデータが新しくなっても、Excelで「更新」を押せば最新の内容に自動で入れ替わります。毎回コピペし直す必要がありません。</p>



<p class="wp-block-paragraph">Power Queryそのものがはじめての方は、まず全体像をつかんでおくと理解がスムーズです。<a href="https://mashukabu.com/power-query-data-cleansing-basics/">Power Queryのデータ整形入門</a>や、機能の全体像をまとめた<a href="https://mashukabu.com/power-query-complete-guide/">Power Queryとは何か完全ガイド</a>も合わせて読んでみてください。</p>



<h3 class="wp-block-heading"><span id="toc2">Webデータ取得が向いているデータ</span></h3>



<p class="wp-block-paragraph">Webコネクタが得意なのは、ページ内に <strong>HTMLの「表」として配置されているデータ</strong> です。具体的には、次のようなものが取り込みやすいです。</p>



<ul class="wp-block-list"><li>為替レート・株価などの相場情報</li><li>政府や自治体が公開する統計データ</li><li>スポーツの順位表やランキング</li><li>製品スペックや料金の比較表</li><li>カレンダー形式の一覧データ</li></ul>



<p class="wp-block-paragraph">逆に、画像として埋め込まれた表や、ログインが必要なページのデータは取り込めません。この見分け方は記事の後半でくわしく説明しますね。</p>



<h3 class="wp-block-heading"><span id="toc3">取り込む前に準備しておくこと</span></h3>



<p class="wp-block-paragraph">特別なアドインのインストールは不要です。Excel 2016以降のWindows版なら最初から使えます。準備するのは、<strong>取り込みたいページのURL</strong> だけです。</p>



<p class="wp-block-paragraph">ブラウザでそのページを開き、アドレスバーのURLをコピーしておきましょう。これで準備は完了です。それでは、実際の手順に進んでいきます。</p>



<h2 class="wp-block-heading"><span id="toc4">WebサイトのデータをExcelに取り込む手順【4ステップ】</span></h2>



<p class="wp-block-paragraph">ここからは、Webページの表をExcelに取り込む流れを4つのステップで紹介します。1ステップずつ順番に進めれば、迷わず最後まで完了できますよ。</p>



<h3 class="wp-block-heading"><span id="toc5">ステップ1: 「Webから」を選んでURLを入力する</span></h3>



<p class="wp-block-paragraph">まずExcelを開き、リボンの <strong>[データ]タブ</strong> をクリックします。左側にある <strong>[データの取得と変換]</strong> グループの中から、<strong>[Webから]</strong> ボタンをクリックしてください。</p>



<p class="wp-block-paragraph">すると小さなウィンドウが開きます。「URL」という入力欄に、先ほどコピーした <strong>取り込みたいページのURL</strong> を貼り付けます。貼り付けたら <strong>[OK]ボタン</strong> をクリックしてください。</p>



<p class="wp-block-paragraph">初めて使うときは、アクセス方法を確認する画面が出ることがあります。その場合は、左側のメニューで <strong>「匿名」</strong> が選ばれていることを確認して、そのまま <strong>[接続]ボタン</strong> を押せば大丈夫です。</p>



<h3 class="wp-block-heading"><span id="toc6">ステップ2: 取得する表をプレビューで選ぶ</span></h3>



<p class="wp-block-paragraph">URLを指定すると、<strong>「ナビゲーター」</strong> という画面が開きます。これはページ内にどんな表が含まれているかを一覧で見せてくれる画面です。</p>



<p class="wp-block-paragraph">画面の左側に「Table 0」「Table 1」のような名前が並びます。これがページ内で見つかった表の候補です。名前をクリックすると、右側にその表の中身がプレビュー表示されます。</p>



<p class="wp-block-paragraph">プレビューを見ながら、<strong>自分がほしいデータが入った表</strong> を探してクリックしてください。お目当ての表が見つかったら、画面右下の <strong>[データの変換]ボタン</strong> をクリックします。</p>



<p class="wp-block-paragraph">ここで [読み込み] ボタンを押すと整形せずにそのままシートに貼り付きますが、たいていのWebデータは余分な行や不要な列が混ざっています。そのため、いったん <strong>[データの変換]</strong> を選んで整える方法をおすすめします。</p>



<h3 class="wp-block-heading"><span id="toc7">ステップ3: Power Queryエディターでデータを整える</span></h3>



<p class="wp-block-paragraph">[データの変換]を押すと、<strong>Power Queryエディター</strong> という専用の画面が開きます。ここでWebから取り込んだ表を、使いやすい形に整えていきます。</p>



<p class="wp-block-paragraph">ちょっとむずかしく見えますが、やっていることはシンプルです。「いらない列を消す」「先頭行を見出しにする」といった片付け作業をマウスで行うだけです。よく使う整形操作は次のとおりです。</p>



<ul class="wp-block-list"><li><strong>不要な列の削除</strong>: 消したい列を選び、[ホーム]タブの[列の削除]をクリック</li><li><strong>先頭行を見出しに</strong>: [ホーム]タブの[1行目をヘッダーとして使用]をクリック</li><li><strong>データ型の変換</strong>: 列名の左にあるアイコンから、数値・日付などの型を指定</li><li><strong>不要な行の削除</strong>: [行の削除]から空白行や上部の説明行を除外</li></ul>



<p class="wp-block-paragraph">整形のたびに、画面右側の <strong>[適用したステップ]</strong> に操作が記録されていきます。これが「手順」として保存される部分です。あとで更新したときも、この手順が自動で再実行されるしくみになっています。</p>



<p class="wp-block-paragraph">データ整形のもっと詳しいテクニックは、<a href="https://mashukabu.com/power-query-data-cleansing-basics/">Power Queryのデータ整形入門</a>で解説しているので参考にしてください。</p>



<h3 class="wp-block-heading"><span id="toc8">ステップ4: シートに読み込んで完成</span></h3>



<p class="wp-block-paragraph">表が整ったら、左上の <strong>[ホーム]タブ</strong> にある <strong>[閉じて読み込む]ボタン</strong> をクリックします。これでPower Queryエディターが閉じ、整形済みのデータが新しいシートにテーブルとして表示されます。</p>



<p class="wp-block-paragraph">お疲れさまでした。これでWebページの表が、Excel上のデータとして使えるようになりました。あとはこのテーブルを使って、いつものように集計表やグラフを作れます。</p>



<p class="wp-block-paragraph">しかも、ここで取り込んだデータは元のWebページとつながったままです。次の章で説明する更新機能を使えば、最新のデータにいつでも入れ替えられますよ。</p>



<h2 class="wp-block-heading"><span id="toc9">データを最新に更新する・自動化する方法</span></h2>



<p class="wp-block-paragraph">Webデータ取り込みの真価は、ここからの <strong>更新</strong> にあります。一度作っておけば、コピペのやり直しなしで最新データを取り込めます。</p>



<h3 class="wp-block-heading"><span id="toc10">手動で更新する</span></h3>



<p class="wp-block-paragraph">いちばん簡単なのは、ボタンを押すだけの手動更新です。取り込んだテーブルのどこかをクリックし、[データ]タブの <strong>[すべて更新]ボタン</strong> をクリックします。これだけで、Webページの最新データに入れ替わります。</p>



<p class="wp-block-paragraph">ショートカットキーで更新したい場合は、<strong>Ctrl + Alt + F5</strong> を押せば全クエリをまとめて更新できます。</p>



<h3 class="wp-block-heading"><span id="toc11">ファイルを開いたときに自動更新する</span></h3>



<p class="wp-block-paragraph">毎回手で更新するのも面倒、という場合は自動更新を設定できます。テーブルを選んで [データ]タブの <strong>[クエリと接続]</strong> からクエリを右クリックし、[プロパティ]を開きます。</p>



<p class="wp-block-paragraph">プロパティ画面で <strong>[バックグラウンドで更新する]</strong> や <strong>[ファイルを開くときにデータを更新する]</strong> にチェックを入れましょう。さらに「N分ごとに更新する」を指定すれば、開いている間も定期的に最新化されます。</p>



<p class="wp-block-paragraph">決まった時刻に自動で更新を回したい、PCを触らずにデータだけ更新したい、という場合はもう一歩進んだ自動化が必要です。VBAやタスクスケジューラーを組み合わせる方法は、<a href="https://mashukabu.com/power-query-auto-refresh/">Power Queryのクエリ更新を自動化する方法</a>でくわしく解説しています。</p>



<h3 class="wp-block-heading"><span id="toc12">複数ページや複数ファイルをまとめて扱う</span></h3>



<p class="wp-block-paragraph">似た構造のページが複数あるとき、あるいはフォルダ内の複数ファイルをまとめたいときは、Power Queryの結合機能が役立ちます。フォルダ単位の一括取り込みについては、<a href="https://mashukabu.com/power-query-combine-files-folder/">Power Queryで複数のExcelファイルをフォルダから一括結合する方法</a>を参考にしてください。</p>



<h2 class="wp-block-heading"><span id="toc13">うまくいかないときの対処法</span></h2>



<p class="wp-block-paragraph">Webデータ取得は便利ですが、ページによっては取り込めないことがあります。よくあるつまずきと、その原因・対処法を整理しておきます。</p>



<h3 class="wp-block-heading"><span id="toc14">ナビゲーターに表が出てこない</span></h3>



<p class="wp-block-paragraph">[Webから]でURLを指定したのに、ナビゲーターに表（Table）が表示されないことがあります。これは、そのページのデータが <strong>HTMLの表として作られていない</strong> のが主な原因です。</p>



<p class="wp-block-paragraph">最近のWebサイトは、JavaScriptで後からデータを描画するものが増えています。こうしたページは、Power Queryがアクセスした時点ではまだ表が存在しないため、取り込めません。次のようなページは取り込めない可能性が高いです。</p>



<ul class="wp-block-list"><li>スクロールすると追加で読み込まれるページ</li><li>ボタンを押すと表示が切り替わる動的なページ</li><li>表が画像として貼られているページ</li></ul>



<p class="wp-block-paragraph">この場合は、データを <strong>CSVやExcel形式でダウンロードできないか</strong> をまず探してみてください。公的な統計サイトの多くはダウンロード機能を備えています。ダウンロードできれば、ファイルから取り込む方が確実で安定します。</p>



<h3 class="wp-block-heading"><span id="toc15">ログインが必要なページのデータが取れない</span></h3>



<p class="wp-block-paragraph">会員制サイトや社内システムなど、ログインしないと見られないページのデータは、基本的にWebコネクタでは取り込めません。Power Queryの「匿名」アクセスでは、ログイン後のページにたどり着けないためです。</p>



<p class="wp-block-paragraph">組織内のシステムであれば、管理者にデータのエクスポート機能やAPIの有無を確認するのが近道です。無理にスクレイピングしようとせず、正規のデータ取得経路を探しましょう。</p>



<h3 class="wp-block-heading"><span id="toc16">取り込んだデータが文字化けする</span></h3>



<p class="wp-block-paragraph">海外サイトなどで文字化けが起きた場合は、Power Queryエディターの <strong>[ソース]ステップ</strong> を確認します。文字コードの設定が合っていないことが原因です。</p>



<p class="wp-block-paragraph">Power Queryエディターの右側にある[適用したステップ]で[ソース]の歯車アイコンをクリックし、ファイルの originエンコード（UTF-8 など）を切り替えると直ることがあります。</p>



<h3 class="wp-block-heading"><span id="toc17">更新するたびに列が増減してエラーになる</span></h3>



<p class="wp-block-paragraph">Webページの構造が変わると、取り込み時にエラーが出たり、列がずれたりすることがあります。これはWebデータ取り込みの宿命とも言える注意点です。</p>



<p class="wp-block-paragraph">対策として、特定の列に依存しすぎない整形手順を意識しておきましょう。また、定期的に更新結果をチェックする運用にしておくと安心です。元ページのレイアウト変更には、こまめに気づけるようにしておくのがポイントです。</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>



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



<p class="wp-block-paragraph">Power QueryのWebコネクタを使えば、これまでコピペで集めていたWebの表データを自動で取り込めるようになります。最後に手順をふり返っておきましょう。</p>



<ul class="wp-block-list"><li><strong>[データ]タブ →[Webから]</strong> でURLを指定する</li><li><strong>ナビゲーター</strong> で取り込む表を選び、[データの変換]で整える</li><li>Power Queryエディターで不要な列・行を片付け、[閉じて読み込む]</li><li><strong>[すべて更新]</strong> ボタンやプロパティ設定で、最新データに入れ替える</li></ul>



<p class="wp-block-paragraph">ポイントは、一度作れば <strong>更新がボタン1つで済む</strong> ことです。為替・株価・統計データといった「毎週・毎月くり返し集めるデータ」ほど、自動化の効果が大きく出ます。</p>



<p class="wp-block-paragraph">ただし、JavaScriptで描画されるページやログインが必要なページは取り込めません。その場合はCSVダウンロードなど別の経路を検討してください。利用規約の確認も忘れずに。</p>



<p class="wp-block-paragraph">まずは身近な公開データのページで、一度試してみてくださいね。一度コツをつかめば、データ収集にかけていた時間がぐっと減らせるはずです。さらにPower Queryを使いこなしたい方は、<a href="https://mashukabu.com/power-query-complete-guide/">Power Queryとは何か完全ガイド</a>や<a href="https://mashukabu.com/power-query-getting-started/">Power Queryのはじめ方</a>も合わせてどうぞ。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/power-query-web-data/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-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">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-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></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>
		<item>
		<title>GASでGoogleフォームの予約をカレンダーに自動登録｜会議室・面談予約の受付を自動化</title>
		<link>https://mashukabu.com/gas-form-reservation-google-calendar/</link>
					<comments>https://mashukabu.com/gas-form-reservation-google-calendar/#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カレンダー]]></category>
		<category><![CDATA[Googleフォーム]]></category>
		<category><![CDATA[予約管理]]></category>
		<category><![CDATA[自動化]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=7877</guid>

					<description><![CDATA[Googleフォームで受け付けた予約（希望日時・氏名・用件）を、GASでGoogleカレンダーの予定として自動登録する方法をコピペ可能なコード付きで解説します。onFormSubmitトリガーで回答送信と同時に登録し、予約者への確認メール送信やダブルブッキング検知まで対応。会議室予約・面談受付・設備貸出の受付業務をまるごと自動化できます。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">会議室の予約、面談の受付、備品の貸出申請。こうしたフロント業務を「Googleフォームで受け付けてはいるけれど、結局その内容を見ながら手作業でカレンダーに予定を入れている」という方は多いのではないでしょうか。フォームの回答を1件ずつ確認してカレンダーに転記する作業は、件数が増えるほど時間を取られますし、転記ミスやダブルブッキングの原因にもなります。</p>



<p class="wp-block-paragraph">この記事では、Googleフォームで受け付けた予約（希望日時・氏名・用件）を、GAS（Google Apps Script）を使ってGoogleカレンダーに自動登録する仕組みを作ります。フォームが送信された瞬間にカレンダーへ予定が入り、予約者には確認メールが自動で届く。さらにダブルブッキングを検知して弾く応用まで、コピペで動くコード付きで解説します。</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-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">完成イメージと全体の流れ</a></li><li><a href="#toc2" tabindex="0">準備：フォームと回答スプレッドシートを用意する</a></li><li><a href="#toc3" tabindex="0">カレンダーに自動登録する基本コードを書く</a></li><li><a href="#toc4" tabindex="0">フォーム送信時トリガーを設定する</a></li><li><a href="#toc5" tabindex="0">予約者へ確認メールを自動送信する</a></li><li><a href="#toc6" tabindex="0">ダブルブッキングを検知して弾く【応用】</a></li><li><a href="#toc7" tabindex="0">まとめ：受付業務はGASで自動化できる</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">完成イメージと全体の流れ</span></h2>



<p class="wp-block-paragraph">まず、これから作る仕組みの全体像を押さえておきましょう。やることはシンプルで、次の3ステップです。</p>



<ol class="wp-block-list"><li>Googleフォームで予約を受け付ける（希望日時・氏名・用件などを質問項目にする）</li><li>フォームの回答先スプレッドシートにGASを書く</li><li>「フォーム送信時」のトリガーを設定し、回答が来るたびにカレンダーへ自動登録する</li></ol>



<p class="wp-block-paragraph">ポイントは、GASを<strong>フォームそのものではなく、回答が貯まるスプレッドシート側に書く</strong>ことです。Googleフォームを作ると「回答」タブからスプレッドシートを連携できますが、そのスプレッドシートに紐づくスクリプトを使うと、回答内容を扱いやすくなります。</p>



<p class="wp-block-paragraph">処理の流れを図にすると次のようになります。</p>



<pre class="wp-block-code"><code>[予約者] フォームに入力・送信
      ↓
[フォーム] 回答をスプレッドシートに記録
      ↓
[GAS] onFormSubmit トリガーが発火
      ↓
[GAS] 回答内容を読み取り → カレンダーに予定を作成
      ↓
[GAS] 予約者へ確認メールを送信</code></pre>



<h2 class="wp-block-heading"><span id="toc2">準備：フォームと回答スプレッドシートを用意する</span></h2>



<p class="wp-block-paragraph">最初に、予約を受け付けるGoogleフォームを作ります。今回は会議室予約を例に、次の質問項目を用意します。</p>



<ul class="wp-block-list"><li><strong>氏名</strong>（記述式・短文）</li><li><strong>メールアドレス</strong>（記述式・短文／確認メールの送信先になります）</li><li><strong>予約希望日</strong>（日付）</li><li><strong>開始時刻</strong>（時刻）</li><li><strong>利用時間（分）</strong>（プルダウン：30 / 60 / 90 / 120 など）</li><li><strong>用件</strong>（記述式・段落）</li></ul>



<p class="wp-block-paragraph">フォーム自体の作り方の基本は<a href="https://mashukabu.com/google-form-how-to-create/">Googleフォームの作り方入門</a>を参考にしてください。</p>



<p class="wp-block-paragraph">フォームができたら、編集画面の「回答」タブにある「スプレッドシートにリンク」をクリックして、回答先のスプレッドシートを作成します。これでフォームが送信されるたびに、1行ずつ回答がスプレッドシートに追記されるようになります。</p>



<p class="wp-block-paragraph">スプレッドシートの1行目（ヘッダー）は、フォームの質問順に次のように並びます。</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</th><th>G</th></tr></thead><tbody><tr><td>タイムスタンプ</td><td>氏名</td><td>メールアドレス</td><td>予約希望日</td><td>開始時刻</td><td>利用時間（分）</td><td>用件</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">A列の「タイムスタンプ」はフォームが自動で付ける送信日時です。B列以降が、自分で作った質問の回答になります。<strong>列の順番はコードの中で位置指定して読み取る</strong>ので、この並びをしっかり確認しておいてください。質問を入れ替えると列もずれるので注意します。</p>



<h2 class="wp-block-heading"><span id="toc3">カレンダーに自動登録する基本コードを書く</span></h2>



<p class="wp-block-paragraph">それでは本題のコードです。回答スプレッドシートを開いた状態で、メニューの「拡張機能」→「Apps Script」を開き、スクリプトエディタを表示します。</p>



<p class="wp-block-paragraph">デフォルトのコードをすべて消して、次のコードを貼り付けてください。</p>



<pre class="wp-block-code"><code>// ===== 設定 =====
// 登録先カレンダーのID。自分のメインカレンダーなら 'primary' のままでOK。
// 共有カレンダーを使う場合は、カレンダー設定の「カレンダーの統合」にある
// 「カレンダーID」（xxxx@group.calendar.google.com）をコピペする。
const CALENDAR_ID = 'primary';

// フォーム送信時に実行されるメイン関数
function onFormSubmit(e) {
  // e.values は [タイムスタンプ, 氏名, メール, 希望日, 開始時刻, 利用時間, 用件]
  const values = e.values;

  const name      = values[1]; // 氏名
  const email     = values[2]; // メールアドレス
  const dateStr   = values[3]; // 予約希望日（例: 2026/07/01）
  const timeStr   = values[4]; // 開始時刻（例: 14:00）
  const duration  = Number(values[5]); // 利用時間（分）
  const purpose   = values[6]; // 用件

  // 開始日時と終了日時を組み立てる
  const start = buildDateTime(dateStr, timeStr);
  const end   = new Date(start.getTime() + duration * 60 * 1000);

  // カレンダーに予定を作成
  const calendar = CalendarApp.getCalendarById(CALENDAR_ID);
  const title = '【会議室予約】' + name + '様 / ' + purpose;

  calendar.createEvent(title, start, end, {
    description: '予約者: ' + name + 'n連絡先: ' + email + 'n用件: ' + purpose,
    guests: email,            // 予約者をゲストに追加（任意）
    sendInvites: false        // 招待メールを送るかどうか
  });

  Logger.log('予定を登録しました: ' + title);
}

// 「2026/07/01」と「14:00」から Date オブジェクトを作るヘルパー
function buildDateTime(dateStr, timeStr) {
  // 日付の区切りは / でも - でも拾えるようにする
  const d = dateStr.replace(/-/g, '/').split('/'); // [2026, 07, 01]
  const t = timeStr.split(':');                     // [14, 00]
  return new Date(
    Number(d[0]),       // 年
    Number(d[1]) - 1,   // 月（0始まりなので -1）
    Number(d[2]),       // 日
    Number(t[0]),       // 時
    Number(t[1])        // 分
  );
}</code></pre>



<p class="wp-block-paragraph">コードの要点を順番に見ていきます。</p>



<ul class="wp-block-list"><li><strong><code>e.values</code></strong>：フォーム送信時トリガーで自動的に渡される引数 <code>e</code> の中に、その回答1件分のデータが配列で入っています。<code>values[0]</code> がタイムスタンプ、<code>values[1]</code> が1問目の回答……と続きます。フォームの質問順とインデックスが対応している点が重要です。</li><li><strong><code>buildDateTime</code> 関数</strong>：フォームの日付・時刻はテキストとして渡ってくるため、そのままでは予定の開始日時に使えません。年・月・日・時・分に分解してDateオブジェクトを組み立てます。JavaScriptの月は0始まり（1月が0）なので、<code>-1</code> するのを忘れないでください。</li><li><strong><code>createEvent</code></strong>：タイトル・開始日時・終了日時を渡すと予定が作られます。第4引数のオブジェクトで説明文やゲストを追加できます。</li></ul>



<p class="wp-block-paragraph"><code>CalendarApp</code> の詳しい仕様は<a href="https://developers.google.com/apps-script/reference/calendar/calendar-app">Google公式のCalendarApp リファレンス</a>も参考になります。</p>



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



<p class="wp-block-paragraph">コードを書いただけでは自動実行されません。<strong>「フォームが送信されたら <code>onFormSubmit</code> を動かす」というトリガーを設定</strong>して、はじめて自動化が完成します。</p>



<p class="wp-block-paragraph">スクリプトエディタの左メニューにある時計マークのアイコン（トリガー）をクリックし、画面右下の「トリガーを追加」を押します。設定は次の通りです。</p>



<ul class="wp-block-list"><li>実行する関数：<code>onFormSubmit</code></li><li>実行するデプロイ：<code>Head</code></li><li>イベントのソース：<code>スプレッドシートから</code></li><li>イベントの種類：<code>フォーム送信時</code></li></ul>



<p class="wp-block-paragraph">保存しようとすると、初回はGoogleアカウントへのアクセス承認を求められます。「許可」を進めて承認してください（自分のアカウントでカレンダーやメールを操作するための権限です）。</p>



<p class="wp-block-paragraph">トリガーの仕組みや種類をもっと詳しく知りたい方は、<a href="https://mashukabu.com/gas-trigger-automation/">GASのトリガーで集計・通知を自動化する方法</a>で時間主導型トリガーなども含めて解説しています。</p>



<p class="wp-block-paragraph">設定が終わったら、実際にフォームから1件テスト送信してみましょう。カレンダーを開いて、指定した日時に予定が入っていれば成功です。うまく動かないときは、スクリプトエディタの「実行数」（トリガーの実行ログ）を開くと、エラー内容を確認できます。</p>



<h2 class="wp-block-heading"><span id="toc5">予約者へ確認メールを自動送信する</span></h2>



<p class="wp-block-paragraph">予約を受け付けたら、予約者本人に「受け付けました」という確認メールを自動で返すと、予約システムらしさがぐっと増します。<code>onFormSubmit</code> 関数の末尾に、メール送信処理を追加しましょう。</p>



<p class="wp-block-paragraph">先ほどのコードの <code>Logger.log(...)</code> の行の前に、次のコードを追記します。</p>



<pre class="wp-block-code"><code>  // ===== 確認メールを送信 =====
  const subject = '【予約受付完了】会議室のご予約を承りました';
  const body =
    name + ' 様nn' +
    'このたびはご予約いただきありがとうございます。n' +
    '以下の内容で予約を承りました。nn' +
    '----------------------------------------n' +
    '日時: ' + formatJp(start) + ' 〜 ' + formatTime(end) + 'n' +
    '用件: ' + purpose + 'n' +
    '----------------------------------------nn' +
    '※このメールは自動送信です。変更・キャンセルはご返信ください。';

  GmailApp.sendEmail(email, subject, body);</code></pre>



<p class="wp-block-paragraph">そして、日時を読みやすく整形するヘルパー関数を、ファイルの末尾に追加します。</p>



<pre class="wp-block-code"><code>// 「2026年07月01日(火) 14:00」の形式に整形
function formatJp(date) {
  return Utilities.formatDate(date, 'Asia/Tokyo', 'yyyy年MM月dd日(E) HH:mm');
}

// 「15:00」のように時刻だけ整形
function formatTime(date) {
  return Utilities.formatDate(date, 'Asia/Tokyo', 'HH:mm');
}</code></pre>



<p class="wp-block-paragraph"><code>GmailApp.sendEmail(宛先, 件名, 本文)</code> の3つを指定するだけで、自分のGmailアカウントから確認メールが送られます。<code>Utilities.formatDate</code> はDateを好きな書式の文字列に変換する関数で、<code>Asia/Tokyo</code> を指定して日本時間で表示しています。</p>



<p class="wp-block-paragraph">メール送信には1日あたりの上限があります（無料のGmailアカウントで100通／日程度）。予約件数が少ない社内利用なら問題になりませんが、大量送信を想定する場合は上限に注意してください。</p>



<p class="wp-block-paragraph">フォームの回答を集計したり別シートに転記したりする処理を組み合わせたい場合は、<a href="https://mashukabu.com/google-form-gas-auto-aggregate/">Googleフォームの回答をGASで自動集計する方法</a>も合わせて読むと、予約データの管理まで一気通貫で自動化できます。</p>



<h2 class="wp-block-heading"><span id="toc6">ダブルブッキングを検知して弾く【応用】</span></h2>



<p class="wp-block-paragraph">会議室や面談枠のように「同じ時間帯に1件しか入れられない」予約では、ダブルブッキングの防止が欠かせません。GASなら、登録前に<strong>その時間帯に既存の予定がないかをチェック</strong>できます。</p>



<p class="wp-block-paragraph"><code>createEvent</code> を呼ぶ直前に、次の判定を入れます。<code>onFormSubmit</code> 関数の <code>const calendar = ...</code> の後ろに追記してください。</p>



<pre class="wp-block-code"><code>  // ===== ダブルブッキング検知 =====
  // start〜end の時間帯に既存の予定があるか調べる
  const existing = calendar.getEvents(start, end);

  if (existing.length &gt; 0) {
    // すでに予定がある → 登録せずにお詫びメールを送る
    const ngSubject = '【ご予約について】ご希望の時間帯は満席です';
    const ngBody =
      name + ' 様nn' +
      'あいにくご希望の日時（' + formatJp(start) + '）はn' +
      'すでに他のご予約が入っております。n' +
      'お手数ですが、別の日時で再度お申し込みください。';
    GmailApp.sendEmail(email, ngSubject, ngBody);
    Logger.log('ダブルブッキングのため登録をスキップ: ' + name);
    return; // ここで処理を終了し、カレンダー登録に進ませない
  }</code></pre>



<p class="wp-block-paragraph"><code>calendar.getEvents(start, end)</code> は、指定した期間に重なる予定を配列で返します。配列の要素が1つでもあれば（<code>length > 0</code>）、その時間帯はすでに埋まっているということです。その場合は登録を行わず、予約者に「満席」のお詫びメールを送って <code>return</code> で処理を終了します。</p>



<p class="wp-block-paragraph">これで、同じ時間帯への二重予約を自動でブロックできます。ただし、フォーム送信がほぼ同時に2件来た場合はすり抜ける可能性がゼロではないので、厳密な排他制御が必要な業務では、登録後にダブりが起きていないか定期チェックする運用も検討してください。</p>



<h2 class="wp-block-heading"><span id="toc7">まとめ：受付業務はGASで自動化できる</span></h2>



<p class="wp-block-paragraph">Googleフォームの予約をGoogleカレンダーに自動登録する仕組みを、基本から応用まで作ってきました。今回のポイントを振り返ります。</p>



<ul class="wp-block-list"><li>GASは<strong>回答先スプレッドシート</strong>に書き、<code>onFormSubmit</code> 関数で回答内容を受け取る</li><li><code>e.values</code> の配列インデックスはフォームの質問順に対応する</li><li>日付・時刻のテキストは <code>buildDateTime</code> でDateに組み立て、<code>createEvent</code> で予定を作成する</li><li><strong>「フォーム送信時」トリガー</strong>を設定してはじめて自動実行される</li><li><code>GmailApp.sendEmail</code> で確認メールを、<code>calendar.getEvents</code> でダブルブッキング検知を追加できる</li></ul>



<p class="wp-block-paragraph">一度組んでしまえば、あとはフォームのURLを共有するだけで、予約の受付からカレンダー登録・確認メールまでが完全に自動で回ります。会議室予約だけでなく、面談予約・設備の貸出申請・イベントの参加受付など、「日時を指定して申し込む」あらゆる業務に応用できます。</p>



<p class="wp-block-paragraph">GASでできる自動化の幅をさらに広げたい方は、<a href="https://mashukabu.com/spreadsheet-gas-getting-started-recipes/">GAS入門｜スプレッドシート自動化のはじめの一歩</a>から基礎を固めていくのがおすすめです。手作業の受付業務を、ぜひこの機会に手放してみてください。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/gas-form-reservation-google-calendar/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Excel Power Query入門｜コピペ集計を卒業する4つの自動化レシピ</title>
		<link>https://mashukabu.com/power-query-getting-started/</link>
					<comments>https://mashukabu.com/power-query-getting-started/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Mon, 08 Jun 2026 15:51:57 +0000</pubDate>
				<category><![CDATA[仕事効率化]]></category>
		<category><![CDATA[Excel入門]]></category>
		<category><![CDATA[Power Query]]></category>
		<category><![CDATA[データ集計]]></category>
		<category><![CDATA[パワークエリ]]></category>
		<category><![CDATA[モダンExcel]]></category>
		<category><![CDATA[自動化]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=7871</guid>

					<description><![CDATA[Excel Power Query（パワークエリ）の使い方を、毎月のコピペ集計を卒業するための4つの自動化レシピで解説します。複数シート結合・CSVフォルダ取り込み・列整形・更新ボタン化まで、事務職向けに「真似するだけ」の手順で紹介。VBA不要で始められます。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">毎月「複数のシートからデータをコピペして、列を消して、日付を整えて、集計表を作る」という作業をしていませんか？</p>



<p class="wp-block-paragraph">この単純作業、正直しんどいですよね。気づけば半日が消えていることもあります。</p>



<p class="wp-block-paragraph">そんな手作業を一気に解決してくれるのが、Excelに標準搭載されている <strong>Power Query（パワークエリ）</strong> です。「データの取り込みから加工までを記録して、ボタン1つで何度でも再現する」というツールで、VBAも数式も書かずに自動化できます。</p>



<p class="wp-block-paragraph">この記事では、Power Query が初めての事務職向けに、毎月のコピペ集計を卒業する4つの実務レシピを紹介します。「縦結合」「CSV取り込み」「列の整形」「更新ボタン1クリック」の4つができれば、あなたの「コピペお作法」のかなりの部分は消えます。</p>



<p class="wp-block-paragraph">なお本記事は <strong>Windows 版 Excel</strong> での操作を前提にしています。Mac 版 Excel は一部のコネクタ（フォルダー取り込み等）が制限されているためご注意ください。</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">Power Query 使い方の全体像｜毎月のコピペ集計が消える理由</a><ol><li><a href="#toc2" tabindex="0">Power Query でできる4つのこと</a></li><li><a href="#toc3" tabindex="0">関数や VBA との違い</a></li></ol></li><li><a href="#toc4" tabindex="0">Power Query を使う前の準備</a><ol><li><a href="#toc5" tabindex="0">起動方法と画面の見方</a></li><li><a href="#toc6" tabindex="0">最初に覚える3つの操作</a></li></ol></li><li><a href="#toc7" tabindex="0">レシピ1：複数シートを Power Query で縦に結合する</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：Power Query でフォルダ内のCSVを自動で取り込む</a><ol><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">レシピ3：Power Query で列の削除と型変換を定型化する</a><ol><li><a href="#toc16" tabindex="0">こんな業務シーンで使えます</a></li><li><a href="#toc17" tabindex="0">操作手順</a></li><li><a href="#toc18" tabindex="0">ステップが記録されるしくみ</a></li></ol></li><li><a href="#toc19" tabindex="0">レシピ4：Power Query で「更新」ボタン1クリックの仕組みを作る</a><ol><li><a href="#toc20" tabindex="0">ピボットテーブルとの連携</a></li><li><a href="#toc21" tabindex="0">全クエリの一括更新</a></li><li><a href="#toc22" tabindex="0">ファイルを開いたときに自動更新する設定</a></li></ol></li><li><a href="#toc23" tabindex="0">Power Query でつまずきやすいトラブル3選</a><ol><li><a href="#toc24" tabindex="0">日付が「45000」などの数値になってしまう</a></li><li><a href="#toc25" tabindex="0">CSVが文字化けする</a></li><li><a href="#toc26" tabindex="0">クエリが消えた・編集できない</a></li></ol></li><li><a href="#toc27" tabindex="0">まとめ：Power Query は「縦結合」から始めよう</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">Power Query 使い方の全体像｜毎月のコピペ集計が消える理由</span></h2>



<p class="wp-block-paragraph">Power Query は、Excel 2016 以降の Windows 版 Excel に標準搭載されているデータ加工ツールです。Microsoft 365 / Excel 2019 / 2021 / 2024 すべてで「データ」タブの「データの取得と変換」グループから使えます（Excel 2010・2013 は別途アドインが必要でした）。</p>



<p class="wp-block-paragraph">「複数のファイルを読み込む」「不要な列を削除する」「日付を整える」といった一連の操作を <strong>手順として記録</strong> し、ソースデータが更新されたら「更新」ボタン1クリックで全部やり直してくれる仕組みです。</p>



<h3 class="wp-block-heading"><span id="toc2">Power Query でできる4つのこと</span></h3>



<p class="wp-block-paragraph">実務でとくに効くのは、次の4つです。</p>



<ul class="wp-block-list"><li><strong>複数シート・複数ファイルの結合</strong>: 部署別シートやフォルダ内CSVを1つの表にまとめる</li><li><strong>列の削除・並び替え・型変換</strong>: 不要列をカット、日付や数値の形を整える</li><li><strong>条件によるフィルター・行の絞り込み</strong>: 「2026年4月以降だけ」といった抽出</li><li><strong>更新ボタンによる再現</strong>: 一度作った処理を翌月以降も使い回す</li></ul>



<p class="wp-block-paragraph">これらを組み合わせると、毎月の集計作業がほぼ自動になります。</p>



<h3 class="wp-block-heading"><span id="toc3">関数や VBA との違い</span></h3>



<p class="wp-block-paragraph">「VLOOKUP や SUMIFS でも似たことはできるよね？」と思う方もいるかもしれません。たしかにできますが、表の構造が変わるたびに数式を直す必要があります。Power Query は <strong>列名ベース</strong> で処理するため、列が増えても数式の修正は不要です。</p>



<p class="wp-block-paragraph">VBAとの違いはメンテナンス性です。VBA は自分でループやエラー処理を書く必要があり、書いた本人以外は触りづらくなりがちです。Power Query は GUI 操作が「適用したステップ」として記録されるため、後から見返しやすく、同僚への引き継ぎもラクになります。</p>



<p class="wp-block-paragraph">詳しい全体像は <a href="https://mashukabu.com/modern-excel-explanation/">モダンExcelとは？Power Query・Power Pivotから最新機能まで解説</a> の記事もあわせて読んでみてください。</p>



<h2 class="wp-block-heading"><span id="toc4">Power Query を使う前の準備</span></h2>



<p class="wp-block-paragraph">まずは画面の見方と、最初に覚える操作を押さえます。ここを飛ばすと「ボタンが見つからない」で止まりがちなので、軽くおさらいしておきましょう。</p>



<h3 class="wp-block-heading"><span id="toc5">起動方法と画面の見方</span></h3>



<p class="wp-block-paragraph">Excel を起動して、リボンの「データ」タブを開きます。左端にある「データの取得と変換」グループが Power Query の入り口です。</p>



<p class="wp-block-paragraph">「データの取得」ボタンから、取り込みたいソース（ブック・CSV・フォルダなど）を選ぶと、別ウィンドウで <strong>Power Query エディター</strong> が開きます。エディター画面は3つのエリアに分かれます。</p>



<ul class="wp-block-list"><li><strong>左側のクエリペイン</strong>: 作成したクエリの一覧</li><li><strong>中央のプレビュー</strong>: データの中身（取り込んだ表）</li><li><strong>右側の適用したステップ</strong>: 操作の履歴（このあとが重要）</li></ul>



<p class="wp-block-paragraph">「適用したステップ」には、操作するたびに新しい行が増えていきます。後から「ここを変更したい」と思ったら、対応するステップをクリックするだけで戻ったり編集したりできます。</p>



<h3 class="wp-block-heading"><span id="toc6">最初に覚える3つの操作</span></h3>



<p class="wp-block-paragraph">エディターで最初に使うのは、次の3つです。</p>



<ul class="wp-block-list"><li><strong>列の削除</strong>: 列ヘッダーを右クリック →「削除」</li><li><strong>データ型の変更</strong>: 列ヘッダー左のアイコンをクリック → 型を選ぶ</li><li><strong>閉じて読み込む</strong>: 左上の「閉じて読み込む」ボタン → Excel シートに結果を出力</li></ul>



<p class="wp-block-paragraph">この3つができれば、最低限のレシピは動かせます。それでは実際のレシピに入っていきましょう。</p>



<h2 class="wp-block-heading"><span id="toc7">レシピ1：複数シートを Power Query で縦に結合する</span></h2>



<p class="wp-block-paragraph">最初のレシピは、 <strong>複数シートの縦結合</strong> です。「部署別シートを1枚にまとめる」「月別シートを1つの表にする」といった作業に効きます。</p>



<h3 class="wp-block-heading"><span id="toc8">こんな業務シーンで使えます</span></h3>



<p class="wp-block-paragraph">たとえば1つのブックに「営業部」「経理部」「総務部」という3つのシートがあり、それぞれに同じ列構成のメンバー名簿が入っているとします。これを「全社名簿」として1枚にまとめるイメージです。</p>



<p class="wp-block-paragraph">従来は3つのシートを開いて、行をコピーして、新しいシートに貼り付け……を繰り返していたはずです。これが数クリックで終わります。</p>



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



<p class="wp-block-paragraph">操作は次の流れです。</p>



<ol class="wp-block-list"><li>各シートの表を「テーブル」として登録（範囲を選択して Ctrl + T）しておく</li><li>「データ」タブ →「データの取得」→「その他のデータソースから」→「空のクエリ」を選ぶ</li><li>Power Query エディターが開いたら、「詳細エディター」を開く</li><li>次のような M 言語のコードを入力する</li></ol>



<pre class="wp-block-code"><code>let
    Source = Excel.CurrentWorkbook(),
    Filtered = Table.SelectRows(Source, each [Name] &lt;&gt; &quot;結合先&quot;),
    Combined = Table.Combine(Filtered[Content])
in
    Combined</code></pre>



<p class="wp-block-paragraph">このコードは「現在のブックにある全テーブルを取得 → 結合先シートを除外 → 残りを縦に結合」という処理です。最初は「ちょっとむずかしく見える」かもしれませんが、やっていることはシンプルです。</p>



<p class="wp-block-paragraph">各シートの表を「テーブル」として登録しておくと、Power Query が自動で認識してくれます。</p>



<h3 class="wp-block-heading"><span id="toc10">更新ボタンで使い回す</span></h3>



<p class="wp-block-paragraph">シートに行を追加したり、新しい部署のシートを増やしたりしても、「データ」タブ →「すべて更新」をクリックするだけで結合結果が再計算されます。翌月の名簿更新でも、同じクエリを使い回せます。</p>



<p class="wp-block-paragraph">「複数表をくっつける」だけなら <a href="https://mashukabu.com/excel-function-howto-use-vlookup/">ExcelのVLOOKUP関数の使い方</a> でも対応できますが、 <strong>行方向の結合</strong> は Power Query の方が圧倒的に速くてキレイです。</p>



<h2 class="wp-block-heading"><span id="toc11">レシピ2：Power Query でフォルダ内のCSVを自動で取り込む</span></h2>



<p class="wp-block-paragraph">2つ目のレシピは、 <strong>フォルダ内CSVの一括取り込み</strong> です。「毎月送られてくる売上CSV」「店舗別の日報CSV」のように、定期的に増えていくファイルを扱う業務にぴったりです。</p>



<h3 class="wp-block-heading"><span id="toc12">こんな業務シーンで使えます</span></h3>



<p class="wp-block-paragraph">「2026-04-売上.csv」「2026-05-売上.csv」のようなファイルが、共有フォルダに毎月追加されるケースを想像してください。従来はファイルを1つずつ開いて、コピーして、貼り付けて……としていたはずです。</p>



<p class="wp-block-paragraph">このレシピを組むと、「フォルダに新しいCSVを置く → Excelで更新ボタンを押す」だけで全月のデータが1つの表になります。</p>



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



<p class="wp-block-paragraph">「データ」タブ →「データの取得」→「ファイルから」→「フォルダーから」を選びます。CSVが入っているフォルダを指定すると、フォルダ内のファイル一覧が表示されます。</p>



<p class="wp-block-paragraph">「結合」ボタンを押し、サンプルファイルを選んで OK を押すと、Power Query エディターが開きます。エディター内では、次のような操作で整えていきます。</p>



<ul class="wp-block-list"><li>不要な列（ファイルパス・拡張子など）を削除</li><li>ヘッダー行を「1行目をヘッダーとして使用」で確定</li><li>各列のデータ型を設定（日付・整数・通貨など）</li></ul>



<p class="wp-block-paragraph">最後に「閉じて読み込む」を押すと、Excel シートに全CSVの結合結果が出力されます。</p>



<h3 class="wp-block-heading"><span id="toc14">新しいファイルを追加すれば勝手に取り込まれる</span></h3>



<p class="wp-block-paragraph">このレシピのすごいところは、後からCSVを追加しても <strong>特別な作業がいらない</strong> 点です。フォルダに新しいCSVを保存して、Excel で「すべて更新」を押すだけで自動で取り込まれます。</p>



<p class="wp-block-paragraph">CSVが文字化けする場合は、エディター上部の「ソース」ステップを開き、「ファイルの元の形式」を「日本語(シフトJIS)」または「65001: Unicode (UTF-8)」に切り替えてください。</p>



<p class="wp-block-paragraph">なお Mac 版 Excel では「フォルダーから」コネクタの一部機能が制限されている場合があります。冒頭でも触れたとおり、本記事は Windows 版 Excel での操作を前提に解説しています。</p>



<h2 class="wp-block-heading"><span id="toc15">レシピ3：Power Query で列の削除と型変換を定型化する</span></h2>



<p class="wp-block-paragraph">3つ目のレシピは、 <strong>列の整形を定型化</strong> することです。基幹システムからエクスポートしたデータには、不要な列やフォーマット崩れがよくあります。これを毎月手作業で直しているなら、Power Query 一択です。</p>



<h3 class="wp-block-heading"><span id="toc16">こんな業務シーンで使えます</span></h3>



<p class="wp-block-paragraph">たとえば基幹システムから「売上明細.xlsx」を出力すると、次のようなクセがあるとします。</p>



<ul class="wp-block-list"><li>「メモ」「処理ID」「更新日時」など、集計に不要な列が10列以上ある</li><li>「金額」列が文字列として読み込まれて、SUM できない</li><li>日付列が「20260401」のような数値になっていて、月別集計しにくい</li></ul>



<p class="wp-block-paragraph">これらを Power Query エディターで整形しておけば、翌月以降は更新ボタン1クリックで全部直してくれます。</p>



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



<p class="wp-block-paragraph">ファイルを取り込んでエディターが開いたら、次の手順で整えます。</p>



<ol class="wp-block-list"><li><strong>不要列の削除</strong>: Ctrl キーを押しながら不要な列ヘッダーをクリック → 右クリック →「列の削除」</li><li><strong>型の変換</strong>: 列ヘッダーの左にあるアイコン（ABC など）をクリック → 「整数」「通貨」「日付」などを選ぶ</li><li><strong>日付フォーマット</strong>: 数値で入っている日付列は「変換」タブ →「データ型」→「テキスト」に変換 → 「列の分割」で年月日に分けて再結合、または「カスタム列」で <code>Date.FromText</code> を使う</li></ol>



<p class="wp-block-paragraph">「適用したステップ」を見ると、操作した分だけステップが増えていきます。これが翌月以降の「自動処理レシピ」になります。</p>



<h3 class="wp-block-heading"><span id="toc18">ステップが記録されるしくみ</span></h3>



<p class="wp-block-paragraph">Power Query は GUI 操作を内部的に M 言語というコードに変換して保存しています。「詳細エディター」を開けば、コードを直接見たり編集したりできます。</p>



<p class="wp-block-paragraph">最初は GUI 操作だけで十分ですが、慣れてきたら M 言語を覗いてみると、より細かい制御ができるようになります。</p>



<p class="wp-block-paragraph">集計用途で SUMIFS と組み合わせる場合は、 <a href="https://mashukabu.com/excel-function-howto-use-sumifs/">ExcelのSUMIFS関数の使い方</a> もあわせてどうぞ。Power Query で整形した表をピボットテーブルや SUMIFS で集計する流れが王道です。</p>



<h2 class="wp-block-heading"><span id="toc19">レシピ4：Power Query で「更新」ボタン1クリックの仕組みを作る</span></h2>



<p class="wp-block-paragraph">最後のレシピは、 <strong>「更新」ボタン1クリックで全部終わる仕組み</strong> を作ることです。ここまでの3つのレシピを組み合わせ、毎月のルーチン作業を完全自動化します。</p>



<h3 class="wp-block-heading"><span id="toc20">ピボットテーブルとの連携</span></h3>



<p class="wp-block-paragraph">Power Query で整形した表は、そのまま <strong>ピボットテーブルの元データ</strong> として使えます。</p>



<p class="wp-block-paragraph">クエリの結果を Excel シートに出力した後、「挿入」タブ →「ピボットテーブル」でピボットを作成します。これで「Power Query で整形 → ピボットで集計」という流れが完成します。</p>



<p class="wp-block-paragraph">ソースデータが変わったら、「データ」タブ →「すべて更新」を押すだけで、Power Query の処理とピボットの集計が <strong>連動して</strong> 再計算されます。</p>



<h3 class="wp-block-heading"><span id="toc21">全クエリの一括更新</span></h3>



<p class="wp-block-paragraph">ファイル内に複数のクエリがある場合、 <strong>Ctrl + Alt + F5</strong> で全クエリを一括更新できます。クエリを1つずつ更新する必要はありません。</p>



<p class="wp-block-paragraph">特定のクエリだけ更新したい場合は、「データ」タブ →「クエリと接続」を開き、対象クエリを右クリックして「更新」を選びます。</p>



<h3 class="wp-block-heading"><span id="toc22">ファイルを開いたときに自動更新する設定</span></h3>



<p class="wp-block-paragraph">「ファイルを開いたときに最新データを自動で取り込みたい」という場合は、次の設定を入れておきます。</p>



<ol class="wp-block-list"><li>「データ」タブ →「クエリと接続」を開く</li><li>対象クエリを右クリック →「プロパティ」</li><li>「使用」タブの「ファイルを開くときにデータを更新する」にチェック</li></ol>



<p class="wp-block-paragraph">これで、毎朝ファイルを開くだけで最新の集計が自動で表示されます。「コピペお作法」が完全に消える瞬間です。</p>



<h2 class="wp-block-heading"><span id="toc23">Power Query でつまずきやすいトラブル3選</span></h2>



<p class="wp-block-paragraph">最後に、Power Query を始めたばかりの人がよくつまずく3つのトラブルと対処法をまとめておきます。</p>



<h3 class="wp-block-heading"><span id="toc24">日付が「45000」などの数値になってしまう</span></h3>



<p class="wp-block-paragraph">これは、Power Query が日付列を「数値（シリアル値）」として認識してしまったケースです。対処法はシンプルです。</p>



<p class="wp-block-paragraph">エディターで対象の列を選び、「変換」タブ →「データ型」→「日付」をクリックします。これで日付として表示されます。</p>



<p class="wp-block-paragraph">数値が「YYYYMMDD」形式（例: 20260401）の場合は、「変換」タブ →「データ型」を「テキスト」に変えてから、「列の分割」で年月日に切り分けて再結合する方法もあります。</p>



<h3 class="wp-block-heading"><span id="toc25">CSVが文字化けする</span></h3>



<p class="wp-block-paragraph">CSV を取り込んだら「縺薙ｓ縺ｫ縺｡縺ｯ」のように文字化けする場合は、エンコードの設定が原因です。</p>



<p class="wp-block-paragraph">エディターの「適用したステップ」から「ソース」を開きます。「ファイルの元の形式」というドロップダウンがあるので、「日本語(シフトJIS)」または「65001: Unicode (UTF-8)」に切り替えてください。多くの場合、これで直ります。</p>



<h3 class="wp-block-heading"><span id="toc26">クエリが消えた・編集できない</span></h3>



<p class="wp-block-paragraph">「さっき作ったクエリが見つからない！」というケースもよくあります。クエリは Excel ブック自体に保存されているので、消えてはいません。表示されていないだけです。</p>



<p class="wp-block-paragraph">「データ」タブ →「クエリと接続」をクリックすると、画面右側にクエリ一覧ペインが表示されます。クエリ名をダブルクリックすればエディターが開いて編集できます。</p>



<p class="wp-block-paragraph">それでも見つからない場合は、ブックを保存し直してから開き直すと表示されることがあります。</p>



<h2 class="wp-block-heading"><span id="toc27">まとめ：Power Query は「縦結合」から始めよう</span></h2>



<p class="wp-block-paragraph">Power Query を使えば、毎月のコピペ集計はほぼ消えます。最初の一歩としておすすめなのが、レシピ1の <strong>複数シートの縦結合</strong> です。</p>



<p class="wp-block-paragraph">理由は3つあります。</p>



<ul class="wp-block-list"><li>既存のExcelブックだけで完結する（外部ファイル不要）</li><li>操作がシンプルで、効果が目に見えてわかる</li><li>「更新ボタン1クリック」の威力を最初に体験できる</li></ul>



<p class="wp-block-paragraph">縦結合に慣れたら、CSV取り込み（レシピ2）→ 列整形（レシピ3）→ 自動更新（レシピ4）と段階的に広げていきましょう。</p>



<p class="wp-block-paragraph">Excel の関数とPower Queryは敵ではなく、組み合わせて使うのが正解です。詳しい全体像は <a href="https://mashukabu.com/modern-excel-explanation/">モダンExcelとは？Power Query・Power Pivotから最新機能まで解説</a> もチェックしてみてください。 <a href="https://mashukabu.com/excel-vs-spreadsheet/">ExcelとGoogleスプレッドシートの違い</a> でデータ取り込みの選択肢を比較しているので、こちらもあわせてどうぞ。</p>



<p class="wp-block-paragraph">毎月のコピペ作業から卒業する第一歩、今日のうちに踏み出してみてください。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/power-query-getting-started/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Power Queryとは｜モダンExcelの三本柱を完全解説</title>
		<link>https://mashukabu.com/power-query-complete-guide/</link>
					<comments>https://mashukabu.com/power-query-complete-guide/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Mon, 08 Jun 2026 15:50:10 +0000</pubDate>
				<category><![CDATA[仕事効率化]]></category>
		<category><![CDATA[Excel入門]]></category>
		<category><![CDATA[Power Query]]></category>
		<category><![CDATA[データ集計]]></category>
		<category><![CDATA[パワークエリ]]></category>
		<category><![CDATA[モダンExcel]]></category>
		<category><![CDATA[自動化]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=7829</guid>

					<description><![CDATA[Power Query（パワークエリ）とは何かを、モダンExcelの三本柱という視点から完全解説。取得・整形・結合・更新の4工程の全体像、関数やVBAとの違い、学習ロードマップまで網羅。毎月のコピペ集計を卒業したい事務職向けの入門ピラー記事です。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">「毎月、複数のファイルを開いて、コピペして、いらない列を消して、日付を整えて、集計表を作る」。この一連の作業に、半日まるごと持っていかれていませんか？</p>



<p class="wp-block-paragraph">しかも、翌月になればまた同じことをゼロからやり直しです。正直、しんどいですよね。</p>



<p class="wp-block-paragraph">この終わりのない手作業を、根本から消してくれる機能があります。Excelに標準搭載されている <strong>Power Query（パワークエリ）</strong> です。一度「やり方」を記録しておけば、翌月以降はボタン1つで全部やり直してくれます。VBAも難しい数式も書きません。</p>



<p class="wp-block-paragraph">この記事は、そんな Power Query の <strong>全体像をつかむための入口</strong> になるピラー記事です。「Power Query とは何か」「何ができて、何が変わるのか」をまず俯瞰します。そのうえで、次にどの操作から覚えればいいかという学習ロードマップまで整理します。個別の操作手順は各詳細記事で深掘りしているので、読み終わったら気になったところへ進んでみてくださいね。</p>



<p class="wp-block-paragraph">なお本記事は <strong>Windows 版 Excel</strong> での操作を前提にしています。Mac 版 Excel は一部の機能（フォルダー取り込みなど）が制限されているのでご注意ください。</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">Power Queryとは｜モダンExcelの三本柱の一角</a><ol><li><a href="#toc2" tabindex="0">モダンExcelの三本柱とは</a></li><li><a href="#toc3" tabindex="0">なぜ今、Power Queryを学ぶ価値があるのか</a></li></ol></li><li><a href="#toc4" tabindex="0">Power Queryでできること｜取得・整形・結合・更新の4工程</a><ol><li><a href="#toc5" tabindex="0">工程1: 取得（データを読み込む）</a></li><li><a href="#toc6" tabindex="0">工程2: 整形（データの汚れを落とす）</a></li><li><a href="#toc7" tabindex="0">工程3: 結合・集計（複数の表をくっつける）</a></li><li><a href="#toc8" tabindex="0">工程4: 更新（翌月も使い回す）</a></li></ol></li><li><a href="#toc9" tabindex="0">Power Queryと関数・VBAの違い｜どれを使えばいいのか</a></li><li><a href="#toc10" tabindex="0">Power Queryの学習ロードマップ｜どの順番で覚えればいい？</a><ol><li><a href="#toc11" tabindex="0">ステップ1: まずは「取得」と「更新」だけ覚える</a></li><li><a href="#toc12" tabindex="0">ステップ2: 「整形」で汚れを落とせるようになる</a></li><li><a href="#toc13" tabindex="0">ステップ3: 「結合・集計」で表をまとめる</a></li></ol></li><li><a href="#toc14" tabindex="0">Power Queryでよくあるつまずきと対処の方向性</a></li><li><a href="#toc15" tabindex="0">まとめ｜Power Queryは「毎月のコピペ」を消す土台になる</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">Power Queryとは｜モダンExcelの三本柱の一角</span></h2>



<p class="wp-block-paragraph">Power Query（パワークエリ）とは、<strong>データの取り込みから加工までの操作を自動化する</strong> Excel標準のデータ加工ツールです。一連の作業を「手順」として記録し、ボタン1つで何度でも再現できます。Excel 2016以降のWindows版に最初から入っています。「データ」タブの「データの取得と変換」グループから使えますよ。</p>



<p class="wp-block-paragraph">ポイントは、作業を「結果」ではなく「手順」として残すところです。たとえば「フォルダ内のCSVを全部読み込む → いらない列を消す → 日付を整える → 集計する」という流れを考えてみましょう。この手順を一度作っておけば、来月データが更新されても <strong>更新ボタン1クリックで同じ結果</strong> が出てきます。コピペのやり直しは不要になりますよ。</p>



<h3 class="wp-block-heading"><span id="toc2">モダンExcelの三本柱とは</span></h3>



<p class="wp-block-paragraph">近年のExcelは、単なる「表計算ソフト」から「データを扱うためのプラットフォーム」へと進化しました。この進化を支える機能群が <strong>モダンExcel</strong> と呼ばれていて、次の三本柱で構成されています。</p>



<ul class="wp-block-list"><li><strong>Power Query</strong>: データの取得・整形・結合（データを準備する役割）</li><li><strong>Power Pivot</strong>: 大量データの集計・データモデル構築（データを分析する役割）</li><li><strong>DAX / ピボットテーブル</strong>: 分析結果の可視化・指標計算（データを見せる役割）</li></ul>



<p class="wp-block-paragraph">この三本柱のうち、いちばん最初の「データを準備する」工程を担うのが Power Query です。どんな分析も、まずデータがきれいに揃っていないと始まりません。だからこそ Power Query は、モダンExcelの <strong>入口であり土台</strong> にあたる存在なんです。</p>



<p class="wp-block-paragraph">モダンExcel全体の位置づけをもっと詳しく知りたい方は、<a href="https://mashukabu.com/modern-excel-explanation/">モダンExcelとは何かをやさしく解説した記事</a>も合わせて読んでみてください。</p>



<h3 class="wp-block-heading"><span id="toc3">なぜ今、Power Queryを学ぶ価値があるのか</span></h3>



<p class="wp-block-paragraph">理由はシンプルで、<strong>事務作業の「毎月くり返す系」をまるごと自動化できる</strong> からです。月次のデータ集計、複数支店の売上まとめ、システムから落としたCSVの整形。こうした「単純だけど時間がかかる作業」こそ、Power Queryが最も得意とする領域です。</p>



<p class="wp-block-paragraph">しかも、関数やVBAと違って <strong>GUI操作（マウスで選んでクリックする操作）が中心</strong> なので、プログラミングの知識がなくても始められます。難しそうに見えますが、やっていることは「いつもの手作業をマウスで一度だけやる」だけなんです。</p>



<h2 class="wp-block-heading"><span id="toc4">Power Queryでできること｜取得・整形・結合・更新の4工程</span></h2>



<p class="wp-block-paragraph">Power Queryの仕事は、大きく4つの工程に分けて考えると一気にわかりやすくなります。バラバラの機能を覚えるのではなく、「データが流れていく順番」として捉えるのがコツです。</p>



<pre class="wp-block-code"><code>[取得] → [整形] → [結合・集計] → [更新]
 データを      汚れを       複数の表を     翌月も
 読み込む      落とす       くっつける     使い回す</code></pre>



<p class="wp-block-paragraph">それぞれの工程が、いつものコピペ作業のどの部分を肩代わりしてくれるのかを見ていきましょう。</p>



<h3 class="wp-block-heading"><span id="toc5">工程1: 取得（データを読み込む）</span></h3>



<p class="wp-block-paragraph">最初の工程は、データを Power Query に取り込むところです。Excelファイル、CSV、フォルダ内の複数ファイル、Webページの表、データベースなど、いろいろな場所からデータを読み込めます。</p>



<p class="wp-block-paragraph">いちばん効果が大きいのは「フォルダ内のファイルをまとめて読み込む」パターンです。たとえば支店ごとに分かれた12ヶ月分のCSV。1ファイルずつ開いてコピペ……ではなく、フォルダを指定するだけで全部つなげて読み込めます。</p>



<ul class="wp-block-list"><li>複数ファイルの一括取り込み → <a href="https://mashukabu.com/power-query-combine-files-folder/">フォルダ内の複数ファイルを結合する方法</a></li><li>Webサイトの表の取り込み → <a href="https://mashukabu.com/power-query-web-data/">Web上のデータを取得する方法</a></li></ul>



<h3 class="wp-block-heading"><span id="toc6">工程2: 整形（データの汚れを落とす）</span></h3>



<p class="wp-block-paragraph">次は、読み込んだデータをきれいに整える工程です。実務のデータは、たいてい「そのままでは使えない」状態で届きます。余計な列、結合されたセル、半角と全角が混ざった文字、おかしな日付形式。こうした汚れを落とすのが整形です。</p>



<p class="wp-block-paragraph">不要な列の削除、データ型の変換、文字列の分割や結合、空白の除去などをマウス操作で進められます。一度やり方を記録すれば、翌月の汚れも同じ手順で自動的にきれいになります。</p>



<ul class="wp-block-list"><li>データ整形の基本 → <a href="https://mashukabu.com/power-query-data-cleansing-basics/">Power Queryのデータクレンジング入門</a></li><li>列の分割・結合 → <a href="https://mashukabu.com/power-query-split-merge-columns/">列を分割・結合する方法</a></li></ul>



<h3 class="wp-block-heading"><span id="toc7">工程3: 結合・集計（複数の表をくっつける）</span></h3>



<p class="wp-block-paragraph">データが揃ったら、複数の表をくっつけたり、集計したりする工程です。ここがコピペ作業のいちばんつらかった部分を肩代わりしてくれます。</p>



<p class="wp-block-paragraph">「価格表と注文表を商品コードで突き合わせる」「縦に積み重ねて1つの表にする」「カテゴリごとに合計を出す」。こうした処理が、数式なしでできます。VLOOKUPを大量に貼って重くなる……という悩みからも解放されますよ。</p>



<ul class="wp-block-list"><li>表の突き合わせ（マージ） → <a href="https://mashukabu.com/power-query-merge-tables/">Power Queryでテーブルをマージする方法</a></li><li>グループ化して集計 → <a href="https://mashukabu.com/power-query-group-by-aggregate/">グループ化で集計する方法</a></li><li>クロス集計表を縦持ちに変換 → <a href="https://mashukabu.com/power-query-unpivot-crosstab/">ピボット解除（アンピボット）の使い方</a></li></ul>



<h3 class="wp-block-heading"><span id="toc8">工程4: 更新（翌月も使い回す）</span></h3>



<p class="wp-block-paragraph">最後が、Power Query最大のごほうびとも言える「更新」です。ここまでの取得・整形・結合・集計は、すべて <strong>手順として記録</strong> されています。だから、元データが新しくなったら <strong>更新ボタンを押すだけ</strong> で、まったく同じ処理がもう一度走ります。</p>



<p class="wp-block-paragraph">毎月のコピペ集計が消えるのは、この更新の仕組みがあるからです。さらに、ファイルを開いたときに自動で更新する設定にすれば、ボタンを押す手間すら省けます。</p>



<ul class="wp-block-list"><li>自動更新の設定 → <a href="https://mashukabu.com/power-query-auto-refresh/">Power Queryの更新を自動化する方法</a></li></ul>



<h2 class="wp-block-heading"><span id="toc9">Power Queryと関数・VBAの違い｜どれを使えばいいのか</span></h2>



<p class="wp-block-paragraph">「VLOOKUPやSUMIFSでも同じことができるよね？」「VBAでマクロを組めばいいのでは？」と思う方もいるはずです。たしかにどれも自動化の手段ですが、得意分野がはっきり違います。違いを表にまとめてみました。</p>



<figure class="wp-block-table"><table><thead><tr><th>項目</th><th>関数</th><th>VBA・マクロ</th><th>Power Query</th></tr></thead><tbody><tr><td>主な用途</td><td>セル単位の計算</td><td>操作の自動化全般</td><td>データの取得・整形・結合</td></tr><tr><td>必要な知識</td><td>数式の書き方</td><td>プログラミング</td><td>マウス操作中心</td></tr><tr><td>データ量の耐性</td><td>多いと重くなる</td><td>設計しだい</td><td>大量データに強い</td></tr><tr><td>メンテナンス</td><td>列が増えると修正</td><td>書いた本人以外は難しい</td><td>手順が記録され見返しやすい</td></tr><tr><td>繰り返し作業</td><td>毎回数式を確認</td><td>コード実行</td><td>更新ボタン1クリック</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">ざっくり言うと、こういう使い分けになります。</p>



<ul class="wp-block-list"><li><strong>1つのセルで計算したい</strong> → 関数（SUMIFS・VLOOKUPなど）</li><li><strong>大量データの取り込み・整形・集計を毎月くり返す</strong> → Power Query</li><li><strong>Excelの枠を超えた複雑な操作（メール送信・印刷など）を自動化したい</strong> → VBA・マクロ</li></ul>



<p class="wp-block-paragraph">つまり Power Query は「データの準備工程」に特化した道具です。関数やVBAと競合するというより、<strong>役割分担して組み合わせる</strong> のが正解なんです。</p>



<p class="wp-block-paragraph">それぞれの使い分けをもっと深く知りたい方は、次の比較記事が参考になります。</p>



<ul class="wp-block-list"><li><a href="https://mashukabu.com/power-query-vs-function-vba-power-automate/">Power Queryと関数・VBA・Power Automateの使い分け</a></li><li><a href="https://mashukabu.com/power-query-vs-power-pivot-power-bi/">Power QueryとPower Pivot・Power BIの違い</a></li><li><a href="https://mashukabu.com/power-query-vs-gas-automation-tool-guide/">Power QueryとGASなど自動化ツールの選び方</a></li></ul>



<h2 class="wp-block-heading"><span id="toc10">Power Queryの学習ロードマップ｜どの順番で覚えればいい？</span></h2>



<p class="wp-block-paragraph">ここまで読んで「便利そうだけど、何から手をつければ？」と感じた方へ、おすすめの学習順を3ステップで整理します。いきなり全部やろうとせず、効果の大きいところから1つずつ攻めていくのがコツですよ。</p>



<h3 class="wp-block-heading"><span id="toc11">ステップ1: まずは「取得」と「更新」だけ覚える</span></h3>



<p class="wp-block-paragraph">最初のゴールは、<strong>「フォルダ内のCSVを読み込んで、来月は更新ボタンで再現する」</strong> ことです。整形も集計もまだ気にしなくて大丈夫。「データを読み込む → 更新で使い回す」という Power Query の基本サイクルを体で覚えるのが目的です。</p>



<p class="wp-block-paragraph">ここだけで、毎月のファイルを開いてコピペする作業が消えます。最初の入口としては、<a href="https://mashukabu.com/power-query-getting-started/">Power Queryの入門レシピ記事</a>で実際に手を動かしてみるのがおすすめです。</p>



<h3 class="wp-block-heading"><span id="toc12">ステップ2: 「整形」で汚れを落とせるようになる</span></h3>



<p class="wp-block-paragraph">次は、読み込んだデータをきれいにする整形を覚えます。不要な列の削除、データ型の変換、文字列の分割。このあたりができると、「読み込んだけど結局手直しが必要」という状態がなくなります。</p>



<p class="wp-block-paragraph">データクレンジングの基本と、列の分割・結合をセットで身につけると、たいていの「汚れたデータ」に対応できるようになりますよ。</p>



<h3 class="wp-block-heading"><span id="toc13">ステップ3: 「結合・集計」で表をまとめる</span></h3>



<p class="wp-block-paragraph">最後に、複数の表をくっつけるマージや、カテゴリ別に合計を出すグループ化を覚えます。ここまで来れば、「複数ファイルを読み込んで、整えて、突き合わせて、集計して、更新で使い回す」という一連の自動化が完成です。月次集計のほとんどが、ボタン1つで終わるようになります。</p>



<p class="wp-block-paragraph">さらに踏み込みたくなったら、Power Queryの裏側で動いている <strong>M言語</strong> を少しだけ覗いてみるのもおすすめです。GUI操作では届かない細かい処理ができるようになります。</p>



<ul class="wp-block-list"><li><a href="https://mashukabu.com/power-query-m-language-custom-column/">M言語でカスタム列を作る方法</a></li></ul>



<h2 class="wp-block-heading"><span id="toc14">Power Queryでよくあるつまずきと対処の方向性</span></h2>



<p class="wp-block-paragraph">最後に、学習を始めたばかりの方がつまずきやすいポイントを整理しておきます。「あ、これ自分のことだ」と思ったら、リンク先で詳しく確認してみてくださいね。</p>



<ul class="wp-block-list"><li><strong>更新が遅い・固まる</strong>: データ量が多い、または重い処理を毎回やり直しているのが原因です。読み込む範囲を絞る、不要なステップを削るなどで改善できます。</li><li><strong>エラーが出て更新できない</strong>: ファイルの場所が変わった、列名が変わったなどが原因です。記録したステップが迷子になっているケースが多いんです。</li><li><strong>Mac版で機能が使えない</strong>: フォルダー取り込みなど一部機能はWindows版限定です。</li></ul>



<p class="wp-block-paragraph">更新が遅いときやエラーが出たときの具体的な対処は、<a href="https://mashukabu.com/power-query-slow-refresh-error-troubleshooting/">トラブル対処の記事</a>で詳しくまとめています。困ったときの駆け込み寺として覚えておくと安心ですよ。</p>



<h2 class="wp-block-heading"><span id="toc15">まとめ｜Power Queryは「毎月のコピペ」を消す土台になる</span></h2>



<p class="wp-block-paragraph">Power Query（パワークエリ）とは、データの取得・整形・結合・更新を自動化するExcel標準ツールでした。モダンExcelの三本柱の一角を担う存在です。最後にこの記事のポイントを振り返っておきましょう。</p>



<ul class="wp-block-list"><li>Power Queryは、データの準備工程を「手順」として記録し、更新ボタン1つで再現できる</li><li>モダンExcelの三本柱（Power Query・Power Pivot・DAX/ピボット）の入口であり土台にあたる</li><li>「取得 → 整形 → 結合・集計 → 更新」の4工程で、毎月のコピペ集計が消える</li><li>関数・VBAと競合せず、役割分担して組み合わせるのが正解</li><li>学習は「取得・更新 → 整形 → 結合・集計」の順で1つずつ進めるのが効率的</li></ul>



<p class="wp-block-paragraph">最初の一歩としては、まず「フォルダ内のファイルを読み込んで、更新ボタンで使い回す」だけでも十分に効果を実感できます。気になった工程のリンクから、ぜひ実際に手を動かしてみてくださいね。あなたの「毎月の半日」が、ボタン1つに変わるはずですよ。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/power-query-complete-guide/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Power Queryで複数のExcelファイルをフォルダから一括結合する方法｜毎月の集約作業を自動化</title>
		<link>https://mashukabu.com/power-query-combine-files-folder/</link>
					<comments>https://mashukabu.com/power-query-combine-files-folder/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Mon, 08 Jun 2026 15:50:07 +0000</pubDate>
				<category><![CDATA[仕事効率化]]></category>
		<category><![CDATA[Power Query]]></category>
		<category><![CDATA[データ集計]]></category>
		<category><![CDATA[パワークエリ]]></category>
		<category><![CDATA[フォルダ結合]]></category>
		<category><![CDATA[自動化]]></category>
		<category><![CDATA[複数ファイル結合]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=7827</guid>

					<description><![CDATA[複数の支店・月別Excelブックが入ったフォルダを指定するだけで、全ファイルを縦に自動結合するPower Queryの手順を解説。列構成・シート名を揃える前提条件、ヘルパークエリの仕組み、ファイル追加後に更新ボタンで取り込む運用、ファイル名を列として残すテクニックまで、毎月の集約作業を自動化したい事務職向けに紹介します。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">毎月、各支店から送られてくるExcelブックを1つずつ開いて、中身をコピーして集計用シートに貼り付けて……という作業を繰り返していませんか。ファイルが5個、10個と増えるほど、この単純作業は時間を食ううえにミスの温床になります。</p>



<p class="wp-block-paragraph">Power Queryには「フォルダから結合」という機能があり、決まったフォルダを指定するだけで、その中に入っている複数のExcelブックを縦にまとめて1つの表にしてくれます。しかも一度設定してしまえば、翌月は新しいファイルをフォルダに置いて「更新」ボタンを押すだけ。集約作業がほぼ自動化されます。</p>



<p class="wp-block-paragraph">この記事では、複数の支店別・月別Excelブックをフォルダ指定で一括結合する手順を、前提条件から運用方法まで順を追って解説します。Power Queryそのものが初めての方は、先に<a href="https://mashukabu.com/power-query-complete-guide/">Power Queryとは｜モダンExcelの三本柱を完全解説</a>で全体像をつかんでおくと、この記事の内容がよりスムーズに理解できます。</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">ファイルを追加したら「更新」ボタンで取り込む運用</a></li><li><a href="#toc5" tabindex="0">ファイル名を列として残すテクニック（Source.Name）</a></li><li><a href="#toc6" tabindex="0">CSV結合との違いと使い分け</a></li><li><a href="#toc7" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">フォルダ結合がうまくいくための前提条件</span></h2>



<p class="wp-block-paragraph">フォルダ結合は強力な機能ですが、対象ファイルの中身がバラバラだと正しく結合できません。設定を始める前に、次の3つを揃えておくことが成功の鍵です。</p>



<p class="wp-block-paragraph"><strong>1. 列構成（見出し）を全ファイルで統一する</strong></p>



<p class="wp-block-paragraph">A列が「日付」、B列が「商品名」、C列が「金額」というように、すべてのブックで列の順番と見出しが揃っている必要があります。ある支店だけ列の順番が違ったり、余計な列が混ざっていたりすると、結合後の表で値がずれてしまいます。</p>



<p class="wp-block-paragraph"><strong>2. 取り込むシート名を統一する</strong></p>



<p class="wp-block-paragraph">各ブックでデータが入っているシートの名前を揃えておきます。たとえば全ブックで「売上」というシート名にしておけば、Power Query側で「売上シートだけを取り込む」という指定がしやすくなります。シート名がバラバラだと意図しないシートまで結合対象になることがあります。</p>



<p class="wp-block-paragraph"><strong>3. 対象ファイルだけをフォルダに入れる</strong></p>



<p class="wp-block-paragraph">指定したフォルダの中にあるファイルは原則すべて結合対象になります。集計に関係ないメモ用ブックや一時ファイルが混ざっていると、それも取り込もうとしてエラーになります。結合用のフォルダは専用に1つ作り、対象ブックだけを入れておくのが安全です。</p>



<p class="wp-block-paragraph">この「揃える」作業を最初に徹底しておくだけで、後の手順がぐっと楽になります。支店にファイルを送ってもらうときは、配布用のテンプレートを1つ用意して、それを各支店に記入してもらう運用にすると、列構成もシート名も自然に揃います。</p>



<h2 class="wp-block-heading"><span id="toc2">フォルダから結合する基本手順</span></h2>



<p class="wp-block-paragraph">前提が整ったら、実際にPower Queryで結合していきます。Excelの「データ」タブから操作します。</p>



<ol class="wp-block-list"><li><strong>データタブ → データの取得 → ファイルから → フォルダーから</strong> を選びます。</li><li>結合したいExcelブックが入っているフォルダを指定します。</li><li>フォルダ内のファイル一覧がプレビュー表示されます。ここで内容を確認したら、画面下の <strong>結合</strong> ボタンの右側にある三角を押し、<strong>データの結合と変換</strong> を選びます。</li><li>「Filesの結合」ダイアログが開きます。サンプルファイルとして1つ目のブックの中身が表示されるので、取り込みたいシート（またはテーブル）を選んで <strong>OK</strong> を押します。</li></ol>



<p class="wp-block-paragraph">これだけで、フォルダ内の全ブックの同じシートが縦に連結された1つの表が、Power Queryエディターに表示されます。あとは右上の <strong>閉じて読み込む</strong> を押せば、Excelのシートに結合結果が一括で書き出されます。</p>



<p class="wp-block-paragraph">最初は手順が多く感じるかもしれませんが、実際にやってみると数クリックで終わります。重要なのは、3の「データの結合と変換」を選ぶことです。ここで単に「読み込む」を選ぶとファイルの一覧だけが取り込まれてしまうので注意してください。</p>



<h2 class="wp-block-heading"><span id="toc3">ヘルパークエリの仕組みを理解する</span></h2>



<p class="wp-block-paragraph">フォルダ結合を実行すると、画面左のクエリ一覧に見慣れないクエリやフォルダーがいくつも自動生成されます。「サンプルファイル」「ファイルの変換」「パラメーター1」といったものです。これらをまとめて<strong>ヘルパークエリ</strong>と呼びます。</p>



<p class="wp-block-paragraph">ヘルパークエリの役割は、ざっくり言うと「1つのファイルに対する処理手順をテンプレート化し、それをフォルダ内の全ファイルに自動で適用する」ことです。仕組みを分解すると次のようになります。</p>



<ul class="wp-block-list"><li><strong>サンプルファイル</strong>: フォルダ内の最初の1つを「お手本」として取り込んだもの。どのシートをどう読むかをここで定義します。</li><li><strong>ファイルの変換</strong>: サンプルファイルに対して行った処理（シートの選択など）を、1つの関数としてまとめたもの。</li><li><strong>メインのクエリ</strong>: フォルダ内の各ファイルに対して「ファイルの変換」関数を順番に適用し、結果をすべて縦に連結します。</li></ul>



<p class="wp-block-paragraph">つまり、お手本に対して1回だけ整形手順を作れば、同じ手順がフォルダ内の全ファイルに自動展開される、という設計です。最初は触らずに、まず結合結果を眺めてみるのがおすすめです。仕組みを把握したい場合は「サンプルファイル」クエリの整形手順を確認すると、どんな処理が全ファイルに適用されているかが見えてきます。</p>



<p class="wp-block-paragraph">もし結合後に「不要な行を消したい」「列を1つ削除したい」といった共通の整形をしたい場合は、メインのクエリ側で追加するのが基本です。各ファイル共通の前処理（ヘッダー行の調整など）はサンプルファイル側で行います。データの整形そのものの基本操作は<a href="https://mashukabu.com/power-query-data-cleansing-basics/">Power Queryでデータクレンジングを始める基本ステップ</a>で詳しく扱っているので、合わせて読んでみてください。</p>



<h2 class="wp-block-heading"><span id="toc4">ファイルを追加したら「更新」ボタンで取り込む運用</span></h2>



<p class="wp-block-paragraph">フォルダ結合の最大のメリットは、ここからの運用にあります。翌月、新しい支店ブックが届いたときの作業はとてもシンプルです。</p>



<ol class="wp-block-list"><li>届いたExcelブックを、<strong>結合用フォルダに保存する</strong>。</li><li>集計用のExcelファイルを開き、<strong>データタブ → すべて更新</strong> を押す。</li></ol>



<p class="wp-block-paragraph">たったこれだけで、新しく追加したファイルの中身が自動的に結合結果に追加されます。クエリを作り直す必要は一切ありません。フォルダの中身を見て、新しいファイルがあれば自動で取り込んでくれるからです。</p>



<p class="wp-block-paragraph">この運用に乗せると、毎月の集約作業は「ファイルをフォルダに入れる → 更新を押す」だけになります。手作業のコピペが消えるので、貼り付け漏れや行ずれといったミスも起きません。</p>



<p class="wp-block-paragraph">注意点として、追加するファイルも<strong>前提条件（列構成・シート名の統一）を必ず満たしている</strong>必要があります。新しいファイルだけ列構成が違うと、その分だけ値がずれたりエラーになったりします。配布テンプレートを使い回すルールを徹底しておきましょう。</p>



<h2 class="wp-block-heading"><span id="toc5">ファイル名を列として残すテクニック（Source.Name）</span></h2>



<p class="wp-block-paragraph">複数ファイルを結合すると、どの行がどのファイル（=どの支店・どの月）から来たのかが分からなくなってしまいます。そこで役立つのが <strong>Source.Name</strong> 列です。</p>



<p class="wp-block-paragraph">フォルダ結合を行うと、Power Queryは自動的に <strong>Source.Name</strong> という列を生成し、各行の出どころとなったファイル名をそこに記録してくれます。たとえばファイル名を「2026-05_東京支店.xlsx」のように決めておけば、Source.Name列を見るだけで月と支店が一目で分かります。</p>



<p class="wp-block-paragraph">このSource.Name列を活用すると、結合後にできることが一気に広がります。</p>



<ul class="wp-block-list"><li>ファイル名から「支店名」や「年月」を別の列に切り出す（区切り文字での列分割）。</li><li>切り出した支店名や年月を使って、ピボットテーブルや<a href="https://mashukabu.com/power-query-group-by-aggregate/">Power Queryのグループ化で集計する</a>。</li></ul>



<p class="wp-block-paragraph">もしSource.Name列が表示されていない、あるいは結合の過程で消してしまった場合は、メインのクエリの整形ステップを見直すと復活させられます。ファイル名の付け方を「年月_支店名」のように統一しておくことが、後の分析のしやすさを大きく左右します。命名ルールは最初に決めておくのがおすすめです。</p>



<h2 class="wp-block-heading"><span id="toc6">CSV結合との違いと使い分け</span></h2>



<p class="wp-block-paragraph">フォルダ結合はCSVファイルに対しても使えますが、Excelブックの結合とは少し勝手が違います。違いを押さえておくと、トラブルを避けられます。</p>



<p class="wp-block-paragraph"><strong>CSVの場合</strong>: 1ファイル=1つの表というシンプルな構造なので、フォルダを指定すればほぼそのまま縦結合できます。シート選択の手間がなく、設定は最も簡単です。文字コードや区切り文字さえ揃っていれば、サクッと結合できます。</p>



<p class="wp-block-paragraph"><strong>Excelブックの場合</strong>: 1ファイルの中に複数シートが存在しうるため、「どのシートを取り込むか」をサンプルファイルで指定する必要があります。その分ひと手間増えますが、シート名を統一しておけば問題なく扱えます。</p>



<p class="wp-block-paragraph">使い分けの目安としては、データの配布元がCSVを出せるならCSVのほうが結合は手軽です。一方、支店側が普段からExcelで入力していて書式やシート構成を保ちたい場合は、Excelブックのまま結合するのが現実的です。どちらの形式でも「列構成を揃える」という前提は共通なので、まずはそこを最優先で整えましょう。</p>



<p class="wp-block-paragraph">なお、結合したいデータがWeb上の表として公開されている場合は、フォルダではなく<a href="https://mashukabu.com/power-query-web-data/">Power QueryでWebサイトのデータを取得する方法</a>が使えます。データの所在に応じて取得方法を選び分けると、Power Queryの活用幅がさらに広がります。</p>



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



<p class="wp-block-paragraph">Power Queryのフォルダ結合を使えば、複数の支店別・月別Excelブックを、フォルダ指定だけで縦に一括結合できます。要点を整理します。</p>



<ul class="wp-block-list"><li>結合前に<strong>列構成とシート名を全ファイルで統一</strong>し、専用フォルダに対象ブックだけを入れておく。</li><li>データタブの「フォルダーから」→「データの結合と変換」で結合する。</li><li>自動生成される<strong>ヘルパークエリ</strong>が、お手本の整形手順を全ファイルに展開してくれる。</li><li>翌月以降はファイルをフォルダに置いて<strong>「すべて更新」を押すだけ</strong>で取り込める。</li><li><strong>Source.Name列</strong>でファイル名（支店・年月）を保持し、後の集計に活かす。</li></ul>



<p class="wp-block-paragraph">最初の設定さえ済ませれば、毎月のコピペ集約作業から解放されます。まずは数個のサンプルブックで一度試してみて、更新ボタンで新ファイルが取り込まれる感覚をつかんでみてください。Power Query全体の使い方をさらに深めたい方は、<a href="https://mashukabu.com/power-query-complete-guide/">Power Queryとは｜モダンExcelの三本柱を完全解説</a>や<a href="https://mashukabu.com/power-query-getting-started/">はじめてのPower Query</a>も参考になります。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/power-query-combine-files-folder/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
