CHAT GPTでVBAコード生成してみた

今話題の「CHAT GPT」でVBAコードを生成してみた。
「CHAT GPT」はテキスト入力をプロンプトとして受け取り、自然言語で応答することが可能な会話型の人工知能ソフトです。
生成したいコードは下記のとおりです。
OneDrive上にあるエクセルファイルに対してエクセルファイル作成時の日時を付加したファイル名で保存するコードを「CHAT GPT」で生成してみた。
結果は、多少手直しも必要だがほぼ完全な状態まで仕上がっている。
しかし、下記のようなコードを取得するにはVBAの構文をある程度習熟する必要があり、GPTのプロンプトには丁寧な説明が必要となる。プログラム言語を全くやったことのない人には、AIが返して来る答えの正確さを判断できないので、それなりの予備知識が必要である。
「CHAT GPT」に対して最初のプロンプトでは、こちらの要望を全く理解していないので小学生に説明するように順序だてて根気よく指示を出すことが必要です。AIとの会話を進めて行くと徐々にこちらの要求を理解してくれ、スムーズに会話が成り立ちます。やはり、最も必要なのは文法に気を付けることです。今頃(この歳)ではあるが学校で習う国語力が必要だと感心しました。
それでは、どのようなプロンプトを投げかけたかを記してみましょう。

プロンプトに投げかけた

「CHAT GPT」へは下記の①~④までを細かに説明しプロンプトに投げかけた

====================
VBAを使用して下記の条件で自分自身の置かれているフォルダと同一のフォルダに自身を保存し、またPDFとしても保存したい

①注意点としてファイルを保存するフォルダがOneDriveであった場合、エクセルの環境変数(Environ関数)を引用してPathを取得してほしい
②保存するファイルは2種類あり、マクロ付きファイルとPDFファイルである
③保存する際のファイル名はエクセルファイルの「請求書」シートの「P5」セルに12桁の数字が文字列がとしてあるが、左から6桁目のところに文字列の半角のハイフンを挿入し7桁目から12桁目までを繋ぎ、12桁目の最後の文字列の後ろに半角アンダーバーを追加し、B6セルの文字列の値を付加して、ファイルを保存したい
例えばP5セルの値が「230505043611」であり、B6セルの値が「あさまいCTS」の時、次の2種類のファイル名で保存したい
230505-043611_あさまいCTS.pdf
230505-043611_あさまいCTS.xlsm
④マクロ付きファイルとして保存する対象はすべてのシートと全てのセルであるが、PDFファイルに関してはセル範囲をA1~R56としたい

Option Explicit

Sub SaveAsPDFAndXLSM()
    Dim fileName As String
    Dim filePath As String
    Dim wb As Workbook
    Dim invoiceNumber As String
    Dim companyName As String
    Dim hyphenIndex As Integer
    Dim underscore As String
    Dim oneDrivePath As String
    
    ' ファイル名の作成
    invoiceNumber = ThisWorkbook.Sheets("請求書").Range("P5").Value
    companyName = ThisWorkbook.Sheets("請求書").Range("B6").Value
    hyphenIndex = 6
    underscore = "_"
    fileName = Left(invoiceNumber, hyphenIndex) & "-" & Mid(invoiceNumber, hyphenIndex + 1, 6) & underscore & companyName
    
    ' ファイルの保存先のフォルダを決定する
    oneDrivePath = Environ("OneDrive")
    If oneDrivePath <> "" Then
        filePath = oneDrivePath & "\" & fileName
    Else
        filePath = ThisWorkbook.Path & "\" & fileName
    End If
   Debug.Print filePath
    ' ファイルの保存
    Set wb = Workbooks.Add
    ThisWorkbook.Sheets.Copy Before:=wb.Sheets(1)
    wb.Sheets.Select Replace:=False
    Application.DisplayAlerts = False
    wb.SaveAs filePath & ".xlsm", FileFormat:=52 ' xlOpenXMLWorkbookMacroEnabled
    wb.Close
    
    ThisWorkbook.Sheets("請求書").Range("A1:R56").ExportAsFixedFormat Type:=xlTypePDF, fileName:=filePath & ".pdf"
    
    ' エラー処理
    If Err <> 0 Then
        MsgBox "ファイルの保存に失敗しました。", vbCritical, "エラー"
        Exit Sub
    End If
    
    MsgBox filePath & "に" & vbCrLf & "正常にファイルを保存しました。", vbInformation, "完了"
End Sub

今回は下記のような請求書テンプレートをExcel で作り、ExcelファイルとPDFファイルの2種類を指定フォルダに書き出すVBAコードの生成を試してみた。
VBAの場合、One Driveに対してフォルダのURLを取得した際、特殊な細工が必要になるのでここの辺りも対応するようにしてみた。

Follow me!

投稿者プロフィール

近江公人
近江公人asamai-cts Owner
あさまいCTSの代表オヤジです(2021年現在=60歳)
横手市中央町で「ラーメン与市」を2012年まで約15年間を経営。
その後、「横手市雇用創出協議会 実践支援員」を経て、一時会社勤めをするが体調を崩し、再度、自営業の世界に戻る。
現在の「あさまいCTS」は2019年1月に起業。業務内容は主に、パソコンの修理、出張スマホ・パソコン教室、ホームページ作成 その他何でも屋みたいなものです・・・