7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

マウスを1度も使わずに全体シフトの入力方法をChatGPTに教えてもらった。

Last updated at Posted at 2024-10-23

選ばれたのはGAS(Goggle Apps Script)でした。

こんにちは、いらっしゃいませ!
毎月のシフトの作成に悩まされているスーパーの店員の大橋です。

今回は、少し背伸びをしてGASのコードをChatGPTに教えてもらいながら今後のシフト作成を少しでも楽にする第一歩になります。

私のようなパソコンが苦手な方でも無料お手軽に作れるので、目に留まったら一度試してみてはいかがでしょうか?

ちなみに私のレベルは・・・・・
休日のところと1つ1つ打ち込んでいたり、連休のところはコピー貼り付けで作っていた残業製造機ですので、ご了承ください・・・・

完成したもの

用意するツール

Google Apps Script
Google Spread Sheetに落としたシフト表
ChatGPT   

設定までの流れ

1.使用するシフトの用意

用意できましたら、それをGoogle Spread Sheetに入れてください。

入れ方はこちらの記事を参考にどうぞ
https://allabout.co.jp/gm/gc/486414/

シート.png

まずは、ここの拡張機能を押します。

スクリーンショット 2024-10-23 133726.png

AppsScriptこちらを押してください。

image.png
ここまでいきましたら次はChatGPTを使います。

拡張機能が出ない場合はこちらの記事をどうぞ。

2.出番ですよChatGPT先生

それではコードをお願いしていきましょう。
image.png
私がお願いしたらそれ用のコードを作ってくれます!
今回は、こういう質問
スプレッドシート選択したセルをクリックで〇をつけたい。
マウス使わないって言ったじゃんって思っている方、ちゃんと説明いたします。
最初はマウスでクリックして〇をつけたり消したりした方が速いって思ったからなんです。

この灰色で囲まれたコードの右上 コードをコピーする をクリック

image.png
コピーしたら先ほどの AppsScript に貼り付けます。
貼り付けたら丁度コードの真上にある プロジェクトを保存 という
フロッピーディスクのマークをクリック。
そうしたら、▷実行 をクリック

image.png
あれ?エラーが起きてる・・・・・
でも大丈夫!

image.png
このエラーをコピーして・・・
ChatGPTに貼り付ける!

image.png
そうすると新しいコードに書き換えてくれるのでこれをまたコピーして
貼り付ける!

ただし!前回のコードが残ったままになっていますのでそれは、消してから貼り付けましょう!

image.png

初めてGASを利用する場合、「このアプリはGoogleでは確認されていません」という文言が出てきますので「詳細」を選択し、左下の 「安全ではないページ]」をクリックして許可をすれば警告文がなくなります。

それでは実際にシートに戻って動作確認をしてみましょう。

image.png
あれ何も動かない??この場合は

image.png

左のトリガーの設定ができていない場合が多いんだそうです。実際ここでつまづきました。
それでは、設定していきましょう。まずは、右下の + トリガを追加 をクリック

image.png

この設定にしてください。

スクリーンショット 2024-10-23 145906.png
よしこれで・・・・だいじょばない。。。。プロジェクトに戻って原因を見てみましょう。

image.png
今度は左の実行数を見てみると何かが失敗しています。
(1番右のステータスの部分ですね。)

image.png

このエラーも先ほど同様ChatGPTに送ってあげましょう。

image.png
エラーが消えます。
ここで消えない場合 エラーをコピー してChatGPTに貼り付けてコードを何回も書き直しさせましょう。

スクリーンショット 2024-10-23 145906.png
ただ依然として言うこと聞いてくれません。

image.png
A以外の文字を置き換える?
いやいや全ての文字を置き換えてくれ・・・・・ChatGPTに文句言ったら返ってきました。

function onEdit(e) {
  if (!e) return; // 手動実行時には何もしない

  var range = e.range; // 編集されたセルの範囲を取得
  var sheet = range.getSheet();

  // 対象の範囲を指定
  var targetRange = sheet.getRange("C5:AF24");

  // 対象範囲内かを確認
  if (isCellInRange(range, targetRange)) {
    range.setValue('〇'); // すべての編集内容を〇に置き換え
  }
}

