お疲れさまです。沖縄でデジタル修行中の惣菜バイヤーです。
先日ChatGPTを勉強しました。
いろいろ会話できるだけだと思ったら、なんとプログラミングのコードとかも教えてくれるということがわかりました。
プログラミングはまだ全然わかりませんが、今回はChatGPTにいろいろ教えてもらって衝撃を受けたのでその記しです。
計画書作成が大変
お惣菜のバイヤーとしての主な業務は、メニュー開発
・仕入れ
・在庫管理
・店舗の売上計画
などです。
今回は上記の店舗の売上計画
にスポットをあてて進めていきます。
例えば、8月はお盆がありますが(沖縄は本土とは違い旧暦なので旧盆が商機!)、どの店舗がどの商品をどのくらい販売するかをあらかじめ計画します。
その計画に基づいて、仕入れ金額や在庫をどのくらい持っておくかを決めます。
店舗の売上計画を立てるとき、昨年の売上実績をベースに組みます。
この昨年売上実績がなかなか曲者なのです。
会社のシステムでとれる売上データの店舗順と計画書の店舗順がバラバラで、いつも約40店舗分を手動で並び替えていました。下記イメージです。
↓図1(会社のシステムの売上データ)
↓図2(店舗の計画書)
それっていつも同じ作業なのでマクロでできないのかなと思いつつも、職場でマクロがわかる人は少ないしみんな忙しいのでなかなか教えてもらえない。
勉強しよう!と買った本も机の中に眠りっぱなし。。。
並び替えなんて15分程度で終わる作業だし「まあいいか」とずっとこの6年間同じ作業を繰り返していました。
しかし、この3日間ChatGPTとともに過ごし、ついに無事並び替えのマクロが完成しました!
今回ChatGPTとマクロ両方初めての挑戦でした。
読み進めても頂いても再現性は低いかもしれません。
自分の記録用と、同じ初心者の方になんとなくこんなイメージなのかと知って頂けたら幸いです。
(ChatGPTの特性上、同じコードもなかなか出ないため)
使ったもの
ChatGPT
Excel
できたもの
マクロ作成の流れ
①まずはマクロとは何なのかを教えてもらいます。
ふむふむ、マクロもプログラミングのコードでできているんですね。初めて知りました。
他にもいろいろ質問すると、マクロはVBAのコードというのを使用するらしいです。それさえも知らなかった。(だから買った本にはマクロ&VBAと書かれていたのか!)
②次に、元となるExcelデータ(図1(会社のシステムの売上データ))のいらないところを削除するVBAのコードを教えてもらいます。
このとき、ChatGPTに詳しく教えてあげるとちゃんとしたコードを出してくれます
コードを出している様子
※今回使っているコードとは別のものです。イメージとしてご覧ください。
③次にVLOOKUP関数を使うコードを教えてもらいます。
④最後にこの2つのマクロを同時に実行するコードを教えてもらいます。
今回YouTubeでエクセル兄さんという方の動画も参考にさせてもらいました
※直接は使っていませんが、動画いくつかあったので勉強になりました
VBAのコード
今回使った(ChatGPTに出してもらった)コードは3つです。
1つできただけでも自分にとっては凄いことですが、2つのコードを組み合わせて仕上げてみました。
①Excelの列や行を削除して整理+新規シートにコピーするコード
Sub CopyDataToNewSheet()
Dim sourceSheet As Worksheet
Dim newSheet As Worksheet
Dim lastRow As Long, i As Long, newRow As Long
' 操作対象のシートを指定
Set sourceSheet = ThisWorkbook.Sheets("2022-08-12")
' 新しいシートを作成
Set newSheet = ThisWorkbook.Sheets.Add(After:=sourceSheet)
newSheet.Name = "NewSheet" ' 新しいシートの名前を設定
lastRow = sourceSheet.Cells(sourceSheet.Rows.Count, 1).End(xlUp).Row ' 最終行を取得
newRow = 1 ' 新しいシートの行カウンターを初期化
' データのコピーと条件に合致する行の削除
For i = 1 To lastRow
If sourceSheet.Cells(i, 9).Value <> "集計" Then
newSheet.Cells(newRow, 1).Value = sourceSheet.Cells(i, 1).Value
newSheet.Cells(newRow, 2).Value = sourceSheet.Cells(i, 4).Value
newSheet.Cells(newRow, 3).Value = sourceSheet.Cells(i, 9).Value
newSheet.Cells(newRow, 4).Value = sourceSheet.Cells(i, 10).Value
newSheet.Cells(newRow, 5).Value = sourceSheet.Cells(i, 14).Value
newRow = newRow + 1
End If
Next i
End Sub
②VLOOKUPを使って値を別のシートに返すコード
Sub CopySalesData()
Dim wsSource As Worksheet
Dim wsTarget As Worksheet
Dim lastRow As Long
Dim i As Long
' シートを取得
Set wsSource = ThisWorkbook.Sheets("NewSheet")
Set wsTarget = ThisWorkbook.Sheets("Sheet1")
' 「Sheet1」の最終行を取得
lastRow = wsTarget.Cells(wsTarget.Rows.Count, "B").End(xlUp).Row
' データをコピー
For i = 4 To lastRow
wsTarget.Cells(i, "D").Formula = "=VLOOKUP($B" & i & ", " & wsSource.Name & "!$C$9:$E$49, 3, FALSE)"
Next i
End Sub
③上記2つを同時に起動させるコード
Sub RunBothMacros()
MsgBox "CopyDataToNewSheet マクロを実行します。"
Call CopyDataToNewSheet
MsgBox "CopySalesData マクロを実行します。"
Call CopySalesData
MsgBox "両方のマクロが完了しました。"
End Sub
2つのマクロを実行するだけではなく、メッセージも出してもらいました
それでもChatGPTでできなかったこと
はじめは最強だと思っていたChatGPTも万能ではありませんでした。(自分の聞き方も悪かったと思います)
並び替えも店舗を指定するだけや、同じ質問の中で2つ聞いたりするとエラーが出まくりです。
丁寧にひとつずつ聞いてあげないといけないですね。
↓みたいなことを2日間くらいひたすら繰り返しました。
やってみてと今後の抱負
これまで約15分程かかっていた並び替えの作業が、約1分程度になります。
これが毎月2回程あるので、月にすると30分程度の短縮です。
年間にすると約6時間。1日分まではいきませんがそれでもすごい業務改善です!
今後は今までよりも短い時間でできるようになるので、より細かい計画が立てられると思います。
また、同じ部署には他に4名のバイヤーがいます。
もう少し改良してみんなが使える仕様にすれば、さらに全体の効率改善になります。
次はそこを目指していきたいと思います。
最後までご覧いただきありがとうございました。