マクロを使って注文書データを集計する方法

このQ&Aのポイント
  • 注文書のデータをマクロを使用して品番ごとに個数を集計する方法を紹介します。
  • 手作業で約9000件のデータを集計するのは非常に時間がかかるため、自動化することで時間短縮を図ることができます。
  • 集計結果は仕入先ごとにシートを分けて表示されます。
回答を見る
  • ベストアンサー

同じものを集計するマクロ

月に1度、発行した注文書のデータ(約9000件)のデータから 品番毎に発注した個数を集計しなければいけません。 約9000件もあるので、手作業だと非常に時間がかかってしまうので、 自動(マクロ)で行い、時間短縮をしたいと思っています。 どのようにすれば良いでしょうか。 サンプルの表と出来上がりなどは下記のとおりです。 サンプルデータ ---------------------- |仕入先|品番|個数|納期| ---------------------- |A1  |2222|10|05| ---------------------- |A1  |2222|12|08| ---------------------- |A1  |2222|08|10| ---------------------- |A1  |3333|10|03| ---------------------- |A2  |4444|15|04| ---------------------- |A2  |5555|10|10| ---------------------- 上表から、 1.不要な列(縦)は削除(上表では納期) 2.同じ仕入先、同じ品番のものを合計(1行にまとめる)する。 3.仕入先毎にシートを分ける。 完成した表 シート1 ----------------- |仕入先|品番|個数| ----------------- |A1  |2222|30| ----------------- |A1  |3333|10| ----------------- シート2 ----------------- |仕入先|品番|個数| ----------------- |A2  |4444|15| ----------------- |A2  |5555|10| -----------------

質問者が選んだベストアンサー

  • ベストアンサー
  • hogehage
  • ベストアンサー率50% (54/107)
回答No.1

こんな感じでしょうか。  入力も出力も列は、 ■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

smilepick
質問者

お礼

お礼が遅くなりすいません。 ほぼイメージどおりのものができました。 (質問内容からすれば完璧です) ここから少し手を加えて、完成度を上げていきます。 ありがとうございました。

その他の回答 (1)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

完成イメージとは少し違うけど、ピボットテーブルでページの表示をすれば簡単に分けられますよ。 ページフィールドに「仕入先」 行フィールドに「品番」 データアイテムに「個数」 でピボットを作り、仕入先で右クリックして「ページの表示」

