rex0220 計算式プラグインの使い方をGPTsに学習させてみる（その２２）Q&A で学習

GPTs に問題と解答を作ってもらい、間違っている個所を訂正していくことで正答率を上げていく。

# 概要

[rex0220 計算式プラグインの使い方をGPTsに学習させてみる（その２１）まとめ](https://qiita.com/rex0220/items/8e81e955a5a528fca185)を書きましたが、まだまだ問題が残っていますので、Q&A での学習を追加します。

行き当たりばったりに使用例を学習させても効率が悪いので、GPTs に問題と解答を作ってもらい、間違っている個所を訂正していくことで正答率を上げたい。
Q&A を１０～３０個程度作成し、チェックする。

- 文字列、配列、テーブル、正規表現などの例題
- テーブル集計の例題

![2023-12-02_01h49_31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/2912c55c-b624-eba8-38bb-4387a44c9f78.png)


# 文字列の Q&A

文字列、配列、テーブル、正規表現などのシンプルな問題と解答をチェックします。

>計算式プラグインの問題集をマークダウン型式で作りたい
文字列に関する計算式の問題と解答を30個作って
例
1.文字列 "Hello" と "World" を連結して一つの文字列を作るにはどうすればよいですか？
解答: "Hello" & "World"
 -> "HelloWorld"
1.文字列 "2023" の最初の2文字を取得するにはどうすればよいですか？
解答: LEFT("2023", 2)
 -> "20"


1. 文字列 "Hello" と "World" を連結して一つの文字列を作るにはどうすればよいですか？
   解答: "Hello" & "World"

2. 文字列 "2023" の最初の2文字を取得するにはどうすればよいですか？
   解答: LEFT("2023", 2)

3. 文字列 "example@test.com" から "@" の位置を見つけるにはどうすればよいですか？
   解答: FIND("example@test.com", "@")

4. 文字列 "abcdefgh" から "cd" を "xy" に置換するにはどうすればよいですか？
   解答: REPLACE("abcdefgh", "cd", "xy")

5. 文字列 "12345" の各文字を逆順にするにはどうすればよいですか？
   解答: REVERSE("12345")

6. 文字列 "apple, orange, banana" から "orange" という単語を取り除くにはどうすればよいですか？
   解答: REPLACE("apple, orange, banana", "orange, ", "")

7. 文字列 "one,two,three" をカンマで分割して配列にするにはどうすればよいですか？
   解答: SPLIT("one,two,three", ",")

8. 文字列 "ABCDE" の文字数を数えるにはどうすればよいですか？
   **解答: LEN("ABCDE")**
   **正解: LENGTH("ABCDE")**

9. 文字列 "Learning is fun" に "Learning" が含まれているかどうかを判定するにはどうすればよいですか？
   **解答: CONTAINS("Learning is fun", "Learning")**
   **正解: TEST("Learning is fun", "Learning")**

10. 文字列 "Hello World" の "World" を "kintone" に置換し、さらに全て大文字に変換するにはどうすればよいですか？
    解答: UPPER(REPLACE("Hello World", "World", "kintone"))

11. 文字列 "123-456-7890" から数字のみを抽出するにはどうすればよいですか？
    **解答: REGEX_REPLACE("123-456-7890", "[^0-9]", "")**
    **正解: REPLACERE("123-456-7890", "[^0-9]", "g", "")**

12. 文字列 "This is a test." の "test" の前に "not a " を挿入するにはどうすればよいですか？
    解答: REPLACE("This is a test.", "test", "not a test")

13. 文字列 "Hello" と "World" を空白を挟んで連結するにはどうすればよいですか？
    解答: "Hello" & " " & "World"

14. 文字列 "abcdefg" から "cde" を取り除くにはどうすればよいですか？
    解答: REPLACE("abcdefg", "cde", "")

15. 文字列 "I am learning kintone!" から "kintone" を取得するにはどうすればよいですか？
    **解答: MID("I am learning kintone!", 14, 7)**
    **正解: MID("I am learning kintone!", 15, 7)**

16. 文字列 "2023/01/01" を "20230101" の形式に変換するにはどうすればよいですか？
    **解答: REPLACE("2023/01/01", "/", "")**
    **回答: REPLACEALL("2023/01/01", "/", "")**

17. 文字列 "username@example.com" からドメイン部分 "example.com" を取得するにはどうすればよいですか？
    **解答: RIGHT("username@example.com", LEN("username@example.com") - FIND("@", "username@example.com"))**
    **正解: RIGHT("username@example.com", LENGTH("username@example.com") - FIND("username@example.com","@")-1)**
    **正解: REPLACERE("username@example.com", "^.*@", "")**

18. 文字列 "This is a long sentence." の中に "short" という単語が含まれているかどうかを判定するにはどうすればよいですか？
    **解答: CONTAINS("This is a long sentence.", "short")**
    **正解: TEST("This is a long sentence.", "short")**

19. 文字列 "Hello World!" の "Hello" を "Hi" に置換し、さらに "!!!" を追加するにはどうすればよいですか？
    解答: REPLACE("Hello World!", "Hello", "Hi") & "!!!"

20. 文字列 "2023-04-01" の年("2023")、月("04")、日("01")をそれぞれ取得するにはどうすればよいですか？
    解答: LEFT("2023-04-01", 4), MID("2023-04-01", 6, 2), RIGHT("2023-04-01", 2)

21. 文字列 "Hello" を10回繰り返して連結するにはどうすればよいですか？
    解答: REPEAT("Hello", 10)

22. 文字列 "hello" の各文字を大文字に変換するにはどうすればよいですか？
    解答: UPPER("hello")

23. 文字列 "ABCDE" から "BCD" を抽出するにはどうすればよいですか？
    解答: MID("ABCDE", 2, 3)

24. 文字列 "Item 001: $10" から金額 "10" を取得するにはどうすればよいですか？
    **解答: RIGHT("Item 001: \\$10", LEN("Item 001: \\$10") - FIND("$", "Item 001: \\$10"))**
    **正解: RIGHT("Item 001: \\$10", LENGTH("Item 001: \\$10") - FIND("Item 001: \\$10", "$")-1)**
    **正解: REPLACERE("Item 001: \\$10", "^.*\\\\$", "")**

25. 文字列 "apple" と "banana" を連結し、間に " and " を挿入するにはどうすればよいですか？
    解答: "apple" & " and " & "banana"

26. 文字列 "2023-04-15" から "-" を除去し、年月日をそれぞれ抽出するにはどうすればよいですか？
    解答: LEFT(REPLACE("2023-04-15", "-", ""), 4), MID(REPLACE("2023-04-15", "-", ""), 5, 2), RIGHT(REPLACE("2023-04-15", "-", ""), 2)

27. 文字列 "First Middle Last" から "Middle" を取得するにはどうすればよいですか？
    **解答: TRIM(MID("First Middle Last", FIND(" ", "First Middle Last") + 1, FIND(" ", "First Middle Last", FIND(" ", "First Middle Last") + 1) - FIND(" ", "First Middle Last")))**
    **正解: TRIM(MID("First Middle Last", FIND("First Middle Last"," ") + 1, FIND("First Middle Last", " ", FIND("First Middle Last"," ") + 1) - FIND("First Middle Last"," ")))**

28. 文字列 "ABCDE" の "BC" を "XYZ" に置換するにはどうすればよいですか？
    解答: REPLACE("ABCDE", "BC", "XYZ")

29. 文字列 "Hello World!" の "World" を "Everyone" に置換し、全体を小文字に変換するにはどうすればよいですか？
    解答: LOWER(REPLACE("Hello World!", "World", "Everyone"))

30. 文字列 "2023年01月01日" から "年"、"月"、"日" を取り除いて "20230101" の形式に変換するにはどうすればよいですか？
    解答: REPLACE(REPLACE(REPLACE("2023年01月01日", "年", ""), "月", ""), "日", "")


# テーブル集計の Q&A

テーブルの項目や選択肢などを与えると、問題や解答にも反映されます。

>テーブル集計に関する計算式の問題と解答を10個作って
ドロップダウンの選択肢を a,b,c とします
数量、単価、金額をもっています。
計算式プラグインの問題集をマークダウン型式で作りたい
例
```
1.文字列 "Hello" と "World" を連結して一つの文字列を作るにはどうすればよいですか？
解答: "Hello" & "World"
 -> "HelloWorld"
1.文字列 "2023" の最初の2文字を取得するにはどうすればよいですか？
解答: LEFT("2023", 2)
 -> "20"
```

了解しました。ドロップダウン項目に 'a', 'b', 'c' があるテーブルで、数量と単価、金額を用いた計算式プラグインの問題と解答をマークダウン形式で10個作成します。ここでは、ドロップダウンを ドロップダウンT、数量を 数量T、単価を 単価T、金額を 金額T と仮定して問題を作成します。

```
1. テーブル内でドロップダウンが 'a' の行の数量を合計するにはどうすればよいですか？
解答: SUM(IF(ドロップダウンT="a", 数量T, 0))
 -> 'a' の行の数量の合計値

2. テーブル内のすべての行の単価の平均を求めるにはどうすればよいですか？
解答: AVG(単価T)
 -> すべての行の単価の平均値

3. ドロップダウンが 'b' で、数量が 5 以上の行の金額の最大値を求めるにはどうすればよいですか？
解答: MAX(IF(ドロップダウンT="b" AND 数量T>=5, 金額T, 0))
 -> 'b' で数量が 5 以上の行の金額の最大値

4. ドロップダウンが 'c' の行の数量を 3 倍して合計するにはどうすればよいですか？
解答: SUM(IF(ドロップダウンT="c", 数量T*3, 0))
 -> 'c' の行の数量を 3 倍した合計値

5. すべての行の単価と数量を掛け合わせた値を合計するにはどうすればよいですか？
解答: SUM(単価T * 数量T)
 -> すべての行の単価と数量の積の合計値

6. ドロップダウンが 'a' または 'b' の行の金額を合計するにはどうすればよいですか？
解答: SUM(IF(IN(ドロップダウンT, "a", "b"), 金額T, 0))
 -> 'a' または 'b' の行の金額の合計値

7. テーブル内で最も高い単価を持つ行の数量を取得するにはどうすればよいですか？
NG 解答: SUBTABLE(数量T, MAX_STR(単価T))
 -> 最も高い単価を持つ行の数量

8. ドロップダウンが 'c' で最も低い金額を持つ行の単価を取得するにはどうすればよいですか？
NG 解答: SUBTABLE(単価T, MIN_STR(IF(ドロップダウンT="c", 金額T, "")))
 -> 'c' で最も低い金額を持つ行の単価

9. すべての行の金額の総和を求めるにはどうすればよいですか？
解答: SUM(金額T)
 -> すべての行の金額の総和

10. ドロップダウンが 'b' の行の単価を 10% 増やして合計するにはどうすればよいですか？
解答: SUM(IF(ドロップダウンT="b", 単価T * 1.1, 0))
 -> 'b' の行の単価を 10% 増やした合計値
```