// セルが範囲内にあるか確認する関数
function isCellInRange(range, targetRange) {
  var targetRowStart = targetRange.getRow();
  var targetRowEnd = targetRange.getLastRow();
  var targetColumnStart = targetRange.getColumn();
  var targetColumnEnd = targetRange.getLastColumn();
  
  var editedRow = range.getRow();
  var editedColumn = range.getColumn();
  
  // 編集されたセルが範囲内にあるかを確認
  return (editedRow >= targetRowStart && editedRow <= targetRowEnd &&
          editedColumn >= targetColumnStart && editedColumn <= targetColumnEnd);
}

これを張り付けました。

image.png
お!動いた!動いた! やっと動いたわ。。。
ただ感動したのもつかの間・・・・・
あれ?バックスペースキーを押しても消えない・・・・なぜだ?
消えたと思ったらまた出てくる・・・・・
ここは、何回もChatGPTとやり取りしたんですが結論!
バックスペースキー も押すと文字としてカウントされてしまうことがわかりました。

image.png
これで・・・頼む・・・・

image.png
お!お!キタ━━━━(゚∀゚)━━━━!!
どの文字押そうが全て〇に代わる!バックスペースキーを押しても出現しない!

もう少しいろいろ試してみました。
image.png

何をしたいかというと

スクリーンショット 2024-10-23 145906.png
私が今回練習用に使用したシフト表はAF列までAG列は基本触らないところです。
なので、ここでEnterキーを押せば次の人のところに自動でカーソルが行くようにしてみたといううわけです。
これでTabキーで横移動しながら休日のところに適当な文字を入力しても〇表記になりEnterキーを押せば次の段に行くためマウスを使わないでシフトの一覧入力が可能になりました。
本当はクリック形式で〇を表示できればと思ったんですがChatGPTの返答は、クリックだけでアクションはできないそうです。なんどやってもチェックボックスの方へ誘導させられました。
もしやり方ご存じの方いらっしゃいましたらご教授お願いいたします。

3.最終的に出来上がったコード

function onEdit(e) {
  if (!e) return; // eが存在しない場合は終了

  var range = e.range; // 編集されたセルの範囲を取得
  var sheet = e.source.getActiveSheet(); // 編集されたシートを取得

  // 許可された範囲を定義 (C5:AF24)
  var allowedRange = sheet.getRange("C5:AF24");

  // 編集されたセルの行と列を取得
  var row = range.getRow();
  var col = range.getColumn();

  // 許可された範囲の行と列の境界を取得
  var allowedRowStart = allowedRange.getRow();
  var allowedColStart = allowedRange.getColumn();
  var allowedRowEnd = allowedRowStart + allowedRange.getNumRows() - 1;
  var allowedColEnd = allowedColStart + allowedRange.getNumColumns() - 1;

  // 編集されたセルが許可された範囲内にあるか確認
  if (row >= allowedRowStart && row <= allowedRowEnd && col >= allowedColStart && col <= allowedColEnd) {
    if (range.getNumRows() === 1 && range.getNumColumns() === 1) { // 編集された範囲が1セルのみの場合
      var currentValue = range.getValue();

      // セルが空になった場合は何もしない
      if (currentValue === "") {
        return; // セルが空の時は処理を終了
      }

      // トグル:現在の値が「〇」なら空に、そうでなければ「〇」にする
      if (currentValue === "〇") {
        range.setValue(""); // セルの内容を空にする
      } else {
        range.setValue("〇"); // セルの内容を「〇」にする
      }

      // 行の最終列(AF列)に到達した場合、次の行のC列に移動
      if (col === allowedColEnd) {
        var nextRow = row + 1; // 次の行を計算
        if (nextRow <= allowedRowEnd) {
          sheet.getRange(nextRow, allowedColStart).activate(); // 次の行のC列に移動
        }
      }
    }
  }
}

大変だったところ

とにかくChatGPTへの指示ですね。新入社員に仕事を教える感覚に近いと思います。
具体的に具体的に要望を上げなければ、どこかしらでエラーが出てしまいます。
あとは、根気との戦いです。できないんじゃないかと途中で投げ出さずに目的地までたどり着くことが
いいもの作ることへつながったんだと思います。

ChatGPTに触れてみて

すごい便利!いまだどういう原理でこのコードが動いているのかわからないのですが納得のいくものが作れた喜びがとても大きいです。レベルUPに何回も戦うんじゃなくて「ふしぎなあめ」を使ったような感覚です。
また、GAS、これがとにかく便利!次はPDFから、いろいろ抜き出せないか、ChatGPTとともに挑戦してみようと思います。

7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?