rex0220 計算式プラグインの使い方をGPTsに学習させてみる（その１４）要件を箇条書きで指定

[rex0220 計算式プラグインの使い方をGPTsに学習させてみる（その１３）誕生日から年齢計算してみる](https://qiita.com/rex0220/items/89bd70a5d50b1531fcdc)の続きです。

要件を箇条書きで指定して、いろいろ試してみた。

# 概要

要件を箇条書きで指定して、計算式を作ります。
詳細を箇条書きにして、応答に問題がある場合は、箇条書きにを訂正や追加要件を加えて、再実行します。
よくありそうな下記の要件を試してみました。

- テーブルの行番号を付与するには？
- 日付項目の２か月前の１０日を計算
- 会社名の「株式会社」の表記を統一
- 誕生日を和暦に変換
- テーブルの旅費を区分毎に集計
- ボタンをクリックして、日付に当日の翌月末をセット

# テーブルの行番号を付与するには？
とりあえず、１行で済むテーブルの行番号
>テーブルの行番号を付与するには？

```テーブルの行番号.js
ROWNO(テーブル名) + 1
```

![2023-11-20_22h56_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/8c9c1b0b-b069-c415-8c86-b47489d489e1.png)

# 日付項目の２か月前の１０日を計算
「以前に学習させた内容が問題ないか」の確認です。問題無し。
[rex0220 計算式プラグインの使い方をGPTsに学習させてみる（その７）誤った計算式の訂正学習](https://qiita.com/rex0220/items/b68659ae87d6c49b1898#%EF%BC%92%E3%81%8B%E6%9C%88%E5%89%8D%E3%81%AE%EF%BC%91%EF%BC%90%E6%97%A5%E3%82%92%E8%A8%88%E7%AE%97%E3%81%9D%E3%81%AE%EF%BC%93)

>日付項目の２か月前の１０日を計算

```２か月前の１０日.js
DATE_ADD(日付, -2, "month", "YYYY-MM-10")
```

![2023-11-21_09h20_25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/69d1e4dc-826c-f794-1f2f-ac4b1e847ffb.png)

# 会社名の「株式会社」の表記を統一
最初は、REPLACE 関数を２回使った計算式だけだったので、正規表現で置換するように追加
計算式プラグインが正規表現に対応しているかどうか、あやふやな認識のようです。
もう少し正規表現の使用例を増やして学習させた方がいいかもしれません。

>会社名の「株式会社」の表記を統一する計算式を作って
・正規表現で、㈱、（株）を「株式会社」に置換

```株式会社の表記を統一.js
REPLACERE(会社名, "㈱|（株）", "株式会社")
```

![2023-11-21_09h45_30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/de1ab222-d872-40c1-3846-3e0faf0a51c4.png)

# 誕生日を和暦に変換
最初の応答では、変数名が分かりにくいので、変数名を日本語に指定してみました。

>誕生日の日付項目を和暦（元号何年何月何日）の表記に変換したい
・LET の変数名は日本語で

```誕生日を和暦に変換.js
LET(
  入力日付, DATE_FORMAT(誕生日), // 誕生日を文字列に変換
  元号, IFS(
    入力日付 >= "2019-05-01", "令和",
    入力日付 >= "1989-01-08", "平成",
    入力日付 >= "1926-12-25", "昭和",
    入力日付 >= "1912-07-30", "大正",
    入力日付 >= "1868-01-25", "明治"
  ),
  元号開始年, IFS(
    入力日付 >= "2019-05-01", "2019-01-01",
    入力日付 >= "1989-01-08", "1989-01-01",
    入力日付 >= "1926-12-25", "1926-01-01",
    入力日付 >= "1912-07-30", "1912-01-01",
    入力日付 >= "1868-01-25", "1868-01-01"
  ),
  和暦年, DATE_DIFF(元号開始年, 入力日付, "years") + 1,
  元号 & 和暦年 & "年" & DATE_FORMAT(入力日付, "M月D日")
)
```

![2023-11-21_09h33_48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/5eee73ab-20fa-9419-9bbd-a5adeb882108.png)

# テーブルの旅費を区分毎に集計
つぎに要件を箇条書きにして、計算式を作ってもらいます。
応答内容をみて、箇条書きの部分は、11 回書き直しています。
※項目の名前や区分の種類等を訂正

![2023-11-21_08h38_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/62fe785e-0fb8-4dfb-c5de-d98087a59cac.png)

>下記の旅費について、区分別に合計を求める計算式を教えて
・テーブルに、当月の旅費を持つ
・テーブル項目として、日付、区分、金額、備考を持つ
・区分は、交通費・宿泊費・その他をドロップダウンで設定
・区分別に金額合計項目を持つ


```旅費を区分毎に集計.js
// 交通費合計:
SUMIF(区分="交通費", 金額)

// 宿泊費合計: 
SUMIF(区分="宿泊費", 金額)

// その他合計: 
SUMIF(区分="その他", 金額)
```

![2023-11-21_08h31_34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/262d3985-3b24-fe9b-130d-524b1686af44.png)

# ボタンをクリックして、日付に当日の翌月末をセット
日付に当日の翌月末をセットとクリアするボタンを作ってみた

![2023-11-21_10h10_55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/5d527f35-715c-6fc8-5e11-e85e01ad0856.png)

>ボタンをクリックして、日付に当日の翌月末をセットする計算式
・スペース項目にボタンを表示
・ボタン名は、翌月末セット
・ボタンクリックで、「日付に当日の翌月末をセット」
・ダイアログ表示はしない
・当日の翌月末の計算は LET 関数を使って


```ボタンをクリックして、日付に当日の翌月末をセット.js
BUTTON(
    "翌月末セット",  // ボタン名
    LET(
        本日, TODAY(), // 本日の日付を取得
        翌月末, DATE_ENDOF(DATE_ADD(本日, 1, "month"), "month"), // 本日の翌月末の日付を計算
        FSET(日付, 翌月末) // 日付項目に翌月末の日付をセット
    )
)
```

>ボタンをクリックして、日付クリアする計算式
・スペース項目にボタンを表示
・ボタン名は、クリア
・ボタンクリックで、日付をクリア
・ダイアログ表示はしない

```ボタンをクリックして、日付をクリア.js
BUTTON(
    "クリア",   // ボタン名
    FSET(日付, "")  // 日付項目をクリア
)
```

![2023-11-21_09h55_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/c1110819-0959-30f6-8729-e2cc1e46583a.png)

![2023-11-21_10h04_42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/4cc400ce-c4e2-10ad-8bed-c39ab38824ba.png)

# まとめ

要件を箇条書きで指定すると、要件の変更・追加の経過はわからなくなりますが、応答の再現性は高くなると思います。
※ただし同じセッションで、要件を変更して要求した場合は、以前の要求が生きている
応答に対して、変更・追加を繰り返す場合は、ちょっとした言葉の違いから応答が大きく変わる場合があります。