目次

n8n Google Sheets 入門:データの自動読み取り・追加・更新

Google Sheets は、申し込みリスト、注文、在庫、顧客リストなどに使われる、最も一般的な「軽量データベース」です。n8n を使うと、スプレッドシートの読み取り、書き込み、更新を自動化し、新しいデータが追加されたときにワークフローを起動できます。

準備:認証

  • n8n Cloud:Google Sheets の認証情報を作成するときに Google にログインするだけです。
  • セルフホスト:事前に Google Cloud で OAuth クライアントを作成し、Google Sheets API を有効にする必要があります。詳しい手順は認証情報の管理を参照してください。

スプレッドシートの形式

n8n は1 行目を列名として扱い、2 行目以降をデータ(1 つの item)として扱います。

名前Emailセッションステータス
王小明ming@example.com10/20 台北確認済み
李小華hua@example.com10/27 台中未確認

読み取り後、各行は次のようになります。

{ "row_number": 2, "名前": "王小明", "Email": "ming@example.com", "セッション": "10/20 台北", "ステータス": "確認済み" }

列名は短く、重複しないものにしてください。セルの結合は避けてください。

よく使う操作

Google Sheets ノードで次の操作を選択します。

操作説明
Get Row(s)行を読み取ります。条件(例:ステータス = 未確認)で絞り込めます。
Append Row最後に行を追加します。
Update Row列の値で該当する行を探し、更新します。
Append or Update Row該当する行があれば更新し、なければ追加します(最もよく使われます)。
Delete Rows行を削除します。
Clearシートを空にします。
Create新しいスプレッドシートまたはシートを作成します。

スプレッドシートとシートを選ぶときは、リストから選択するか、スプレッドシートの URL を貼り付けます。

列のマッピング

追加または更新するとき、Mapping Column Mode には 2 つの方法があります。

  • Map Each Column Manually:各列に式を個別に入力します。たとえば「名前」には {{ $json.name }} を入力します。
  • Map Automatically:入力データの列名とスプレッドシートの列名が同じ場合、自動で対応付けます。

更新時に照合する列

Update / Append or Update では Column to match on を指定します。たとえば「Email」列で照合します。値が重複しない列を選んでください。

新しいデータの監視:Google Sheets Trigger

Google Sheets Trigger はスプレッドシートを定期的に確認し、行が追加されたときまたは行が変更されたときに起動します。「誰かがシートに注文を追加したら、自動で処理する」といった用途に適しています。

ポーリング方式(たとえば毎分確認)で動作するため、リアルタイムではありません。

完全な例:イベント申し込みの自動化

要件:ユーザーが申し込みフォームに入力 → スプレッドシートに書き込む → 確認メールを送る → 管理者に通知する。

[Form Trigger] ─▶ [Google Sheets:Append or Update] ─▶ [Send Email:確認メール] ─▶ [Telegram:管理者への通知]

1. Form Trigger

n8n の組み込みフォームを使うため、Google フォームは必要ありません。

  • Form Title:講座申し込み
  • フィールド:
    • 名前(Text、必須)
    • Email(Email、必須)
    • セッション(Dropdown:10/20 台北、10/27 台中)

公開するとフォームの URL が発行され、そのまま共有できます。

2. スプレッドシートへの書き込み

Google Sheets ノードで Append or Update Row を選択します。

  • Column to match on:Email
  • 名前:{{ $json['姓名'] }}
  • Email:{{ $json.Email }}
  • セッション:{{ $json['場次'] }}
  • ステータス:申し込み済み
  • 申し込み日時:{{ $now.toFormat('yyyy-MM-dd HH:mm') }}

Email で照合するため、同じ人が重複して申し込んでも、データが更新され、重複行は追加されません。

3. 確認メールの送信

Send Email または Gmail ノードを使います。

{{ $('Form Trigger').item.json['姓名'] }} 様

「{{ $('Form Trigger').item.json['場次'] }}」の講座にお申し込みいただき、ありがとうございます。
お申し込みを受け付けました。イベントの前日に、リマインダーをお送りします。

直前のノードは Google Sheets なので、$('Form Trigger') を使ってフォームの元データを読み取ります。

4. 管理者への通知

Telegram または Slack ノードを接続し、「新規申し込み:名前 / セッション」を送信します。

応用:毎日申し込み状況をメールで送信

[Schedule 毎日 18:00] ─▶ [Google Sheets:Get Rows] ─▶ [Summarize:セッションごとに集計] ─▶ [Send Email]

Summarize ノードで、Fields to Split By に「セッション」を選び、Aggregation に Count を選択すると、各セッションの申し込み人数を取得できます。

よくある質問

データ量が多いと遅くなったり、エラーになったりする

Google Sheets API にはレート制限があります。大量に書き込む場合は、次の方法を試してください。

  • 1 行ずつ呼び出すのではなく、複数行をまとめて書き込む
  • Loop Over Items で分割し、間に Wait を入れる

数万件を超える場合は、PostgreSQL や MySQL などのデータベース、または n8n 組み込みの Data Tables(バージョンによって利用可能)への移行をおすすめします。

読み取った数値が文字列になる

読み取り結果はスプレッドシートのセル形式に影響されます。比較や計算の前に Number() で変換してください。

列が見つからない

1 行目が列名になっていることと、列名の前後に余分な空白がないことを確認してください。列名を変更した場合は、ノードで列を再読み込みする必要があります。

更新日 2026年10月12日