ChatGPTにマクロのコードを教えてもらったら、6年間面倒だなと思っていたExcelの作業が3日で解消した

お疲れさまです。沖縄でデジタル修行中の惣菜バイヤーです。
先日**ChatGPT**を勉強しました。
いろいろ会話できるだけだと思ったら、なんとプログラミングのコードとかも教えてくれるということがわかりました。
プログラミングはまだ全然わかりませんが、今回は**ChatGPT**にいろいろ教えてもらって衝撃を受けたのでその記しです。

## 計画書作成が大変
お惣菜のバイヤーとしての主な業務は、``メニュー開発``・``仕入れ``・``在庫管理``・``店舗の売上計画``などです。
今回は上記の``店舗の売上計画``にスポットをあてて進めていきます。
例えば、8月はお盆がありますが（沖縄は本土とは違い旧暦なので旧盆が商機！）、どの店舗がどの商品をどのくらい販売するかをあらかじめ計画します。
その計画に基づいて、仕入れ金額や在庫をどのくらい持っておくかを決めます。
店舗の売上計画を立てるとき、昨年の売上実績をベースに組みます。
この昨年売上実績がなかなか曲者なのです。
会社のシステムでとれる売上データの店舗順と計画書の店舗順がバラバラで、いつも約40店舗分を手動で並び替えていました。下記イメージです。
↓図1（会社のシステムの売上データ）
![1コメント.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3481572/9c070961-d1a9-3c06-07fa-9913224878d4.png)
↓図2（店舗の計画書）
![2コメント.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3481572/7b976348-4ab9-48ef-38c8-b180d293827c.png)
それっていつも同じ作業なのでマクロでできないのかなと思いつつも、職場でマクロがわかる人は少ないしみんな忙しいのでなかなか教えてもらえない。
勉強しよう！と買った本も机の中に眠りっぱなし。。。
並び替えなんて15分程度で終わる作業だし「まあいいか」とずっとこの6年間同じ作業を繰り返していました。
しかし、この3日間**ChatGPT**とともに過ごし、ついに無事並び替えのマクロが完成しました！

:::note warn
今回**ChatGPT**と**マクロ**両方初めての挑戦でした。
読み進めても頂いても再現性は低いかもしれません。
自分の記録用と、同じ初心者の方になんとなくこんなイメージなのかと知って頂けたら幸いです。
（**ChatGPT**の特性上、同じコードもなかなか出ないため）
:::


## 使ったもの
[ChatGPT](https://chat.openai.com/)
Excel

## できたもの
https://twitter.com/zhi_yu41057/status/1690377048072859648

## マクロ作成の流れ
①まずはマクロとは何なのかを教えてもらいます。
![3コメント.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3481572/f014f57b-444f-665b-aa10-b83f371148e0.png)
ふむふむ、マクロもプログラミングのコードでできているんですね。初めて知りました。
他にもいろいろ質問すると、マクロは**VBA**のコードというのを使用するらしいです。それさえも知らなかった。（だから買った本にはマクロ＆VBAと書かれていたのか！）


②次に、元となるExcelデータ（図1（会社のシステムの売上データ））のいらないところを削除するVBAのコードを教えてもらいます。
![5コメント.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3481572/ad914d00-edab-5916-dd3b-abce59255e05.png)
![6コメント.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3481572/8ddbf99f-c5dc-dbb1-5786-8858ff40c15e.png)

:::note info
このとき、ChatGPTに詳しく教えてあげるとちゃんとしたコードを出してくれます
:::

コードを出している様子
※今回使っているコードとは別のものです。イメージとしてご覧ください。

https://twitter.com/zhi_yu41057/status/1689576369821474816

③次にVLOOKUP関数を使うコードを教えてもらいます。
![7コメント.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3481572/5d69ea42-54a0-3540-9a15-15180ce5b90f.png)
④最後にこの2つのマクロを同時に実行するコードを教えてもらいます。
![8コメント.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3481572/e38337d8-0a76-1b4e-7911-5c02341768de.png)


 > 今回YouTubeでエクセル兄さんという方の動画も参考にさせてもらいました
※直接は使っていませんが、動画いくつかあったので勉強になりました

https://www.youtube.com/watch?v=fYc5R9i_hl0&list=PLWFwTb9rB4mHxydQ2ztBi6k9MmrMSllg6

## VBAのコード
今回使った（**ChatGPT**に出してもらった）コードは3つです。
1つできただけでも自分にとっては凄いことですが、2つのコードを組み合わせて仕上げてみました。

①``Excelの列や行を削除して整理+新規シートにコピーするコード``
```ruby:
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を使って値を別のシートに返すコード``
```ruby:
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つを同時に起動させるコード``
```ruby:
Sub RunBothMacros()
    MsgBox "CopyDataToNewSheet マクロを実行します。"
    Call CopyDataToNewSheet
    MsgBox "CopySalesData マクロを実行します。"
    Call CopySalesData
    MsgBox "両方のマクロが完了しました。"
End Sub

```
:::note info
2つのマクロを実行するだけではなく、メッセージも出してもらいました
:::

## それでもChatGPTでできなかったこと
はじめは最強だと思っていた**ChatGPT**も万能ではありませんでした。（自分の聞き方も悪かったと思います）
並び替えも店舗を指定するだけや、同じ質問の中で2つ聞いたりするとエラーが出まくりです。
丁寧にひとつずつ聞いてあげないといけないですね。
↓みたいなことを2日間くらいひたすら繰り返しました。
![10コメント.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3481572/3af58b87-7c52-bd0b-44ea-f2f871063f84.png)
![21コメント.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3481572/867d22a8-1c21-8f3b-ffa0-c1fc8d523d8e.png)
![11コメント.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3481572/bbf20fb4-649f-c760-6b7b-2ad8739ce93a.png)


## やってみてと今後の抱負
これまで約15分程かかっていた並び替えの作業が、約1分程度になります。
これが毎月2回程あるので、月にすると30分程度の短縮です。
年間にすると約6時間。1日分まではいきませんがそれでもすごい業務改善です！
今後は今までよりも短い時間でできるようになるので、より細かい計画が立てられると思います。

また、同じ部署には他に4名のバイヤーがいます。
もう少し改良してみんなが使える仕様にすれば、さらに全体の効率改善になります。
次はそこを目指していきたいと思います。
最後までご覧いただきありがとうございました。

※ちゃんと**ChatGPT**にもお礼を伝えました（笑）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3481572/a0e233f3-280a-3c40-a0f2-5d312a320500.png)