関連するQ&A

  • エクセルの表の集計をVBAでやりたいのです。

    エクセルのsheet1にこのような表があります。 A B C D E 1 名称 金額 2 あああああ 10000 3 あああああ 12000 4 あああああ 9000 5 いいいいい 9500 6 いいいいい 11000 7 ううううう 15000 8 えええええ 12000 9 おおおおお 10000 10 おおおおお 14000 11 かかかかか 13000 12 ききききき 800 ・ 以下多数 この表で、それぞれ同じ名称の個数と合計金額を求めたいのです。 たとえば「ああああ」なら個数 3、合計 31000 と、D4とE4に、 「いいいい」なら個数 2、合計 25000 と、D6とE6に入れたいのです。 実際の表はデータ件数が1万件を越えますのでいちいち手で入れるわけにはいきません。 VBAでやるにはどう記述したらいいでしょうか? どうかお助けください。よろしくお願いします。

  • VBA マクロを使って、コピー ソートしたいです

    画像でシート1の状態を、マクロでシート2のようにしたいです。 なにぶん初心者なので、効率のいいスクリプトがかけません。 よろしくお願いします。 条件としては シート1には大きく分けて3つ表がありますが、実際は10個あります。 10個目までシート2上でデータがつながっている感じです。 B,G,L列の連番はデータの個数です。 シート1にあるように、表ごとに入ってる個数はばらつきます。 シート2 のA列はシート1のB,G,Lの2行目の番号が入っています。

  • エクセルで項目ごとに集計する方法

    エクセル2003を使用しています。 下のような表があるとします。(Aに品名、Bに個数) テレビ   10   冷蔵庫   10 テレビ    5  ・     ・  ・     ・ この表から品名ごとの集計、たとえばテレビ○個、冷蔵庫○個、・・・ をする方法を教えてください。 データの数は1000件弱、品名もかなりの個数があるので、表の中から自動で品名を抽出できないかと考えています。 よろしくお願いします。

  • エクセル2003で表の集計をはり付けしたら

    Aシートの表の中のデータの個数を集計して可視セルジャンプしてコピーBシートの表に行列を変えて貼り付けたらREFエラーがでました。 値だけをコピーすれば数値はきちんと貼り付けられますが これだと表を変更したときに更新してくれません。 集計したときの値は値でコピーするのが一般的なのですか? ちなみにコピーした数式は=SUBTOTAL(3,E4:E21) です。

  • Excel 条件付集計(Excel2002)

    おそらく出来ると思うのですが どうしても思いつきません。 顧客番号  日付   合計個数 001    2004/2/5  ○個 002    2004/3/8  ○個 003    2004/4/1  ○個 と言うデータがあるシート1(顧客リストのような物)と、 注文番号  顧客番号  日付   個数 A001    003    2004/1/1   1 A002    001    2004/1/3   1 A003    001    2004/2/8   2 A004    002    2004/3/10  2 A005    001    2004/3/18  3 と言うデータが入ったシート2(注文リストのような物)があるとします。 そこで顧客番号で検索して、 「シート1の日付よりあとの注文」 の個数を合計して、シート1の合計個数のところに表示する。 と言うシステムが欲しいです。(わかりにくくてすみません) つまり上の例で言うと シート1の001の合計個数には シート2の001のデータで2004年2月5日以降の個数だけを合計して、 「5個」と表示されて欲しいのです。 多分関数で行けると思うのですが、 無理でしたらマクロでも構いません。 お判りになられる方がいましたらぜひよろしくお願いします。

  • オートフィルタの抽出結果をマクロで表示するには?

    A 1000  D 200 A 500 A 1000 B 2000 上表をオートフィルタでA及び1000で絞ると左下に『4レコードで2個です。』と抽出個数が表示されると思いますが、その個数(2個)をマクロを使って表示させるにはどうすればいいでしょうか? マクロの記録でオートフィルタをかけるところまではできるのですが、個数表示で壁にぶち当たっています。 ちなみに1000を検索させて個数を出すという方法もありますが、2行目のデータが他の行にもあるため、データを検索させて個数を導くマクロは作られないので、オートフィルタからのマクロを作成しています。 マクロ初心者のため、分かる方いらっしゃいましたらご教授をお願いします。

  • VBAで集計をしたい

    エクセル2003を使っています。大きな表があり、ファイルサイズも大きい為、VBAで処理したい 表構成: 表全体の大きさは、SHEET1 (A1:CQ5000) SHEET2 (A1:CQ10000)程あり、品目種類は600種類、1品目につき品番は5~50種類ほど構成が付いております SHEET1,B5:B8には、4行分を結合セルにした品目があり、E3:CQ3 (3ケ月分、日付), E4:CQ4(曜日) 、E5:CQ5(計画予定数)となって数値データが入っています、 SHEET2, 行E1:CO3(3ケ月分日付),、A2:A10000列には(SHEET1同様の品目),B2:B10000には品目に使う部品各種の品番、D2:D10000には品目1台あたりの使用数などがあります。 質問内容: シート1品目、シート2品目を照合し、シート1品目毎の計画予定数×シート2品目毎使用数の計算結果を、シート2該当セルに表示させたい、 シート2該当セルはE2:CQ10000です、宜しくおねがいします。

  • Excel VBA 集計方法

    1つのファイルに2つのシートがあります。 集計結果を反映するシートと元データのシートで別れています。 <元データシート> 品番 品名    バージョン  数量 11 ABC Soft      2000 4 22 XYS Beta 2003 3 23 HU22 hyoukaban 2000 4 45 298 Software 1998 7 22 XYS Beta 2003 11 25 XYS Beta 2008 3 <集計結果シート> 品名 バージョン 数量 XYS Beta 2008 3 XYS Beta 2003 14 298 Software 1998 7 ABC Soft 2000 4 HU22 hyoukaban 2000 4 ※表がずれていると思います。 バージョンは4桁の数字です。 マクロを実行して、自動的に元データの情報を集計して 集計結果シートに反映したいと思います。 (1)品番は一意の番号です (2)同じ品名ごとに並べて、同じ品名が見つかった場合はバージョンの新しいものが上になるようにしたいです。 (3)品番は集計結果シートには反映していません。 集計結果シートのような結果にするには、どのようなマクロを書けば いいのか悩んでいます。 サンプルコード等参考になるものがございましたら、お教えください。

  • エクセルの集計

    エクセルでの集計(集計と呼べるか解りませんが)についてです。 A列に品番 A-1・A-2・A3・・・が入力されています。B列に品番の残数量 300・500・500・・・が入力されています。品番と残数量で1つの表になっています。 上記の表を基に、他のセルに使用数量を入力して行くと、使用した数量内の品番と数量が自動で集計され、使用数量の下や隣に表示される様にしたいのですがどの様な方法があるでしょうか? (例)C1に使用数量:500と入力すると指定したセル(C2~で品番と数量は別のセルに分けます)にA-1:300 / A-2:200 D1に500と入力すると指定したセル(D2~)にA-2:300 / A-3:200 と、表の上(下からの場合もあります)から使った分を引いて行かれ、集計され、表示したいのです。 宜しくお願いします。 補足 使用した数量と使用した内訳は同じシート内で別の表としています。入力した使用数量の中に、どの品番が何キロ使用されていて、その品番が無くなったら次の品番を何キロ使用したかを自動で集計したいのです。

  • Excel 2007 マクロ 表の集計について

    Excel 2007 マクロ 表の集計について 2つのシート(Sheet1とSheet2)の情報を集計して Sheet3に反映するマクロを考えています。 (1)Sheet1のC列、D列、E列とSheet2のC列が空欄の場合は  Sheet3に反映しません。 (2)Sheet1のC列、D列、E列とSheet2のC列のいずれかに数値が  入っている場合にはSheet3に行を反映します。  ※Sheet3に反映する際に、Sheet1とSheet2のキー(A列)は  反映しません。  各Sheetの表は画像を添付します。  どのようなマクロを作成すればよろしいでしょうか。  マクロの超初心者です。  マクロのサンプルをご紹介頂けますでしょうか。

専門家に質問してみよう