Sheets × ChatGPT で業務自動化|GASで作るExcel卒業ルート

AI・自動化

※本記事にはアフィリエイトリンクが含まれます

毎月¥1,490のMicrosoft 365、本当に元取れてますか。

結論。Googleスプレッドシート(無料)+ ChatGPT + GAS(Google Apps Script)の組み合わせで、Excelの定型自動化は多くが代替できます。私はExcelもPower Automateも卒業して、月¥0のSheets運用に切り替えました。経理事務だった妻に「もうExcel戻れない」と言わせた具体例(経費仕訳の分類を =GPT() で自動化、月3時間→10分)込みで、コード・コスト・落とし穴まで公開します。

結論早見表

やりたいこと 使うもの
セルの値で条件分岐して処理 GAS(無料)
取引先メールから自動でシート更新 GAS + Gmail API
セル内容を要約・翻訳 ChatGPT API(=GPT()関数)
1000行のデータをカテゴリ分け ChatGPT API + GAS
定期実行(毎朝9時にレポート送信) GASトリガー
画像URLから内容を読み取り GPT-4o系 Vision API
大量データの並列処理 GAS時間トリガー分割

これ全部、無料 or 数十円。Microsoft 365 Personal を解約すれば年¥17,880(¥1,490 × 12)浮きます。

OpenAI APIキーの取得(初心者向け事前準備)

GAS から ChatGPT を呼ぶには OpenAI APIキーが必要です。以下の手順:

  1. platform.openai.com にサインアップ
  2. 「Billing」→「Add payment method」でクレジットカード登録 → 最初は$5チャージで十分
  3. 「API Keys」→「Create new secret key」でキー発行(sk-... から始まる文字列)
  4. キーは1度しか表示されないのでメモする

キーを発行したら、GAS側で安全に保管します(コード内に直接書かない)。手順は次のセクションで。

Sheets × ChatGPT 連携の30秒セットアップ

GAS のカスタム関数として ChatGPT を呼び出せます。

  1. スプレッドシート → 「拡張機能」→「Apps Script(Google Apps Script の管理画面)」
  2. 左メニューの歯車アイコン「プロジェクトの設定」→「スクリプト プロパティ」→ プロパティ名 OPENAI_API_KEY でAPIキーを保存
  3. コードエディタに戻り、以下のコードを貼り付け
  4. 保存(Ctrl/Cmd + S)
  5. シートで =GPT(A1, "要約して") と入力(初回は権限承認ダイアログが出るので許可)
function GPT(text, instruction) {
  const apiKey = PropertiesService.getScriptProperties().getProperty('OPENAI_API_KEY');
  const url = 'https://api.openai.com/v1/chat/completions';
  const payload = {
    model: 'gpt-4o-mini',
    messages: [
      {role: 'system', content: instruction},
      {role: 'user', content: text}
    ]
  };
  const response = UrlFetchApp.fetch(url, {
    method: 'post',
    contentType: 'application/json',
    headers: {Authorization: 'Bearer ' + apiKey},
    payload: JSON.stringify(payload),
    muteHttpExceptions: true
  });
  if (response.getResponseCode() !== 200) return 'ERROR: ' + response.getContentText();
  return JSON.parse(response.getContentText()).choices[0].message.content;
}

これでセルに =GPT(A2, "英訳して") と書くだけで翻訳されます。

注意: GAS のカスタム関数は1回30秒の実行時間制限があります。極端に長い文章を渡すとタイムアウトするので、必要に応じてバッチ処理(後述)に切り替えてください。

=GPT() の実用例10選

