ChatGPTは最強のノーコードツール？！ExcelのVBAも怖くない🤗

Qiita記事も、いつのまにか第４回！
今週も新しいチャレンジしてみました！

**【前回の1週間チャレンジ】**　
前回はGlideを利用したノーコード業務改善アプリを1週間で作成してみました。

https://qiita.com/Rs_n_ishii/items/3729293c223ed5ee2db6

今回は、**ChatGPT**を使って業務改善にチャレンジしてみました。
ChatGPTこそ、ノーコードツールの決定版と言ってもいいのかも！と実感できました。


## ChatGPTを使ったツールがこちら

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">VBAって今までコピペでやってたけど、まさに秒。<br>ChatGPTに言えばやりたいことを叶えてくれる…<br>私はドラえもんを手に入れた、のび太君の気持ちです。<a href="https://twitter.com/hashtag/protoout?src=hash&amp;ref_src=twsrc%5Etfw">#protoout</a> <a href="https://t.co/M9stUNpT6v">pic.twitter.com/M9stUNpT6v</a></p>&mdash; ｎ_Ishii (@Rs_n_ishii) <a href="https://twitter.com/Rs_n_ishii/status/1691792760410722738?ref_src=twsrc%5Etfw">August 16, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


## 皆さん、ChatGPTってどんな風に使っていますか？
私は今まで「おしゃべりAI」くらいに思っていました…。
「レポート課題とか使ったら怒られたりするんだよねそんなの自分でやる方が早いじゃん。」みたいな。

しかし、実は文系ちゃんではなく、
**やりたいことを話しかけたらプログラミングコードがスラスラ書けちゃう理系君でもありました！！！**
優秀すぎる…。

今まで10分くらいかけていたExcelデータの整理が「ポチっとな」だけできるVBAコード！
文字通り**秒で**処理できるようになりました。

個人的にVBAコードはたまーーーーにググってコピペで見よう見まねに使うくらいだったのでこんなサクサクやりたいことが形にできるとは！！！と驚きました。
簡単に出来すぎて、みんなに教えてあげたいような、秘密にしておきたいような・・・(笑)
私のような簡単なデータ処理に時間をかけている方はぜひ下記をご参照ください。



## いつものフロー
![ChatGPT１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478655/0366bf9a-e6a7-ec14-e438-4aedc7172f85.png)


今回私が実行したかったのは、
**「アンケート未回答の店舗に催促連絡をするための自動架電システム用CSVデータの作成」**　です。


現状を簡単にご説明します！

私はフランチャイズ店舗を運営・管理する会社で営業職として働いています。
毎月１回、全国の担当店舗700店舗に対し、WEBアンケートを実施しています。
回答期限を設けていますが、必ず期限までに回答しない店舗が発生しているのが現状です。
未回答店舗は200店舗以上発生し、すべてに電話をかけると途方もない作業になります。


そこで！その未回答店舗に対して先月から「自動架電システム」という機械音声で電話をかけて催促の連絡をするというシステムが導入されました！

便利な仕組みなのですが、架電先を決めるために電話番号のCSVファイルを作成しなければいけません。


アンケートの集計データと、電話番号の載っている店舗一覧のデータでは形式が異なり、**毎回抽出と並び替えを行い自動架電システムにアップロード**するという作業が必要でした。

正直、単純な並び替えと抽出作業なので実際そこまで時間はかかりませんが、**今後、私以外が作業しても簡単じゃないとこれから担当になる人も大変だよな。。。** と思い、今回ChatGPTにお手伝いしてもらおうと思いました。


## やりたかったこと
今回のアプリ作成でやりたかった・目標としたことは以下となります。
※データはダミーなのでデータ数が少ないですが実際は700店舗の一覧から抽出する作業です。

![ChatGPT２.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478655/ba428ac6-517f-d15f-b4fe-26755071a921.png)

①②のデータから架電システムに必要なデータを抜き出します！
**完成形は、店コードと店舗の電話番号だけにして、CSV形式で保存することです。**



## 作成手順
それでは作り方を説明します！
今回は実際のデータを基に、店舗名や電話番号などはダミーのデータを用意しました。
※今回はChatGPTが主役の記事なので至る所でChatGPTに活躍してもらっています。
<details><summary>（ダミーデータもChatGPTで作成してもらいました！）</summary>

![ChatGPT３.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478655/43b37a94-af3a-6e65-2367-33c624866769.png)
作成したくれた数字データをエクセルに貼り付けるだけで使用できました。

</details>

### 使ったもの


