rex0220 計算式プラグイン テーブル内商品カテゴリー別番号付与（GPTs版）

計算式プラグインで、テーブル内商品カテゴリー別番号を付与するしくみを GPTs に作ってもらいます。

# 概要

[rex0220 計算式プラグインでテーブル内項目の値別に番号付与](https://qiita.com/rex0220/items/7a91b8cdf8c2c253e7f8)　と同じようなしくみを GPTs で作ってもらいます。

- GPTs の URL
[rex0220 計算式プラグインの使い方](https://chat.openai.com/g/g-wvbi2Ah1R-rex0220-ji-suan-shi-puraguinnoshi-ifang)

GPTs は、[計算式プラグインの使い方をGPTsに学習させてみる](https://qiita.com/rex0220/items/f544263cb49005cf3a62)　で作成したフォルトンです。

学習した内容で、かなり効率的に計算式を組み立てられます。

![2023-12-09_21h57_30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/8a953030-86cb-9edb-8d76-489f3fa6ee2e.png)


# アプリ画面

商品カテゴリーにドロップダウン項目で、野菜・果物・肉・魚の選択肢を持っています。

![2023-12-09_20h49_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/eec21c5b-eb0b-2eef-da0d-27c10f8db1fe.png)

# GPTs によって作成された計算式
最終的に出来上がった計算式です。
自分で計算式を作るより、計算式やコメントもわかりやすくなりました。

```.js
// 作業用配列
TARRAY(商品カテゴリー)

// 番号付与
LET(
  現カテ, 商品カテゴリー, // 現在のカテゴリー
  カテ一覧, SPLIT(カテゴリー配列, ","), // 全カテゴリー配列
  行位置, ROWNO(テーブル), // 行番号
  現カテ一覧, SLICE(カテ一覧, 0, 行位置), // 現行までのカテゴリー
  同カテ抽出, ARRAY_FIL(現カテ一覧, x, x = 現カテ), // 同カテ抽出
  回数, ARRAY_COUNT(同カテ抽出) + 1, // 出現回数+1
  現カテ & ": " & 回数 // 文字列組合せ
)
```

# 計算式プラグイン設定画面
GPTs によって作成された計算式をプラグイン設定で設定します。

![2023-12-09_21h08_45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/d1d65cef-139b-9a12-e07e-025ca488708e.png)

# フォルトンへ計算式を作成してもらう依頼

## 1回目

最初は、とりあえずやりたいことの概要を書いて依頼します。
計算式には、コメントが付けられて、その意味が分かります。

>テーブル内項目の商品カテゴリー別に番号を付与するには？
テーブルに商品カテゴリー、商品カテゴリー別番号、金額を持ちます。
商品カテゴリー別番号は、商品カテゴリーと ": " 、番号としてください

![2023-12-09_20h54_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/a9bb226b-dc8e-5aa3-558b-01fbf7da5047.png)

## 2回目

ちょっと英単語が並んでいて、分かりにくいので変数名を日本語にしてもらいます。

>変数名を日本語にしてください

![2023-12-09_20h55_13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/7ee66ee0-e3d8-27c6-9a00-a3676fcfc7c7.png)

## 3回目

作ってもらった計算式をプラグインに設定して実行してみました。
商品カテゴリー別番号が、0 からの連番になっていますので直してもらいます。
訂正後の計算式で、無事に商品カテゴリー別番号は、1 からの連番になりました。

>商品カテゴリー別番号が 0 からになります。１からの番号にしてください

![2023-12-09_20h58_35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/2acae803-8b4c-96c6-1b2e-0566b08aa4ab.png)

## 4回目

ちょっと計算式が横に長く、プラグイン設定画面では分かりにくくなっていますので、コメントを短くしてもらいます。
回答結果は、コメントだけでなく変数名も短くなり、見やすくなりました。

>計算式のコメントを１０文字以内にして

![2023-12-09_21h01_36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/ff780f26-2a46-5963-30d5-18e9b182edd4.png)

# 今回作成した計算式と同じような学習用テキスト

今回の元ネタは、下記のように区分別に番号を付与する例です。
沢山の学習資料の中から、適用できるものを探しだして、フィールドコードや変数名を課題に合わせて分かりやすいように変更し、回答してくれました。
元は計算式のコメントを付けていないのですが、適切なコメントを付けてくれました。

```
# テーブル内項目の値別に番号付与する例
計算式プラグインでテーブル内項目の値別に番号を付与する例です。

・アプリの項目設定
テーブル内に、数値項目で行番号（数値）、区分別番号（文字列）、区分（ドロップダウン）を配置します。
区分には、"A","B","C" の選択肢を設定する
値別番号付与のための作業用項目として、「連結」（文字列項目）を追加。

・テーブル内項目の区分T1の値別に番号付与する
区分別番号に区分の値別に、番号を付加します。
テーブルの行毎に行全体の文字列連結を行うと、行数が増えると処理時間が増大するので、一旦全体の文字列を作成しておきます。

「連結」の計算式： TARRAY(区分)
※文字列項目に TARRAY関数を指定すると、処理結果の配列をカンマ「,」区切りの文字列に変換します。
※最初に計算させるためにランクに「1」を指定します。

「行番号」の計算式：ROWNO(行番号)+1

「区分別番号」の計算式： 
LET(
  kubun, 区分,
  wa, SPLIT(連結,","),
  pos, ROWNO(テーブル),
  sa, SLICE(wa,0,pos),
  fa, ARRAY_FIL(sa,x,x=kubun),
  count, ARRAY_COUNT(fa)+1,
  kubun & count 
)
```

# まとめ

学習させた課題の計算式については、かなり応用して回答してくれます。
また自分で作った計算式を、GPTs に精査してもらうのもよさそうです。