用途 セルに書く式
英訳 =GPT(A2, "自然な英語に翻訳")
要約(50字) =GPT(A2, "50字以内で要約")
カテゴリ分類 =GPT(A2, "次のどれか: 食品/家電/書籍/その他")
感情分析 =GPT(A2, "ポジティブ/ネガティブ/中立で判定")
箇条書き化 =GPT(A2, "重要点を箇条書きに")
キーワード抽出 =GPT(A2, "重要キーワードを3つだけ抽出")
正規化(住所等) =GPT(A2, "都道府県名で始まる正式表記に")
難易度判定 =GPT(A2, "小学生/中学生/高校生/大人 のどれ向け文章か")
SQL生成 =GPT(A2, "PostgreSQL の SELECT 文に変換")
メール返信文 =GPT(A2, "丁寧な日本語ビジネスメール返信")

営業リストの「サービス内容」列に =GPT(B2, "30字で要約") を貼り付けて下フィルすれば、1000件の要約が10分前後で終わります。

コスト試算(現実的な数字)

gpt-4o-mini の現行価格(input $0.15 / 1M tokens、output $0.60 / 1M tokens)で、1行あたり入力50 tokens・出力30 tokensを想定した試算:

処理量 概算コスト
100行(短文) 約¥3〜5
1,000行(短文) 約¥30〜50
10,000行(短文) 約¥300〜500
1,000行(長文 500 tokens入力) 約¥150〜200

長文を扱う場合は、gpt-4oよりgpt-4o-miniで十分な精度の用途がほとんど。月¥1,000以下で業務効率化できる計算です。

Excelじゃ無理だけど Sheets ならできる5つ

1. Gmail と連動した自動処理

「請求書メールが来たら、添付PDF読み取ってシートに自動転記」みたいな処理が、GASひとつで完結します。

function onGmailTrigger() {
  const sheet = SpreadsheetApp.getActive().getSheetByName('受信ログ');
  if (!sheet) throw new Error('「受信ログ」シートが見つかりません');
  const threads = GmailApp.search('subject:請求書 newer_than:1d');
  threads.forEach(thread => {
    const message = thread.getMessages()[0];
    sheet.appendRow([message.getDate(), message.getSubject(), message.getFrom()]);
  });
}

※ シート名は実際のシート名と完全一致させてください(全角スペース等のタイプミスでエラー)。

2. Web スクレイピング

=IMPORTXML() 関数や GAS の UrlFetchApp でWebデータ取得が可能。ただし IMPORTXML は不安定で、頻繁に #N/A を返すことで有名です。重要なデータ取得は GAS の UrlFetchApp でコード書いた方が安定します。

3. リアルタイム共同編集

これは言うまでもなくSheetsの圧勝。Excel for the web も進化してるけど、共有リンクの即時性は Sheets が上。

4. 画像URLから内容認識(GPT-4o系 Vision)

商品画像の URL を渡して、内容をテキスト化する関数。精度を取るなら gpt-4o、コスト優先なら gpt-4o-mini(両方とも画像入力対応):

function GPT_VISION(imageUrl, instruction) {
  const apiKey = PropertiesService.getScriptProperties().getProperty('OPENAI_API_KEY');
  const payload = {
    model: 'gpt-4o-mini',
    messages: [{
      role: 'user',
      content: [
        {type: 'text', text: instruction},
        {type: 'image_url', image_url: {url: imageUrl}}
      ]
    }]
  };
  const response = UrlFetchApp.fetch('https://api.openai.com/v1/chat/completions', {
    method: 'post',
    contentType: 'application/json',
    headers: {Authorization: 'Bearer ' + apiKey},
    payload: JSON.stringify(payload),
    muteHttpExceptions: true
  });
  if (response.getResponseCode() !== 200) return 'ERROR';
  return JSON.parse(response.getContentText()).choices[0].message.content;
}

商品DBで =GPT_VISION(B2, "色とサイズを抽出") みたいに使えます。

5. 定期実行・自動レポート

「毎朝9時に売上集計してSlackに投稿」みたいな処理を、GASの時間主導トリガーで実現。サーバーレスで完全無料。

大量処理は「時間トリガーで分割」が正解

