見出し画像

GAS学習note:Day9 入力補助と自動入力〜ユーザーが打った瞬間に動く“スマートシート”〜


はじめに

Day8では、ログ管理によって「見守るGAS」を作りました。
Day9では、いよいよ ユーザーが入力した瞬間に動く「反応型GAS」 を作ります。

たとえば、こんな使い方👇

  • 商品名を入力したら、自動で 単価・カテゴリ を補完

  • 日付を入れたら、自動で 曜日 を表示

  • ステータスを変更したら、自動で 背景色 を切り替え

さらに、ChatGPTと組み合わせれば
「説明文を自動生成」や「入力値の表現修正」もできるようになります。


1️⃣ onEdit(e):編集トリガーを使う

GASには「onEdit」という特殊な関数があり、
スプレッドシートが編集されるたびに自動で呼び出されます👇

function onEdit(e) {
  const range = e.range; // 編集されたセル
  const sheet = range.getSheet();

  if (sheet.getName() !== "商品リスト") return; // 対象シート限定

  const row = range.getRow();
  const col = range.getColumn();

  // A列(商品名)が編集されたら動く
  if (col === 1 && row > 1) {
    const productName = range.getValue();
    const data = getProductData(productName);
    if (data) {
      sheet.getRange(row, 2).setValue(data.price);     // 単価
      sheet.getRange(row, 3).setValue(data.category);  // カテゴリ
    }
  }
}

2️⃣ 補完データを関数化する

自動入力のベースとなるデータを関数にまとめておくと便利です👇

function getProductData(name) {
  const master = {
    "Tシャツ": { price: 2500, category: "アパレル" },
    "キャップ": { price: 1800, category: "アクセサリー" },
    "スニーカー": { price: 9800, category: "シューズ" },
  };
  return master[name] || null;
}

💡 これで実現できること

  • ユーザーが「Tシャツ」と入力した瞬間に単価・カテゴリを自動表示

  • 入力補助として、属人化を防ぎ・入力ミスを削減


3️⃣ ChatGPTで「説明文」も自動生成してみる

ここからが生成AIらしいステップです✨

スプレッドシートに商品名を入れたら、
ChatGPTが自動で“商品説明文”を生成する仕組みを作ってみましょう。

※以下は概念的な例(GAS+ChatGPT API連携イメージ)👇

function generateDescription(productName) {
  const url = "https://api.openai.com/v1/chat/completions";
  const token = "YOUR_OPENAI_API_KEY";

  const prompt = `「${productName}」という商品の魅力を、50文字で紹介してください。`;

  const options = {
    method: "post",
    headers: { "Authorization": "Bearer " + token },
    contentType: "application/json",
    payload: JSON.stringify({
      model: "gpt-3.5-turbo",
      messages: [{ role: "user", content: prompt }],
    }),
  };

  const response = UrlFetchApp.fetch(url, options);
  const result = JSON.parse(response.getContentText());
  return result.choices[0].message.content.trim();
}

これを onEdit() の中で呼び出すと👇

if (col === 1 && row > 1) {
  const productName = range.getValue();
  const desc = generateDescription(productName);
  sheet.getRange(row, 4).setValue(desc); // D列に自動生成された説明文
}

💬 例:

商品名単価カテゴリ説明文Tシャツ2500アパレル柔らかく通気性の良い素材で快適な着心地。

これで「打ち込むだけで整うシート」が完成!


4️⃣ ChatGPTとの“改善対話例”

開発中、よくある質問👇

📘 あなた(質問)

ChatGPT、このonEdit関数を動かしたら「TypeError: Cannot read properties of undefined (reading 'range')」って出ました。

🤖 ChatGPT(回答)

そのエラーは「onEditを手動実行した」時に起きます。
onEditはシート編集時に自動的に e オブジェクトを受け取るので、
手動実行すると e.range がundefinedになります。
実際の動作をテストしたいときは、シート上で直接編集してください。

📘 あなた

なるほど、実際に入力してみたらちゃんと動きました!


5️⃣ onEdit の注意点

注意点内容手動実行できないonEdit(e) はシート編集時のみ動くトリガー登録不要名前が「onEdit」であれば自動的に発火複数シートに影響するif (sheet.getName() !== "◯◯") return; で限定する重い処理はNG毎回API通信などを行うと反応が遅くなるChatGPT連携時は制御必須APIキーや実行制限を設けること


6️⃣ AI × 自動補完 で業務を「入力レス」に

ChatGPTとGASを組み合わせることで、
「人が入力する時間」をどんどん減らすことができます。

機能役割例onEdit入力検知ユーザーが打つたびに反応GAS関数自動処理マスタ参照、日付補完ChatGPT表現補助説明文、コメント、自動要約

💡 GASが動き、ChatGPTが言葉を補う。
これが「入力を超える自動化」の第一歩です。


まとめ:Day9で身についた力

Day9では、「入力に反応して動く」GASを学びました。

  • ✅ onEdit(e) でリアルタイム反応

  • ✅ マスタデータを参照して自動補完

  • ✅ ChatGPTを使って説明文を自動生成

  • ✅ 入力補助でミス削減&効率化

💡 Day9のゴール:

“入力するだけで整うスプレッドシート” を作れるようになる!


次回予告(Day10)

Day10では、AIが提案する「入力予測」へ進化します。
ChatGPTが過去データを読み取り、
「次に入力すべき内容」をリアルタイムでサジェストする仕組みを学びます。

いいなと思ったら応援しよう!

この記事が参加している募集