1
0

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

Last updated at Posted at 2024-09-01

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

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

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

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

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

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

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

image.png

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

1.まとめたいデータを一つのフォルダに入れる
2.エクセルの左上 データ⇒データの取得⇒フォルダからでデータ集約したいフォルダを指定
image.png
83.これを最後にデータの結合および読み込み を選択
image.png

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

image.png

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

2.完成したシートを作業シートに合体する

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

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

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

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

ChatGPTに正確に要求を伝える

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

直接入力するとうっかりENTERキーを押してうまくいかなかったので、一旦テキストに記載して貼り付けました。箇条書きのほうが自分の頭を整理しやすいし、正確に伝わったようです。
image.png

image.png

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

image.png
image.png

使い方はわかりました。

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

1.エクセルファイルのオプションを選択し マクロを有効にする
image.png
2.ファイルの保存形式を.xlsm にする
image.png

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

早速コード記入

書いてもらったコード
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

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

image.png

もう一度ChatGPTに相談

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

実際につかえるようにしたい

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

image.png
またわからない言葉が出てきたので質問

image.png

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

image.png

完璧なコード

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

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

image.png

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

image.png

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

ChatGPTって頼りになる!

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

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

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0