- ベストアンサー
マクロを使って注文書データを集計する方法
- 注文書のデータをマクロを使用して品番ごとに個数を集計する方法を紹介します。
- 手作業で約9000件のデータを集計するのは非常に時間がかかるため、自動化することで時間短縮を図ることができます。
- 集計結果は仕入先ごとにシートを分けて表示されます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じでしょうか。 入力も出力も列は、 ■A列:仕入先、B列:品番、C列:個数 としています。 ■また、2行目からデータがあるものとしています。 ■出力するシートは追加しています。 (見出しは書いていません) Dim SIIRE_SAKI() As String '仕入先 Dim HINBAN() As String '品番 Dim KOSUU() As Double '個数 Dim IDX As Double 'インデックス REDIM_CNT = 200 '仕入先+品番の組み合わせの最大数 ReDim SIIRE_SAKI(REDIM_CNT) ReDim HINBAN(REDIM_CNT) ReDim KOSUU(REDIM_CNT) '「集計」---------------------------------------------------------- Worksheets("Sheet1").Select '読み込みむ明細シート END_ROW = Range("A65536").End(xlUp).Row 'A列の最下行 For ii = 2 To END_ROW '2行目から最下行をループ For kk = 1 To IDX '配列をループ If Cells(ii, "A").Value = SIIRE_SAKI(kk) _ And Cells(ii, "B").Value = HINBAN(kk) Then '配列に同一の仕入先+品番が見つかった KOSUU(kk) = KOSUU(kk) + Cells(ii, "C").Value '個数を加算 FOUND# = 1 '見つかった Exit For End If Next kk If FOUND# = 0 Then '配列になかった '配列に追加 IDX = IDX + 1 SIIRE_SAKI(IDX) = Cells(ii, "A").Value HINBAN(IDX) = Cells(ii, "B").Value KOSUU(IDX) = Cells(ii, "C").Value End If FOUND# = 0 '配列になしにリセット Next ii '「書き出し」------------------------------------------------------ For ii = 1 To IDX '仕入先が前件と同じ If SIIRE_SAKI(ii) = SIIRE_SAKI(ii - 1) Then W_ROW = W_ROW + 1 Cells(W_ROW, "A").Value = SIIRE_SAKI(ii) Cells(W_ROW, "B").Value = HINBAN(ii) Cells(W_ROW, "C").Value = KOSUU(ii) '仕入先が変わった Else Worksheets.Add 'シート追加 ActiveSheet.Name = SIIRE_SAKI(ii) 'シート名を仕入先にする Worksheets(SIIRE_SAKI(ii)).Move After:=Worksheets(Worksheets.Count) '一番最後にシート移動 '書き込み Worksheets(SIIRE_SAKI(ii)).Select W_ROW = 2 Cells(W_ROW, "A").Value = SIIRE_SAKI(ii) Cells(W_ROW, "B").Value = HINBAN(ii) Cells(W_ROW, "C").Value = KOSUU(ii) End If Next ii
その他の回答 (1)
- papayuka
- ベストアンサー率45% (1388/3066)
完成イメージとは少し違うけど、ピボットテーブルでページの表示をすれば簡単に分けられますよ。 ページフィールドに「仕入先」 行フィールドに「品番」 データアイテムに「個数」 でピボットを作り、仕入先で右クリックして「ページの表示」
お礼
お礼が遅くなりすいません。 ほぼイメージどおりのものができました。 (質問内容からすれば完璧です) ここから少し手を加えて、完成度を上げていきます。 ありがとうございました。