1,000行を =GPT() で一気に処理すると30秒制限に当たります。バッチ処理は時間トリガーで分割するのが鉄則:

function batchProcessChunk() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const props = PropertiesService.getScriptProperties();
  const startRow = Number(props.getProperty('batch_row') || 2);
  const endRow = Math.min(startRow + 50, 1001); // 1回50行ずつ
  for (let r = startRow; r < endRow; r++) {
    const value = sheet.getRange(r, 1).getValue();
    if (!value) break;
    sheet.getRange(r, 2).setValue(GPT(value, '30字で要約'));
    Utilities.sleep(200);
  }
  if (endRow >= 1001) {
    props.deleteProperty('batch_row');
  } else {
    props.setProperty('batch_row', String(endRow));
  }
}

これを「トリガー」設定で5分間隔の時間主導に設定すれば、6分制限内で 50行 ずつ処理を継続できます。10,000行クラスでも安全。

知らないと損するシート関数5つ

関数 用途
QUERY SQLライクにシートを検索・集計
IMPORTRANGE 他のシートからデータを引っ張る
ARRAYFORMULA 1セルで複数行を一括計算
SPLIT カンマ区切りなどを列に展開
GOOGLETRANSLATE Google翻訳をセル関数で(=GOOGLETRANSLATE(A1, "ja", "en"))

これらと =GPT() を組み合わせると、Excel関数では到達できない領域に踏み込めます。

逆にExcelの方が良い場面

正直に書きます。以下はExcelの方が上です:

  • 数十万行超えの大規模データ処理(Sheetsの上限はセル数1,000万、列数や数式によっては数万行で重く感じる)
  • VBAの既存資産が大量にある会社
  • SUMIFS、INDEX/MATCH等の関数の挙動微差
  • オフライン作業が多い人
  • 金融機関等、Microsoft縛りの企業

あなたが上のどれかに当てはまるなら Microsoft 365 継続でOKです。公式の料金比較ページで再確認を。

失敗パターンとトラブルシュート

カスタム関数の30秒制限

=GPT() がエラーで返る時はだいたいこれ。バッチ処理に切り替えてください。

API キー漏洩

絶対にコード内に直接書かない。必ず PropertiesService に保存。共有スプレッドシートにコードを残しても、APIキーは別保管なので安全。

結果がブレる

同じ入力でも出力が毎回違うのが ChatGPT の特性。安定させたい場合は temperature: 0 をペイロードに追加するとほぼ決定的な出力になります(完全に同一ではない、seed指定併用推奨)。

カスタム関数の初回承認

外部API呼び出しはGASの認可スコープ承認が必要。初回はメニュー「実行」→ GPT 関数を手動実行 → 承認画面で「許可」を選ぶ。これでシートからの呼び出しも動くようになります。

ご家族のIT担当の方へ(発展編)

Sheets × GAS に慣れてきたら、Google Cloud の Vertex AI を試してみてください。GAS から Vertex AI を呼び出せば、Gemini や Claude on Vertex で同じことができて、しかも Google Workspace のドメイン内ならデータを社外に出さない運用が可能。コンプライアンス重視の会社にも導入できます。

さらに同じパイプラインを AppSheet でアプリ化すれば社内ツール化できます。AWS LambdaCloud Functions と組み合わせれば本格的な業務システムの土台に。エンタープライズなら Azure OpenAI Service もあり。

まとめ:Excel卒業の最初の一歩

「Excelで自動化」と検索すると Power Automate の記事ばかり出ますが、個人や小規模チームには Sheets + GAS の方が現実的です。

  • 無料(GAS本体)
  • 環境構築不要
  • ブラウザだけで完結
  • ChatGPT/Claude/Gemini との連携が簡単
  • 1000行処理が月¥30〜50

まずは無料の Google アカウントで GAS を開いてみる。それだけで世界が変わります。

合わせて読みたい関連記事

関連:

タイトルとURLをコピーしました