はじめてChatGPTを使用してみました
こんにちは。金融業で働く会社員です。
少しでも働きやすい業務環境を整えていきたい、と日々色んなことを試しております。
今回は、ChatGPTがExcelのマクロのコードを作成してくれることを知ったので、時間ができたらやろうと思っていたことを、ChatGPTの力を借りてやってみました。
※Excelのマクロとは、エクセルの操作を自動化する機能のことで、VBA(Visual Basic for Applications)というプログラミング言語を用います。
毎月行うExcelでの作業
私の会社では、毎月たくさんのキャンペーンや企画を行っています。
企画ごとに加盟店さま各社へ、ポイント経費の請求書を発行しています。
その請求書と一緒に送る、加盟店さまごとのポイント負担分の請求明細をExcelで作成をしています。
請求明細を作成する案件数としては、毎月30件近くあります。
1つの案件で請求先の会社数は、多いものは25社ほどあります。
たくさん作成をしなければならないので、慣れている社員が作成しても丸々3日はかかります。
これをマクロを作成することで、人が変わっても作成できて少しでも楽にしていけたらと思います。
請求明細作成作業の流れ
1:実績データがあがってくる(加盟店番号と日付と金額のみの情報)
↓
2:自社システムで、加盟店番号ごとに照合
↓
3:会社名や店舗名を特定
↓
4:自社システムから、照合結果をExcelに吐き出し
↓
5:会社ごとにExcelのシートを作成して、実績内容を転記
↓
6:会社ごとにExcelデータを作成する
※社内経費申請システムに明細資料を添付する必要があるため、1社ごとのデータが必要
今回マクロを作成して自動化したい部分は、上記流れの「5
と6
」のExcel作業部分です。
使用ツール
ChatGPT
Excel
完成した画面
マクロを作成する実績データ
※内容は架空のものです。
ChatGPTへ指示文章を打ち込む
ChatGPTが作成したVBAのコード
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日に短縮が見込めると思うので、指示文章を工夫して理想に近づけていきたいと思います。