「ChatGPT」の力を借りて、Excelマクロを作成してみました。

### はじめてChatGPTを使用してみました

こんにちは。金融業で働く会社員です。
少しでも働きやすい業務環境を整えていきたい、と日々色んなことを試しております。

今回は、ChatGPTがExcelのマクロのコードを作成してくれることを知ったので、時間ができたらやろうと思っていたことを、ChatGPTの力を借りてやってみました。

※Excelのマクロとは、エクセルの操作を自動化する機能のことで、VBA(Visual Basic for Applications)というプログラミング言語を用います。

ChatGPTに、マクロのことを聞いてみました。
![スクリーンショット 2023-08-14 14.27.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476276/81c5e152-196e-72a6-5b54-bad57c73dfab.png)



### 毎月行うExcelでの作業


私の会社では、毎月たくさんのキャンペーンや企画を行っています。
企画ごとに加盟店さま各社へ、ポイント経費の請求書を発行しています。
その請求書と一緒に送る、加盟店さまごとのポイント負担分の請求明細をExcelで作成をしています。

請求明細を作成する案件数としては、毎月30件近くあります。
1つの案件で請求先の会社数は、多いものは25社ほどあります。
たくさん作成をしなければならないので、慣れている社員が作成しても丸々3日はかかります。

これをマクロを作成することで、人が変わっても作成できて少しでも楽にしていけたらと思います。



-------------------------------------


**請求明細作成作業の流れ**

``1：実績データがあがってくる（加盟店番号と日付と金額のみの情報）``
　↓
``2：自社システムで、加盟店番号ごとに照合``
　↓
``3：会社名や店舗名を特定``
　↓
``4：自社システムから、照合結果をExcelに吐き出し``
　↓
``5：会社ごとにExcelのシートを作成して、実績内容を転記``
　↓
``6：会社ごとにExcelデータを作成する``
※社内経費申請システムに明細資料を添付する必要があるため、1社ごとのデータが必要


今回マクロを作成して自動化したい部分は、上記流れの「``5``と``6``」のExcel作業部分です。

-------------------------------------



### 使用ツール
[ChatGPT](https://chat.openai.com/)
Excel

-------------------------------------
### 完成した画面

https://twitter.com/KumiKimu4488/status/1691005706667970560

-------------------------------------

**マクロを作成する実績データ**
※内容は架空のものです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476276/4f1f2d0a-4e45-f188-dc4b-afa1db1b7fa6.png)




### ChatGPTへ指示文章を打ち込む




![スクリーンショット 2023-08-14 16.30.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476276/3ebdefb1-af8f-7014-8e1a-4a437b53a889.png)



### ChatGPTが作成したVBAのコード




```VB:
Sub FilterCopySumDeleteAndFormatSaveToDesktop()
    Dim sourceSheet As Worksheet
    Dim targetSheet As Worksheet
    Dim lastRow As Long
    Dim filterValue As String
    Dim copyRange As Range
    Dim sumRange As Range
    Dim lastColumn As Long
    Dim col As Long
    Dim row As Long
    Dim mergeRange As Range
    Dim mergeStartRow As Long
    Dim mergeEndRow As Long
    Dim desktopPath As String
    
    ' フィルタをかけるシートとフィルタの値を指定
    Set sourceSheet = Worksheets("計算")
    filterValue = "ABC"
    
    ' フィルタをかける
    sourceSheet.Range("B2").AutoFilter Field:=2, Criteria1:=filterValue
    
    ' フィルタされたデータの最終行を取得
    lastRow = sourceSheet.Cells(sourceSheet.Rows.Count, "A").End(xlUp).Row
    
    ' フィルタされたデータの最終列を取得
    lastColumn = sourceSheet.Cells(2, sourceSheet.Columns.Count).End(xlToLeft).Column
    
    ' コピーする範囲を設定
    Set copyRange = sourceSheet.Range("A2:H" & lastRow)
    
    ' 新しいシートを作成してデータを転記
    Set targetSheet = Worksheets.Add(After:=Sheets(Sheets.Count))
    targetSheet.Name = "同封1 ABC"
    copyRange.Copy targetSheet.Cells(1, 1)
    
    
    ' 合計関数を入れる
    For col = 5 To lastColumn ' E列からH列まで
        Set sumRange = targetSheet.Cells(lastRow + 2, col)
        sumRange.Formula = "=SUM(" & targetSheet.Cells(2, col).Address & ":" & targetSheet.Cells(lastRow + 1, col).Address & ")"
        sumRange.Font.Bold = True
    Next col
    
    ' 空白セルがある場合に行を削除する
    For row = lastRow + 2 To 2 Step -1
        If WorksheetFunction.CountBlank(targetSheet.Range(targetSheet.Cells(row, 5), targetSheet.Cells(row, lastColumn))) = lastColumn - 4 Then
            targetSheet.Rows(row).Delete
        End If
    Next row
    
    ' D列の一番下の空白セルに合計と入力
    targetSheet.Cells(targetSheet.Rows.Count, 4).End(xlUp).Offset(1, 0).Value = "合計"
    
    ' A1セルからH列に入力されている最後のセルまでを選択して罫線を設定
    targetSheet.Range("A1:H" & lastRow + 2).Borders.LineStyle = xlContinuous
    
    ' デスクトップのパスを取得
    desktopPath = CreateObject("WScript.Shell").SpecialFolders("Desktop")
    
    ' 新しいデータをデスクトップに保存
    targetSheet.Copy
    With ActiveWorkbook
        .SaveAs desktopPath & "\同封1 ABC 企画1.xlsx"
        .Close SaveChanges:=False
    End With
    
    ' メッセージを表示
    MsgBox "データの転記、合計列の追加、空白セルの削除、合計入力、罫線の追加、データの保存が完了しました。"
End Sub

```


### うまくいかなかったこと

・シートを作成して転記した後の罫線をつける動作が空白のセルにまで罫線をつけていて、思う通りの結果になりませんでした。
・最後の合計行のセル結合ができませんでした。
・シートを会社ごとに作成したいので、会社名でフィルタにかけて対象のものだけに絞る為の指示文章がうまくできませんでした。

全てChatGPTの問題ではなく、自分の指示センスの無さだと思います。



### 感想

ChatGPTへの指示文章を考えることが難しいと感じました。
質問したらすぐにコードを作成してくれるのはとても助かります。

作成してくれたコードでマクロを実行した結果をみて、フィルタを解除するなどのこちらの指示以外のことを自ずと考えて入れてくれているようでしたが、自分が望まない自動化のコードが入っている可能性があるので、確認して省くという作業が必要だと思いました。
そういう風に見ていると、コードへの理解も進みそうです。

うまくいかなかったことが解消できれば、3日かかる作業を1日に短縮が見込めると思うので、指示文章を工夫して理想に近づけていきたいと思います。