ChatGPTでGASの練習問題を作ってもらって、自作自演する
GAS(ガス)とはGoogle Apps Scriptの略称で、Googleが提供するプログラミング言語です。スプレッドシートや、 GmailやGoogleカレンダーなどと連携させたり、データ処理したりできます。
目次
まず練習問題の作成を依頼
GASの練習問題を作ってください。
在庫管理の問題をお願いします。
作成された練習問題
練習問題: GASで在庫管理スクリプトを作成する
背景
あなたは小さなショップの店長です。在庫管理を効率化するために、Googleスプレッドシートを使って在庫データを管理したいと考えています。スプレッドシートには、以下のような構成の在庫リストがあります。
商品ID | 商品名 | 在庫数 | 最低在庫数 | 補充必要 |
---|---|---|---|---|
101 | ノート | 20 | 10 | |
102 | ペン | 5 | 10 | |
103 | 消しゴム | 15 | 5 |
課題
- 在庫データを更新し、「補充必要」列に「はい」または「いいえ」を自動入力するスクリプトを作成してください。
- 条件: 在庫数が最低在庫数未満の場合、「はい」と記入する。
- 新しい在庫を追加するための関数
addStock
を作成してください。- 引数として「商品ID」と「追加する在庫数」を受け取り、該当する商品の在庫数を増加させる。
- スプレッドシート上の「在庫数」列を更新する。
- 在庫が不足している商品のリストを取得し、ログに出力する関数
logLowStockItems
を作成してください。
ステップ
- 新しいGoogleスプレッドシートを作成し、上記の表を作成してください。
- GASエディタを開き、スクリプトを書いて実行してください。
- 作成したスクリプトが正しく動作することを確認してください。
なんとヒントまででる
スプレッドシートにアクセスするために SpreadsheetApp
を使用します。スプレッドシートのデータ範囲を取得するには、getDataRange()
を使います。配列やループを活用してデータを処理しましょう。
サンプルコードの一部まで
ということで 早速正解を教えてもらいます
→この練習問題の正解を教えて下さい
/**
* 在庫の補充ステータスを更新する関数
*/
function updateStockStatus() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const data = sheet.getDataRange().getValues();
for (let i = 1; i < data.length; i++) { // ヘッダー行をスキップ
const stock = data[i][2]; // 在庫数
const minStock = data[i][3]; // 最低在庫数
// 条件に応じて「補充必要」列を更新
if (stock < minStock) {
sheet.getRange(i + 1, 5).setValue("はい"); // 補充必要
} else {
sheet.getRange(i + 1, 5).setValue("いいえ");
}
}
}
/**
* 商品の在庫を追加する関数
* @param {number} productId 商品ID
* @param {number} quantity 追加する在庫数
*/
function addStock(productId, quantity) {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const data = sheet.getDataRange().getValues();
for (let i = 1; i < data.length; i++) { // ヘッダー行をスキップ
if (data[i][0] === productId) { // 商品IDが一致する場合
const currentStock = data[i][2]; // 現在の在庫数
sheet.getRange(i + 1, 3).setValue(currentStock + quantity); // 在庫を更新
break;
}
}
}
/**
* 在庫が不足している商品のリストをログに出力する関数
*/
function logLowStockItems() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const data = sheet.getDataRange().getValues();
const lowStockItems = [];
for (let i = 1; i < data.length; i++) { // ヘッダー行をスキップ
const stock = data[i][2]; // 在庫数
const minStock = data[i][3]; // 最低在庫数
if (stock < minStock) {
lowStockItems.push(data[i][1]); // 商品名をリストに追加
}
}
if (lowStockItems.length > 0) {
Logger.log("不足している商品: " + lowStockItems.join(", "));
} else {
Logger.log("不足している商品はありません。");
}
}
実行結果
・・・在庫数が増えるロジックが入ってないようですね。
コードを作ってもらうにしても、ちゃんとロジックを整理して伝えないと、望むようにはならないものです。
そんなところで