• ベストアンサー

抽出したデータを他のシートにコピーし集計したい

初心者ですがよろしくお願いします。 シート1の1列目に商品コード゛、2列目に部署コード、3列目に金額が記入されています。 商品コード、部署コード両方が同じ行毎にシート2に集計し、合計金額を計算させ任意の(或いは集計表のすぐ下の)セルに入力させるにはどうすればいいでしょうか? 商品コード、部署コード両方が同じ集まりはたくさん10程度できますが同じシートに横に並べて集計させたいです。  よろしくお願いします。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.3

#イミフメイです: >同じシートに横に並べて集計させたいです。 マクロを使うには,次の通りにします。 準備: シート1のA:C列に元ネタを準備する 言わずもがなですが,1行目にタイトル行として2行目からデータを記入する シート2に集計する 手順: ALT+F11を押す 現れた画面で挿入メニューから標準モジュールを挿入する 現れたシートに下記をコピー貼り付ける sub macro1()  dim r as long  worksheets("Sheet2").range("A:C").clearcontents  worksheets("Sheet1").select  r = range("A65536").end(xlup).row ’抽出する  range("A1:B" & r).advancedfilter _   action:=xlfiltercopy, _   criteriarange:=range("A1:B" & r), _   copytorange:=worksheets("Sheet2").range("A1:B1"), _   unique:=true ’集計する  worksheets("Sheet2").select  range("C2:C" & range("A65536").end(xlup).row).formula = "=SUMPRODUCT((Sheet1!A$1:A$" & r & "=A2)*(Sheet1!B$1:B$" & r & "=B2), Sheet1!C$1:C$" & r & ")" end sub ファイルメニューから終了してエクセルに戻る ALT+F8を押してマクロを実行する。 #元リストが5000行を超えるような場合は,(マクロは止めて)ピボットテーブルレポートを使います。

nagattyu4761
質問者

お礼

 ご教授ありがとうございます。 おかげさまで目的が達成できました。 どうもありがとうございました。

その他の回答 (2)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんにちは! 横からお邪魔します。 No.1さんの補足に >質問内容をマクロにて実施したいです とありましたので、一例です。 同一SheetではなくSheet2に表示するようにしてみました。 Sheet1のSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 Sub test() 'この行から Dim i, k As Long Dim ws As Worksheet Set ws = Worksheets(2) Application.ScreenUpdating = False ws.Cells.ClearContents With ws.Cells(1, 1) .Value = Cells(1, 1) .Offset(1) = Cells(1, 2) .Offset(2) = "合計" End With Columns(1).Insert For i = 2 To Cells(Rows.Count, 2).End(xlUp).Row Cells(i, 1) = Cells(i, 2) & "_" & Cells(i, 3) Next i For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row If WorksheetFunction.CountIf(Range(Cells(2, 1), Cells(i, 1)), Cells(i, 1)) = 1 Then With ws.Cells(1, Columns.Count).End(xlToLeft).Offset(, 1) .Value = Cells(i, 2) .Offset(1) = Cells(i, 3) End With End If Next i k = ws.Cells(1, Columns.Count).End(xlToLeft).Column For i = 2 To k ws.Cells(3, i) = WorksheetFunction.SumIf(Columns(1), ws.Cells(1, i) & "_" & ws.Cells(2, i), Columns(4)) Next i Columns(1).Delete Application.ScreenUpdating = True End Sub 'この行まで ※ 同一Sheetに表示したい場合はこれをコピー&ペーストしてください。 ※ もしコード順に表示したい場合は元データを並び替えておく必要があります。 参考になりますかね?m(_ _)m

nagattyu4761
質問者

お礼

  ご教授ありがとうございます。 希望のとおりだったのですが、 僕には難しすぎて自分でまったく手を加えることができず 今回は使えませんでした。「 もっと勉強します。 どうもありがとうございました。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

一例です。 集計表は縦並びになりますが如何でしょうか。 (1)シート2データをコピー (2)4列目に=A2&B2を入力→下方向にコピー (3)シート2を並び替え(4列を最優先) (4)データ→集計(又は小計)機能から計算方法は「合計」、集計フィルードは「金額列」→OK

nagattyu4761
質問者

補足

  ご教授ありがとうございます。 重要な内容を書き忘れました。 質問内容をマクロにて実施したいです。 よろしくお願いします。