商品管理データを簡単にまとめる方法をChatGPTに相談してみました

商品を発注する時に使うデータ。情報はあるけれどバラバラで活用しづらい。前回、必要なデータを整理するのに**ChatGPT**を活用してちょっとだけ簡単にできましたが、理想の形にならなかったので、見直しながら再度挑戦！

## 複数のデータをまとめてすぐ使える状態にしたい

商品を注文する時、準備としていろいろなデータ使いますが、主に下記３つのデータを中心に使っています。
1\. 今お店にある在庫
2\. 今まで売れた数量
3\.これからお店に入れる数量

4\.注文してまだお店についていない在庫

１～３については今のシステムのフォーマットがあるので、データをそのまま出力してすぐ使えます。ここに**４．注文しているけどまだ商品が届いていない在庫** のデータを組みこんで使いたい。このデータを業務に使える状態にするのに非常に手間がかかるのです。これを整理にする方法をChatGPTに相談して**2ステップでできるようになりました**。





### 1\. CSVデータのシートの統合


今回使いたい**４のデータ**は複数の分かれたCSVデータの形で取得します。
本命のデータ整理の前にこれを1つのシートにまとめる必要があります。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835981/6786ea9c-8798-93fb-8023-b66bb7ed6904.png)

複数の提案の中から**Power Queryを使ってまとめる**をやってみました


1\.まとめたいデータを一つのフォルダに入れる
2\.エクセルの左上　データ⇒データの取得⇒フォルダからでデータ集約したいフォルダを指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835981/8723bbe8-a320-f9d6-d96d-9dd03b89a43a.png)
83\.これを最後にデータの結合および読み込み　を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835981/0d838f9a-0ced-c857-8b1d-1fa9087cf912.png)

出来上がったシートはこれ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835981/4afa7394-e2ce-d6b7-f1ee-e5cf4b1d9d69.png)

色分けされてて見やすい!　1段階目　クリアです。







### 2\.完成したシートを作業シートに合体する
普段使っているVLOOKUPでは１回でできず、非常に手間がかかるためこの改善をしたい。前回、**２つのエクセル関数を組み合わせてやる方法**を知りましたがもっと簡単にしたい。VBAを使いたかったけれど、実際にはなかなか動かず再度挑戦します。

:::note alert
前回の反省ポイント
1\. やりたいことをChatGPTにうまく伝えられず返答がよくわからない
2\. いつも使っているエクセルを使用したらデータ量が多すぎてパソコンが固まる
3\. 取得したデータをまとめ・別シートに特定のデータを呼び出すことを一度にやろうとした
:::


反省を活かして今回は下記に注意して進めます

:::note 

・**ChatGPT**に正確に要求を伝える
・試すのに適度な情報量でマクロを実行できる元データを作成する
・途中であきらめない


:::

#### ChatGPTに正確に要求を伝える

チャットとつくので漠然とプロンプトは**短くて簡単な内容でないといけない**と思い込んでいました。詳しく書くにもどう書いたらいいのか見当もつかず・・。こちらの記事を参考にしました。


https://note.com/hama6176/n/n4b1c918c8579

直接入力するとうっかりENTERキーを押してうまくいかなかったので、一旦テキストに記載して貼り付けました。箇条書きのほうが自分の頭を整理しやすいし、正確に伝わったようです。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835981/1564aa5a-90f1-4e89-a51f-5b08cab2a39c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835981/0763dd93-ff0d-7dbb-ebd7-ea0f822cc85b.png)

VBAは便利と聞いたけどをイマイチ理解していないので使い方も聞いてみます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835981/dc6694a2-420a-6f21-6347-557b6a63171b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835981/dd9644e6-f418-7c37-6453-6d255adc720d.png)

使い方はわかりました。




 #### 適度な情報量でマクロを実行できる元データの準備


1\.エクセルファイルのオプションを選択し　マクロを有効にする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835981/8a5caf6a-b643-3bfa-26c4-3fe2515f7962.png)
2\.ファイルの保存形式を.xlsm　にする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835981/ec922408-b0fe-0d70-f0ef-2131ddc5c300.png)

 3\.エクセルの行を減らしたシートの作成
 前回は業務に使うものをそのまま利用しようとして２万行のものを使ったため計算に時間がかかっているのか、フリーズしているのかわからず困惑。今回は説明を何度も読み返して丁寧に準備！

 #### 早速コード記入

<details open><summary>書いてもらったコード</summary>

