LoginSignup
8
3
100万人に伝えたい!失敗を乗り超えた話を共有しよう

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

Last updated at Posted at 2023-08-16

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

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

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

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

皆さん、ChatGPTってどんな風に使っていますか?

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

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

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

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

いつものフロー

ChatGPT1.png

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

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

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

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

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

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

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

やりたかったこと

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

ChatGPT2.png

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

作成手順

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

(ダミーデータもChatGPTで作成してもらいました!)

ChatGPT3.png
作成したくれた数字データをエクセルに貼り付けるだけで使用できました。

使ったもの

  • ChatGPT 
    ChatGPT4.png

  • ChatGPTで生成したExcel用VBAマクロコード
    ChatGPT5.png

編集したいExcelシートの準備

ChatGPT6.png

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

ChatGPTにSheetのデータを見せる

ChatGPT7.png

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

プロンプトの入力

プロンプトってなに?
ChatGPT8.png

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

そんな時に役に立つのがpromptia
⇒ChatGPT用のさまざまなプロンプト例文が使えます。コピペしたり、書き換えたりして利用できます。書き方やアイデアを参考にさせてもらいました!

👇とりあえず入力してみた最初のプロンプトです。
ChatGPT9.png

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

失敗例①
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

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

失敗コードの墓場🧟‍♀️

ChatGPT11.png

失敗例2🧟‍♀️
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

失敗例3🧟‍♀️
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

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

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

ChatGPT14.png

成功!!!🤩
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

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

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

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

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

ChatGPTを使ってみて

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

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

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

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

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

追記

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

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

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

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

8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3