見出し画像

AI下手でもChatGPTを力づくで使ってGASを設計できた話

こんにちは!ペパボに入社して2年目のmonがお送りします。
この記事はPepabo CS Advent Calendar 2023の7日目の記事です。

昨日は、同じチームで働く先輩のなっちょさんがタイトルの破天荒さからは想像つかないめちゃめちゃ今の私に突き刺さる(絶賛評価追い込まれ中)評価についてのアウトプットでした。

パワーワード

翌年の私に再度記事を読むようにリマインド仕込みました。

来年の私へラブレター


さて、やっと本題に入ります。
今年は何を書こうかと思った時に頭に浮かんだのは、chatGPTと仲良くなろうと頑張ったな〜と思い出しました。
なので今年は、AI下手な私でもパワープレイでなんとか理想とするGASを設計できた話を書きます。パワー!!!


何をしたのか

  • Google Apps Script (GAS) を使用して、「SUZURI CSのシフト」というスプレッドシートから特定のシフトデータを別のシートに自動的にコピーできるようにした。

  • 常に最新の状態に保つためにトリガを設定し毎日朝8:00に更新されるようにした

  • 引用元データの氏名と一致する情報をコピペするようにしたから人の増減があっても引用先ファイルにその人の名前を削除・追加するだけで反映されるようになった

自動化しようと思った理由

  • IMPORTRANGE関数がとにかく煩わしかったから

    • 人の増減などがあり引用元のセルが一つずれるだけで反映されなくなる

    • 所属人数✖️1ヶ月分、全てのセルに関数が入っててシートが重くて開きづらい

もっと楽にシフトコピーして最新の状態を保ち、毎月の修正作業を少しでも減らせないか?と考えました。

そうだ!GAS設定すればスクリプトの引用元・先のシート名を変更するだけで修正できるじゃん!
しかも、シートも数式過多で重かったけど軽くなるし一石二鳥〜と思ったのも束の間いかんせんスクリプトが書けない!
そんな知識ないのでGPTに作ってもらうことにしました。

私のchatGPTの前提知識

  • プロンプトってのを書かなきゃあかん

  • 具体的に作成してほしい内容を書かないとあかんらしい

とりあえずchatGPT使ってみた

最初の指示内容

スプレッドシート間で特定のシフト情報をコピー&ペーストするためのスクリプトを作成してください。
条件:
・スプレッドシート間で名前が完全一致している
・名前が完全一致したら引用元の名前に基づきj10~an20の情報をコピー&ペーストしてください

GPTへの指示

結果

  • それっぽいスクリプトができたけど実際にApps scriptに当てはめてみるとエラーできちんと機能せず

  • ファイル名やシート名とか自身が使っているものに変えなければいけなくて大変・変更漏れがあったりした

気づき

  • 最初からファイル名やシート名を指定して作って貰えばいいじゃん

2回目の指示内容

・2023年8月分のシフト情報を持つ「【★】SUZURI CSのシフト2023」の「202308」シートから、「業務担当表シート(SUZURI)」の「★2023/08」シートへ氏名とシフト情報を自動反映。
・j10~i20に記載された氏名に基づき、j10~an20(シフト情報)を反映させる。

GPTへの指示

結果

  • 使えるスクリプトが作成できたぽいけどやっぱりエラーが発生する

  • しかもそのエラー内容がよくわかんないから改善もできない

気づき

  • エラー内容もそのままGPTに伝えてエラーを解消したスクリプトを作成して貰えばいいじゃん

  • エラー内容も原因分析もGPTにやって貰えばいいじゃん

パワーで解決

エラーがでたらそのままエラーごとぶん投げる!
繰り返してったら最後には完成するのでは??(脳筋の考え)

下記のようなエラーが出ました、エラー原因を特定し簡単に説明してください。
また、エラーが出ないようなコードを作成してください。
「Exception: Unexpected error while getting the method or property openById on object SpreadsheetApp.」

GPTへの指示

それ以降3回ほどチャレンジしてはエラーの状況が続きましたが、その都度GPTにエラー内容を伝えてエラー内容の説明とエラーを解消するためのスクリプトを作成してもらいました。

結果作成できたスクリプト

function copyShift() {

  // スクリプトを実行するユーザーの権限でスプレッドシートを開く
  var source_ss = SpreadsheetApp.openById(シートのID);
  var source_sheet = source_ss.getSheetByName('202308');
  
  // アクティブなスプレッドシートを開く
  var target_ss = SpreadsheetApp.openById('シートのID'); // ←getCode()から openById()に変更
  var target_sheet = target_ss.getSheetByName('★202308');
  
  // 名前が一致する行のシフトをコピーする
  for (var i = 10; i <= 20; i++) {
    var name = source_sheet.getRange('I' + i).getValue();
    for (var j = 1; j <= target_sheet.getLastRow(); j++) {
      if (target_sheet.getRange('B' + j).getValue() == name) {
        var shift = source_sheet.getRange('J' + i + ':AN' + i).getValues();
        target_sheet.getRange('C' + j + ':AG' + j).setValues(shift);
        break;
      }
    }
  }
}

そして、シフト反映作業をボタンで反映もできるし、毎日8:00に自動更新されるようにも設定方法もGPTにぶん投げ

- Google Apps Scriptで特定の時間に自動処理(trigger)を設定可能
- 設定方法:
1. Apps Scriptエディタ開く
2. 「編集」>「現在のプロジェクトのトリガー」選択
3. 「トリガーを追加」クリック
4. 実行する関数:「copyShift」
5. イベントソース:「時間主導型」
6. タイプ:「日付ベースのタイマー」時間設定:「8am-9am」
7. 毎日8時に自動実行設定
- スプレッドシートで実行ボタン設定:
1. スプレッドシート開く
2. 「挿入」>「図形」>「シェイプ」でボタン挿入
3. ボタンに「copyShift」関数関連付け
4. ボタンクリックで関数実行

GPTからの回答

自分の理想とするGASの設計をすることができました!パワー!

まとめ

  • GASを作成してもらう時は最初からシート名やファイル名など指示に入れておくと完成したスクリプトをコピペするだけで済む

  • エラーが起きたらとりあえずエラー内容ぶん投げて解決策を提示またはエラーを解消したスクリプトを作成してもらう

  • あとはパワー!

最後に

GPTをまだ使ったことないし難しいと思っているそこのあなた!
ちゃんとしたプロンプトをかけない私でもトライ&エラーを繰り返し理想とするGASの設計をすることができました。
AIがワイワイしている世の中取り残されていかないように、最初はパワープレイでもいいから実際に使用してみてはいかがでしょうか🥳

PS.来年は大谷翔平の話書きたいな〜


明日はECグループのスーパーマンことトムボーさん!!何を書いてくれるのか楽しみ!🎄



この記事が気に入ったらサポートをしてみませんか?