```rb
Sub CopyData()

Dim wsOrder As Worksheet
Dim wsPurchase As Worksheet
Dim lastRowOrder As Long
Dim lastRowPurchase As Long
Dim orderKey As String
Dim i As Long
Dim j As Long

 シートを設定
Set wsOrder = ThisWorkbook.Sheets("注文起案シート")
Set wsPurchase = ThisWorkbook.Sheets("発注中")

 最終行を取得
lastRowOrder = wsOrder.Cells(wsOrder.Rows.Count, "A").End(xlUp).Row
lastRowPurchase = wsPurchase.Cells(wsPurchase.Rows.Count, "A").End(xlUp).Row

 注文起案シートのループ
For i = 2 To lastRowOrder
orderKey = wsOrder.Cells(i, 1).Value & wsOrder.Cells(i, 2).Value

 発注中シートのループ
For j = 2 To lastRowPurchase
If wsPurchase.Cells(j, 1).Value & wsPurchase.Cells(j, 2).Value = orderKey Then
wsOrder.Cells(i, 3).Value = wsPurchase.Cells(j, 3).Value
Exit For
End If
Next j
Next i

MsgBox "データの転記が完了しました。"
End Sub

```
</details>



	
	
マクロが正常に実行されると、「データの転記が完了しました。」というメッセージが表示されます。「注文起案シート」のC列に、「発注中」シートのC列の値が転記されているか確認します。と説明してくれましたが、**できません。**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835981/b4d627db-02be-875d-8135-6e340db3fb70.png)

#### もう一度ChatGPTに相談
エラーの意味が理解できず、エラーコードとエラーメッセージをそのままChatGPTに聞きました。すると**ファイル名の相違**をチェックするよう指摘されました。ChatGPTに入力したシート名と自分で作ったファイルのシート名が違っていたという凡ミス！！指摘されて落ち着いて確認したら問題解消。マクロが実行されました。

#### 実際につかえるようにしたい
今回このマクロ実行、計算に１０秒くらいかかりました。これはサンプルデータだから行数少ないけど実際使うのはデータがもっと多い。このままでは応用できない！ってことでまた相談。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835981/9b5456f9-0786-75ad-8406-b6dd1ff29355.png)
またわからない言葉が出てきたので質問

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835981/698b06ea-2ae2-27aa-d31d-db917dcf630a.png)

で、使い方とともに欲しい答えをくれました

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835981/dda0fc0a-c359-5218-2297-5a3ac6210841.png)



<details open><summary>完璧なコード</summary>

```rb

Sub CopyData()


Sub CopyDataOptimized()
    Dim wsOrder As Worksheet
    Dim wsPurchase As Worksheet
    Dim lastRowOrder As Long
    Dim lastRowPurchase As Long
    Dim orderKey As String
    Dim orderDict As Object
    Dim i As Long

    ' シートを設定
    Set wsOrder = ThisWorkbook.Sheets("発注起案シート")
    Set wsPurchase = ThisWorkbook.Sheets("発注中")

    ' 最終行を取得
    lastRowOrder = wsOrder.Cells(wsOrder.Rows.Count, "A").End(xlUp).Row
    lastRowPurchase = wsPurchase.Cells(wsPurchase.Rows.Count, "A").End(xlUp).Row

    ' Dictionaryの初期化
    Set orderDict = CreateObject("Scripting.Dictionary")

    ' 発注中シートのデータをDictionaryに読み込む
    For i = 2 To lastRowPurchase
        orderKey = wsPurchase.Cells(i, 1).Value & wsPurchase.Cells(i, 2).Value
        If Not orderDict.exists(orderKey) Then
            orderDict.Add orderKey, wsPurchase.Cells(i, 3).Value
        End If
    Next i

    ' 注文起案シートにデータを転記
    For i = 2 To lastRowOrder
        orderKey = wsOrder.Cells(i, 1).Value & wsOrder.Cells(i, 2).Value
        If orderDict.exists(orderKey) Then
            wsOrder.Cells(i, 3).Value = orderDict(orderKey)
        End If
    Next i

    MsgBox "データの転記が完了しました。"

    ' Dictionaryのクリーンアップ
    Set orderDict = Nothing
End Sub

```
</details>



これをつかったら・・完成しました！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835981/53855d15-3e4f-d882-1e27-f6fd1f192c6f.png)


理想の形です。クリックしてすぐに結果が出たのでこれなら実務にも活用できます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835981/7bfad020-57c4-df42-e973-adb79063d8da.png)


さらに最後にまとめもしてくれました。

 ## ChatGPTって頼りになる！
ここまでくるのにかなり時間を要しましたがわかってきたらすごく頼りになる！
うまくいっていなかった時は、返答の意味が解らずこちらが固まっていましたが、「わからない」って聞いていいんだなと理解してからは気が楽になり使いやすくなりました。わかるまで聞き続ける、あきらめないって大事！！

使いこなせるようになったら普段の業務をもっと高速化できるはず。できた時間で**現場を回る時間を増やす**ことや**チームのパフォーマンスをよくするための話し合いの時間をとる**ことに使えればいいなあと考えています。