組み分け帽子のような一瞬でチーム分けができる機能が欲しい！！ChatGPTにチーム分けのマクロのコードを考えてもらった

皆さん、こんにちは。
私は小売業の人事部で働いています。

先日話題の**ChatGPT**を学ぶ機会がありました。
色々と会話をして楽しむツールだと思っていたのですが、自分一人ではできないプログラミングのコードなども作成してくれることを知りました。

そこで日々の業務で楽にできないかな～と思ってる業務をお手伝いしてもらいました。

## 従業員同士の会話を生みたい
私の会社はテレワークを推奨しており従業員の7割が自宅で業務をしています。
出社していればなんてことない雑談をする機会もありますが、1日誰とも会話をせずに終わるという声も聞きます。
個人的な意見としては、たまにはテレワークも良いですが同じ状態が1か月続くと寂しいなぁと思います。
特に転職したての方は会社のことも分からないので孤立してしまいがちです。

従業員が生き生きと働ける環境を整えるのが人事部のミッションです。
一時だけでも業務から離れ、従業員同士が会話をできるミーティングを開催しようということになりました。

### 地味に大変なチーム分け作業
参加者を募り開催日時を設定しますが、意外と時間のかかる作業が**参加者のチーム分け**です。

「あれ、この人とこの人は同じ部署だ」
「前回も同じ組み合わせだった気がする」
「チーム分けの優先順位ってなんだ？」と作業するうちにプチパニックです。

そこで、まずはChatGPTにグループ分けに必要な概念を聞いてみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482672/842c03dd-2e34-1410-dce6-420ecf650ec3.png)

なるほど、なるほど。
スキルや専門知識が乖離しすぎず、メンバー同士の相性やコミュニケーションのとりやすさを考慮してチームを組む必要があるわけですね。

それではここからはChatGPTに手伝ってもらいVBAを作成してみます。

## 使用ツール
[ChatGPT](https://business.nikkei.com/atcl/gen/19/00081/030800519/)
Excel

## やりたかったこと
ミーティングの参加申し込みは、MicrosoftのFormsを利用します。
話したいテーマを決め、参加できる日時を選択するスタイルです。
今回は「①住まいについて（賃貸・購入/マンション・戸建て）こだわりポイントなど」
「②夏休みの過ごし方」「③夏バテ予防」の３テーマでした。

**申し込み画面**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482672/ca076835-cace-0ffb-846a-6dfd8e7827b8.png)

**アンケートの集計データを抽出**するとこんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482672/a5900ad2-85b9-608d-bf44-2195c49048b2.png)


## 作成したもの
https://twitter.com/amk193611/status/1691819570347090174

### ChatGPTへのお願い文章（プロンプト）
ChatGPTにお願いしてみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482672/5210b6a0-649c-95cc-ac81-42c3275dd890.png)

:::note info
このときChatGPTに基本データとなるExcelの状態を描写するとうまく理解してくれました。
（社員名簿のデータであることを伝えたり、項目名や数を伝えると学習してくれます）
:::

### ChatGPTが作ってくれたVBAのコード
```ruby:
Sub CopyData()
    Dim srcSheet As Worksheet
    Dim destSheet As Worksheet
    Dim srcLastRow As Long
    Dim destLastRow As Long
    Dim i As Long

    ' ソースシートとデスティネーション（コピー先）シートを設定
    Set srcSheet = ThisWorkbook.Sheets("Sheet1") ' Sheet1 を適切なシート名に変更する必要があります
    Set destSheet = ThisWorkbook.Sheets.Add ' 新しいシートを作成します

    srcLastRow = srcSheet.Cells(srcSheet.Rows.Count, "A").End(xlUp).Row

    destLastRow = 1 ' コピー先の行番号を初期化

    ' 項目行をコピー
    srcSheet.Rows(1).Copy Destination:=destSheet.Cells(1, 1)
    destLastRow = destLastRow + 1

    ' データをコピーしていく
    For i = 2 To srcLastRow ' 2行目から開始（1行目はヘッダー）
        If srcSheet.Cells(i, 6).Value <> "不参加" Then ' F列の値が「不参加」でない場合にコピー
            srcSheet.Rows(i).Copy Destination:=destSheet.Cells(destLastRow, 1)
            destLastRow = destLastRow + 1 ' コピー先行番号を更新
        End If
    Next i
End Sub
```
データ上のノイズになる**不参加**という言葉を取り除くVBAを作成してもらいました。

:::note info
ちなみにVBAをどのように起動させるかもChatGPTが教えてくれました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482672/c7cfe0f7-f5d1-27c6-6d1e-ac2625e23cde.png)

:::


## 今回できなかったこと
今回の目的はチームの組み分けを行うVBAを作成することです。
上記のノイズ（データ上の不要要素）を取り除くところまでは順調でしたが、
肝心のチーム分けをお願いすると、予想とは違うデータが作成されてしまいました。
エラーの内容について質問して、再度作成してくれたVBAを試しても上手くいかない・・・。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482672/7bb7298b-1361-8aff-2fad-dd9eed119ceb.png)

最終的にはプロフェッショナルな開発者に相談することをおすすめされてしまいました。
ここまで頑張ってくれたのに、力を発揮させてあげられなかったことに胸が痛みます・・・。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482672/c712253f-8b8f-7124-1049-814b4357e19a.png)

## まとめ
今回は、データの加工の過程で不要要素を取り除くコードは作成できましたが、本来の目的であるチーム分けまではたどり着くことができませんでした。
どのような文章を入力すると的確な動きをしてくれやすいのかが掴みきれなかったことが原因だと思います。
今後は指示する言葉の語彙やパターンを増やしたいと思います。

しかし、希望する内容を文章で理解してくれて、瞬時にコードに落とし込んでくれるChatGPTは文系の強い味方ですね！
使い方さえ覚えればもっと精度が高まると思います。
もっとChatGPTと仲良くなるために研究を続けます。