* [ChatGPT](https://chat.openai.com/)　
 ![ChatGPT４.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478655/54eac61c-88d6-e9a8-ebb4-e2dd43feb732.png)


* ChatGPTで生成したExcel用VBAマクロコード
![ChatGPT５.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478655/2b9543ba-3afa-7a71-b199-e2d767f4ee51.png)





### 編集したいExcelシートの準備
![ChatGPT６.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478655/992a8df9-eab7-d110-9358-656208c6e880.png)

まずは編集したいExcelデータを**一つのファイル**にします。
①アンケートの回答データ
②店舗一覧のデータ
をそれぞれSheet1、Sheet2に貼り付けます。


### ChatGPTにSheetのデータを見せる

![ChatGPT７.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478655/c21091cf-a591-9aac-34cf-2acf857ea1e6.png)

Excelのデータをそのままコピペするだけです。
VBAのコードを考えてもらう前に、条件としてデータがどのような構成になっているのかを先に見せておきます。


### プロンプトの入力
プロンプトってなに？
![ChatGPT８.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478655/25902e22-36a8-8976-5a30-d4d183047d95.png)

なんでも答えてくれるChatGPTですが、プロンプトでうまく指示をしないとなかなか思った通りに応えてくれません…

:::note info
そんな時に役に立つのが[promptia](https://prompt.quel.jp/)
⇒ChatGPT用のさまざまなプロンプト例文が使えます。コピペしたり、書き換えたりして利用できます。書き方やアイデアを参考にさせてもらいました！

:::

**👇とりあえず入力してみた最初のプロンプト**です。
![ChatGPT９.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478655/fe3474c9-d16f-0e90-5061-ea051ecf4ff5.png)

するとそれっぽいコードが出てきました！


```vba:失敗例①
Sub ProcessDataAndExportCSV()
    Dim wb As Workbook
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Dim newWb As Workbook
    Dim newWs As Worksheet
    Dim lastRow1 As Long
    Dim lastRow2 As Long
    Dim i As Long
    Dim regex As Object
    Dim matches As Object
    Dim csvFilePath As String
    
    ' 初期設定
    Set wb = ThisWorkbook
    Set ws1 = wb.Sheets("Sheet1")
    Set ws2 = wb.Sheets("Sheet2")
    lastRow1 = ws1.Cells(ws1.Rows.Count, "A").End(xlUp).Row
    lastRow2 = ws2.Cells(ws2.Rows.Count, "A").End(xlUp).Row
    csvFilePath = Environ("USERPROFILE") & "\Desktop\output.csv" ' デスクトップに保存するファイルパス
    
    ' 正規表現オブジェクトの作成
    Set regex = CreateObject("VBScript.RegExp")
    regex.Global = True
    regex.Pattern = "^(.{4})"
    
    ' 新しいワークブックを作成
    Set newWb = Workbooks.Add
    Set newWs = newWb.Sheets(1)
    
    ' データ処理とCSV出力
    For i = 2 To lastRow1
        If ws1.Cells(i, 2).Value = "" Then ' 回答日時が空欄の場合
            ' 正規表現を使用して氏名の先頭4文字を抽出
            Set matches = regex.Execute(ws1.Cells(i, 1).Value)
            If matches.Count > 0 Then
                Dim extractedName As String
                extractedName = matches(0).SubMatches(0)
                
                ' Sheet2から店コードと電話番号を抽出
                Dim foundRow As Range
                Set foundRow = ws2.Range("A2:A" & lastRow2).Find(What:=extractedName, LookIn:=xlValues, LookAt:=xlWhole)
                If Not foundRow Is Nothing Then
                    ' 抽出したデータを新しいワークブックにコピー
                    ws2.Rows(foundRow.Row).Copy newWs.Rows(i - 1)
                End If
            End If
        End If
    Next i
    
    ' 列削除
    newWs.Columns("C:Z").Delete
    
    ' CSV形式で保存
    newWb.SaveAs csvFilePath, FileFormat:=xlCSV
    newWb.Close SaveChanges:=False
    
    ' 正規表現オブジェクトの解放
    Set regex = Nothing
    
    MsgBox "処理が完了しました。CSVファイルはデスクトップに保存されました。"
End Sub


```


### ExcelにVBAを貼り付ける

出てきたVBAコードをコピーしてExcelに貼り付け、実行して結果を確認します。

![ChatGPT10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478655/0503ce67-ea4d-a47f-3037-1f2185fec9dd.png)


このコードでは**残念ながら空っぽのCSVファイルが保存**されてしまいました。
エラーが出たりうまくいかない場合は、その旨をChatGPTに伝えるともう一度作り直してくれます。
何度か繰り返しましたが、うまくいかず…
<details><summary> 失敗コードの墓場🧟‍♀️ </summary>

![ChatGPT11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478655/8822ac6f-145a-cc29-8f1d-c0260280fad7.png)
```vba:失敗例２🧟‍♀️
Sub ExportStoreDataToCSV()
    Dim wb As Workbook
    Dim ws2 As Worksheet
    Dim newWb As Workbook
    Dim newWs As Worksheet
    Dim lastRow2 As Long
    Dim i As Long
    Dim csvFilePath As String
    
    ' 初期設定
    Set wb = ThisWorkbook
    Set ws2 = wb.Sheets("Sheet2")
    lastRow2 = ws2.Cells(ws2.Rows.Count, "A").End(xlUp).Row
    csvFilePath = Environ("USERPROFILE") & "\Desktop\output.csv" ' デスクトップに保存するファイルパス
    
    ' 新しいワークブックを作成
    Set newWb = Workbooks.Add
    Set newWs = newWb.Sheets(1)
    
    ' データコピーとCSV出力
    For i = 2 To lastRow2
        newWs.Cells(i - 1, 1).Value = ws2.Cells(i, 1).Value ' 店コードをコピー
        newWs.Cells(i - 1, 2).Value = ws2.Cells(i, 2).Value ' 電話番号をコピー
    Next i
    
    ' CSV形式で保存
    newWb.SaveAs csvFilePath, FileFormat:=xlCSV
    newWb.Close SaveChanges:=False
    
    MsgBox "処理が完了しました。CSVファイルはデスクトップに保存されました。"
End Sub

```

うまくいかない！もう一回！
再度プロンプトを見直して指示しました。

![ChatGPT12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478655/269ae794-e2cf-6355-82c2-6c70cc812d0e.png)
```vba:失敗例３🧟‍♀️
Sub ProcessDataAndExportCSV()
    Dim sourceWb As Workbook
    Dim sourceWs As Worksheet
    Dim targetWs As Worksheet
    Dim newWb As Workbook
    Dim lastRow1 As Long
    Dim lastRow2 As Long
    Dim i As Long
    Dim csvFilePath As String
    Dim csvContent As String
    
    ' 初期設定
    Set sourceWb = ThisWorkbook
    Set sourceWs = sourceWb.Sheets("Sheet1")
    lastRow1 = sourceWs.Cells(sourceWs.Rows.Count, "A").End(xlUp).Row
    csvFilePath = Environ("USERPROFILE") & "\Desktop\output.csv" ' デスクトップに保存するファイルパス
    
    ' CSVファイルのヘッダー行を作成
    csvContent = "店コード,電話番号" & vbCrLf
    
    ' 新しいワークブックを作成
    Set newWb = Workbooks.Add
    Set targetWs = newWb.Sheets(1)
    
    ' データ処理とCSV内容の構築
    For i = 2 To lastRow1
        If sourceWs.Cells(i, 2).Value = "" Then ' 回答日時が空欄の場合
            Dim extractedName As String
            extractedName = Left(Trim(sourceWs.Cells(i, 1).Value), 4)
            
            ' Sheet2から店コードと電話番号を抽出
            Dim foundRow As Range
            Set foundRow = sourceWb.Sheets("Sheet2").Range("A2:A" & lastRow2).Find(What:=CInt(extractedName), LookIn:=xlValues, LookAt:=xlWhole)
            If Not foundRow Is Nothing Then
                ' CSV内容にデータを追加
                csvContent = csvContent & sourceWb.Sheets("Sheet2").Cells(foundRow.Row, 1).Value & "," & sourceWb.Sheets("Sheet2").Cells(foundRow.Row, 2).Value & vbCrLf
            End If
        End If
    Next i
    
    ' CSVファイルを保存
    Dim fileNumber As Integer
    fileNumber = FreeFile
    Open csvFilePath For Output As #fileNumber
    Print #fileNumber, csvContent
    Close #fileNumber
    
    MsgBox "処理が完了しました。CSVファイルはデスクトップに保存されました。"
    
    ' 新しいワークブックを閉じる（保存しない）
    newWb.Close SaveChanges:=False
End Sub

```
何が悪いのかわからない！！！
もう一回！
![ChatGPT13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478655/98e0b4cd-cd9a-97d9-edf5-b0459b456540.png)

えー…わからないから聞いてるのに！
と思っていたら。


</details>


5回ほどプロンプトを入力し直し、ChatGPTにRegenerateをお願いし続けた結果、その時は急に来ました。
※Regenerateはエラーもあり、それぞれのプロンプトで数回押したので計20回ほど押しました。

![ChatGPT14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478655/1fbd5b50-4883-8ea0-5c53-e5eabe75b9b9.png)

```vba:成功！！！🤩
Sub ProcessDataAndExportCSV()
    Dim sourceWs As Worksheet
    Dim targetWs As Worksheet
    Dim newWb As Workbook
    Dim lastRow1 As Long
    Dim i As Long
    Dim csvFilePath As String
    Dim csvContent As String
    
    ' 初期設定
    Set sourceWs = ThisWorkbook.Sheets("Sheet1")
    lastRow1 = sourceWs.Cells(sourceWs.Rows.Count, "A").End(xlUp).Row
    csvFilePath = Environ("USERPROFILE") & "\Desktop\output.csv" ' デスクトップに保存するファイルパス
    
    ' CSVファイルのヘッダー行を作成
    csvContent = "店コード,電話番号" & vbCrLf
    
    ' 新しいワークブックを作成
    Set newWb = Workbooks.Add
    Set targetWs = newWb.Sheets(1)
    
    ' データ処理とCSV内容の構築
    For i = 2 To lastRow1
        Dim nameValue As String
        nameValue = Left(Trim(sourceWs.Cells(i, 1).Value), 4)
        
        If sourceWs.Cells(i, 2).Value = "" Then ' 回答日時が空欄の場合
            ' Sheet2から店コードと電話番号を抽出
            Dim foundRow As Range
            Set foundRow = ThisWorkbook.Sheets("Sheet2").Columns(1).Find(What:=CInt(nameValue), LookIn:=xlValues, LookAt:=xlWhole)
            If Not foundRow Is Nothing Then
                ' CSV内容にデータを追加
                csvContent = csvContent & ThisWorkbook.Sheets("Sheet2").Cells(foundRow.Row, 1).Value & "," & ThisWorkbook.Sheets("Sheet2").Cells(foundRow.Row, 2).Value & vbCrLf
            End If
        End If
    Next i
    
    ' CSVファイルを保存
    Dim fileNumber As Integer
    fileNumber = FreeFile
    Open csvFilePath For Output As #fileNumber
    Print #fileNumber, csvContent
    Close #fileNumber
    
    MsgBox "処理が完了しました。CSVファイルはデスクトップに保存されました。"
    
    ' 新しいワークブックを閉じる（保存しない）
    newWb.Close SaveChanges:=False
End Sub

```
指示が悪かった可能性が十分にありますが、これでやりたかったことが一瞬でできるようになりました！感動！

:::note info

失敗した原因で考えられるのは、
最後のプロンプトを入力するまで**Google Chromeの設定でページの自動翻訳が作動しており、日本語の文章が少し変だったから**ではないかと思いました。


:::

何度もやり直しが必要になったため、多少時間はかかってしまいましたが、知識０の私が一からVBAのコードを作ると1晩くらいかかるのではなかろうか…。
それが**30分**くらいで出来ました！

記事で使用したサンプルデータだけでなく、実際の業務データでも問題なく作動することが確認できました。




## ChatGPTを使ってみて
今回はお盆シーズンということもあり、一緒に働く仲間に見てもらうことはできませんでした…。

でも、説明要らずでデータが作成できるようになったため、Excelが苦手なパートさんに業務を振ることができるようになったと思います！

このデータ作成の業務は私しかやっていなかった業務ですが、「自分でやりたいから教えていないかった」わけではなく、正直「教える時間あればやったほうが早い」と思ってしまっていたためでした。
今回作業が圧倒的に簡素化できたため、教えるのも楽、教わるのも楽にできたと思います。

使い方次第でもっと便利に使っていけそうなので空いた時間を、店舗とのリアルなコミュニケーションやミーティングなどに時間をさけるようになりそうです！

WEBアプリのコード生成やPowerPointのVBA生成なども活用していきたいです！

### 追記
（2023/8/20）
お盆休み明けに一緒に働くチームの数人に見てもらいました！
もちろん皆さん、ChatGPTは知ってましたが、コードの生成に使えることなどは知らなかったのでとても驚いていました。

今回作成したVBAコードは私の業務でしか利用できないものですが、身近な業務に生かせることがChatGPTで出来ると知り、「自分でもVBA使ってみたい！」と言ってもらえたので、私のわかる範囲でやり方を教えてあげました。「後日チャレンジしてみる！」といってくれました！

私に「○○してほしい！」というのではなく、自らチャレンジしてみようと思ってもらえたのがうれしかったです🤗

今回私が作成したものは、直接的にチームの業務効率化につながるプロトタイプではありませんが、チームの人の意識を少しでも変えるきっかけになったかと思います！良かったです＾＾