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が過去データを読み取り、
「次に入力すべき内容」をリアルタイムでサジェストする仕組みを学びます。
