PR

ChatGPTでGASの練習問題を作ってもらって、自作自演する

在庫管理GAS

GAS(ガス)とはGoogle Apps Scriptの略称で、Googleが提供するプログラミング言語です。スプレッドシートや、 GmailやGoogleカレンダーなどと連携させたり、データ処理したりできます。

まず練習問題の作成を依頼

GASの練習問題を作ってください。
在庫管理の問題をお願いします。

作成された練習問題

練習問題: GASで在庫管理スクリプトを作成する

背景

あなたは小さなショップの店長です。在庫管理を効率化するために、Googleスプレッドシートを使って在庫データを管理したいと考えています。スプレッドシートには、以下のような構成の在庫リストがあります。

商品ID商品名在庫数最低在庫数補充必要
101ノート2010
102ペン510
103消しゴム155

課題

  1. 在庫データを更新し、「補充必要」列に「はい」または「いいえ」を自動入力するスクリプトを作成してください。
    • 条件: 在庫数が最低在庫数未満の場合、「はい」と記入する。
  2. 新しい在庫を追加するための関数 addStock を作成してください。
    • 引数として「商品ID」と「追加する在庫数」を受け取り、該当する商品の在庫数を増加させる。
    • スプレッドシート上の「在庫数」列を更新する。
  3. 在庫が不足している商品のリストを取得し、ログに出力する関数 logLowStockItems を作成してください。

ステップ

  1. 新しいGoogleスプレッドシートを作成し、上記の表を作成してください。
  2. GASエディタを開き、スクリプトを書いて実行してください。
  3. 作成したスクリプトが正しく動作することを確認してください。

なんとヒントまででる

スプレッドシートにアクセスするために 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("不足している商品はありません。");
  }
}

実行結果

・・・在庫数が増えるロジックが入ってないようですね。

コードを作ってもらうにしても、ちゃんとロジックを整理して伝えないと、望むようにはならないものです。

そんなところで

PVアクセスランキング にほんブログ村

AI

Posted by tomoyamurakami