ChatGPTさんを初めて使ってみた

# はじめに
運用業務の中で、１０万件のテーブルの比較をしたい場面に遭遇！
VLOOKUPでやってみたら、この件数だと正常動作しない💦
 以前、ChatGPTでVBAが組めることを小耳にはさんでいたので、見よう見まねでチャレンジ！
 使ったことがない人が、使ってみるきっかけになればと。

:::note warn
完全に初心者が使ってみた記事なので、間違った使い方をしている可能性大です。
:::

# ChatGPTの使うための準備
### １．「https://chat.openai.com/auth/login」に接続する


### ２．ログインをクリック
![２．ログインをクリック.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624938/c45f3925-8da1-770e-db96-265c748ca018.png)


### ３．今回は、Googleアカウントでログイン
![３．Googleアカウントででログイン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624938/6d1b3ee4-1fcb-6405-e23e-0fe8caf47252.png)


### ４．ChatGPTにメッセージを送るに作業内容を入れていく
![４．CahtGPTにメッセージ入力.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624938/610040cb-5c2d-c30b-44ea-6a5b074bab82.png)


# ChatGPTさんとのやりとり
:::note info
作りたい処理
A列にある文字列の一覧を、1行目から順番にB列にあるか比較して見つけた場合、C列に〇を表示する
:::

私：
A列の文字列がB列にあるか上から順番に比較してC列に〇を表示するVBAのソースコードを作って

ChatGPTさん：
VBA（Visual Basic for Applications）を使用して、A列の文字列がB列に上から順番に含まれているかを確認し、含まれている場合にはC列に〇を表示するコードを作成するための例を以下に示します。このコードはExcelのマクロとして動作し、シート内のデータを対象にします。

![ソース１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624938/571f5288-ac29-9157-55d0-b528d36d18e7.png)


このコードは指定したワークシート（"Sheet1"としていますが、必要に応じて変更してください）において、A列の各セルの文字列がB列全体に含まれているかを確認し、C列に〇を表示します。各行の比較は上から順番に行われます。このコードを使用するには、以下の手順があります。

1.Excelを開き、対象のワークブックを開いてください。
2.Alt + F11 キーを押してVBAエディタを開きます。
3.メニューから「挿入」 > 「モジュール」を選択して新しいモジュールを挿入します。
エディタにコードを貼り付けます。
ワークブックに戻り、Alt + F8 キーを押してマクロダイアログを開き、「マッチングと表示」を選択して実行します。
このコードは対象のシートでA列とB列を比較し、C列に〇を表示します。適切なシート名や列の位置に変更が必要な場合は、コードを適宜修正してください。


:::note info
ソースコードだけでなく、ソースの解説とExcelへの設定方法まで教えてくれた！
:::

<table>
  <caption>実行結果</caption>
  <thead>
    <tr>
      <th>A列</th> <th>B列</th> <th>C列</th>
    </tr>
  </thead>
  <tr>
      <th>111</th> <th>111</th> <th>〇</th>
  </tr>
  <tr>
      <th>222</th> <th>555</th> <th></th>
  </tr>
  <tr>
      <th>333</th> <th>222</th> <th></th>
  </tr>
</table>

:::note warn
2行目のC列にも〇をつけたかったけど、よく見たら横並びの比較処理になっていた
これは、指示が悪かったと反省・・・
さらに、CahtGPTさんにお願いを追加
:::


私：
A列の文字列を1行ずつB列を全て確認して同じ文字列があったらC列に〇をつけて

ChatGPTさん：
理解しました。以下は、A列の各セルの文字列がB列全体に含まれている場合にC列に〇を表示するVBAコードです。

![ソース2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624938/26a38844-d83c-fa52-1f76-1b8984eb0e8c.png)
このコードは、A列の各セルの文字列がB列全体に含まれているかを確認し、C列に〇を表示します。各行の比較は上から順番に行われます。実行前にワークブックを保存し、慎重にマクロを実行してください。

<table>
  <caption>実行結果</caption>
  <thead>
    <tr>
      <th>A列</th> <th>B列</th> <th>C列</th>
    </tr>
  </thead>
  <tr>
      <th>111</th> <th>111</th> <th>〇</th>
  </tr>
  <tr>
      <th>222</th> <th>555</th> <th>〇</th>
  </tr>
  <tr>
      <th>333</th> <th>222</th> <th></th>
  </tr>
</table>

:::note warn
テストデータでの実行結果は、問題なし
早速、実データで実施してみると・・・処理が重くて終わらないことに
そこでさらに、CahtGPTさんにお願いを追加
:::

私：
このソースだと件数が多いときに遅くなるからもっと早いコードにできる？

CahtGPTさん：
大量のデータを処理する場合に効率を向上させるために、以下の変更を加えたコードを提供します。主にInStr関数の使用回数を削減し、効率的に処理を行うようにしました。
![ソース3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624938/1cb5ec1b-5852-3844-a70b-e3022a6cd362.png)

この変更により、データを配列に読み込み、InStr関数の使用回数を削減することで処理の高速化が期待できます。ただし、依然として処理時間がかかる場合は、VBA以外の手段（例: ワークシート関数やデータベースなど）を検討することも一つの選択肢です。

:::note warn
この処理で、今回実施したかった作業は問題なく完了
※テストや結果の精査について十分に実施してくださいね
:::


# 最後に
今回CahtGPTさんと仕事をしてみて、自分で調べるということがしなくてもなんでもできる時代を感じました。
もちろん勉強しないで行けますよって話ではありませんので！
でも今回実験してみて、今後の仕事方法って、間違いなく変わっていくんだろうなと深く考えさせられました。