• 締切済み

Excelマクロ 重複データの件数と合計

いつも参考にさせていただいております。 仕事で行き詰ってしまい、質問しました。 アドバイスをいただきたくお願いいたします。 エクセルのマクロをVBで作成したいのですが、 以下のような操作を行いたいと考えております。 Aシートが存在します。 ■Aシート ID 名前 光熱費 001 上田 100 001 上田 300 002 丸本 300 002 丸本 0 002 丸本 200 003 土井 100 これをBシートに重複しているデータをまとめて、 件数と金額の合計をもっていくような操作を考えています。 ■Bシート ID 名前 件数 光熱費 001 上田 2 400 002 丸本 3 500 003 土井 2 0 また、さらにC・D・EシートにはBシートの詳細を記載します。 ■Cシート ID 名前  光熱費 001 上田   100 001 上田   300 ■Dシート ID 名前  光熱費 002 丸本 300 002 丸本 0 002 丸本 200 (Eシートの同様に記載します) VBA初心者のためなかなか思うようにいかず、質問させていただきました。よろしくおねがいいたします。

みんなの回答

  • hotosys
  • ベストアンサー率67% (97/143)
回答No.3

こんなのではどうでしょうか? Sub sample() 'シートA以外の削除 Dim ws As Worksheet Application.DisplayAlerts = False For Each ws In ThisWorkbook.Worksheets If ws.Name <> "A" Then ws.Delete Next Application.DisplayAlerts = True 'シートBの作成 Worksheets.Add(after:=Sheets(Sheets.Count)).Name = "B" Sheets("A").Columns("A:B").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Sheets("B").Range("A1"), Unique:=True With Sheets("B").Range("C2:C" & Sheets("B").Range("A" & Rows.Count).End(xlUp).Row) .Formula = "=SUMIF(A!B:B,B2,A!C:C)" .Copy .PasteSpecial Paste:=xlPasteValues End With '明細シート作成 Dim r As Integer 'シートBのID毎をフィルタして明細シート作成 For r = 2 To Sheets("B").Range("A" & Rows.Count).End(xlUp).Row 'シートAをシートBのIDでの値で絞込み Sheets("A").Cells.AutoFilter Field:=1, Criteria1:=Sheets("B").Range("A" & r).Value '明細シート作成 Worksheets.Add(after:=Sheets(Sheets.Count)).Name = Chr(Asc("A") + r) Sheets("A").Cells.SpecialCells(xlCellTypeVisible).Copy Destination:=ActiveSheet.Range("A1") Next '最後にAutoFilterを解除する Sheets("A").Cells.AutoFilter End Sub

  • OtenkiAme
  • ベストアンサー率77% (69/89)
回答No.2

こんにちは。 > VBA初心者のためなかなか思うようにいかず、… 思うようにいかないコードを提示されては如何でしょうか。 > 件数と金額の合計をもっていくような操作を考えています。 手作業ではできるのですよね。 集計やフィルタを使うとか、ピボットテーブルを使う、 とかで一般機能だけでできる内容と思います。 「VBA初心者」とおっしゃられるなら、まず、作業(エクセルでの操作)の手順書を書くことから始めることをお勧めします。 作業の手順書ができたら作業を記録してコードを取得し、取得したコードの編集で判らないところをご質問されては如何でしょうか。 一例でピボットテーブルを利用した方法を書いてみました。 (おおまかな作業ですが…) 本格的にマクロ化したいのであれば、シート名のチェックが必要だったり、繰り返し処理で簡便にしたりしますが、とりあえず、マクロの自動記録で作業を記録して取得したコードの編集に取り組んでみては如何でしょうか。 頑張ってください。 ワークシートを挿入して作業用シートを用意する Aシートのデータを元に作業用シートのA1を軸にピボットテーブルを作成する ピボットテーブルのオートフォーマットを無しにする ピボットテーブルのオプションで総計を非表示に設定する ステンシルレイアウトの行エリアに「ID、名前」を置く 「ID」の集計をなしにする データエリアに「光熱費」を2回置く 一つの光熱費の集計方法を”データの個数”にして名前を「件数」にする 作業用シートをコピーし、Bシートとする Bシートのピボットテーブルの集計結果全体をコピーする 形式を選択して貼り付けで数値化する 作業用シートに戻る 「件数」フィールドをレイアウトから削除する 光熱費の001の金額セルを選択してダブルクリックする 作成されたシートをCシートとする 作業用シートに戻る 光熱費の002の金額セルを選択してダブルクリックする 作成されたシートをDシートとする 作業用シートに戻る 光熱費の003の金額セルを選択してダブルクリックする 作成されたシートをEシートとする 作業用シートに戻る

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

Excel(エクセル) VBA入門:Dictionaryオブジェクトを利用する http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_dictionary.html Excel(エクセル) VBA入門:オートフィルタ(AutoFilter)でのデータ抽出 http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_autofilter.html あたりが参考になるかと。

関連するQ&A