• 締切済み

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

  • Excel 重複データーのカウント

    Excelの関数に対する質問です。   =COUNTIF(A1:E1,A1) はA1と重複するデータを求めますが、この方法ではなく A B C D E 0 A A B C D 1 A A B C C 2 このように 行に重複するデータのデータ件数をいっきに求められる関数があるのでしょうか? それともそれぞれのデータを=COUNTIF(A1:E1,A1)~でそれぞれもとめた後、それを合計しなければならないのでしょうか? よろしくお願いします。

  • 【エクセル関数】重複データをグループ化して件数取得

    エクセル初心者です。どうぞ、よろしくお願いいたします。 ある列のデータの件数をカウントしたいのですが、 重複データをグループ化した形で件数を割り出したいのですが 色々試したのですが、わかりません。 (COUNTIF等試してみたのですが。。) 下記に例を書いてみました。 初歩的な質問で大変申し訳ありませんが、わかる方 どうぞ、方法(サンプル)を教えていただけると助かります。 宜しくお願いいたしますm(_ _)m (例) 項目 ----- A A A B B C D D E F ----- 6 ← 件数は「6」と表示したいのです。

  • エクセル 重複のデーター

    Sheet1  A   B       2 A社 商品1      3 B社 商品2    4 A社 商品5   5 C社 商品4     6 F社 商品1  7 D社 商品3    8 E社 商品6    9 C社 商品2 Sheet2 A   B       1 A社       2 B社     3 C社    4 F社      5 G社   6 D社     7 E社     上記のようにSheet1の社名をSheet2に重複の無いように関数で抽出できないでしょうか? 尚、社名は5・6社のとこもあれば30社以上になることもあります 社名の順番は問いません  よろしくお願いします。    

  • エクセル 重複データの抽出

    エクセルを使って重複データをチェックしようと思っていCOUNTIFで試したのですがうまくいきません・・・ご存知の方教えてください。m(__)m   A     B       C         D       E     F   店番  顧客番号  氏名(カナ)   電話番号   住所1   住所2 という表の電話番号が重複する先を抽出したいのです。データ件数は約3000件ほどあります。できれば重複したデータは別のシートに店番順に表示をしたいのですが関数でできるのでしょうか?

  • 重複するデータの抽出について(エクセル)

    エクセル2003にて重複するデータの取り出しをしたいのですが、 わからないので教えてください。 例えば   A列   B列   C列    D列    E列・・・ 1  色  1回目  2回目  3回目   4回目 2  赤   あ    a      A       0 3  白   い    b      B       1 4  黄   う    c      C       2 5  黄   え    d      D       3 6  黒   お    e      E       4 7  赤   か    f      F       5 : このデータの中から、別のシートのA1に 赤と入力したら、B1にD列のA・Fを抽出 黄と入力したら、B1にD列のC・Dを抽出をしたいです。 VLOOKUP関数を使用してみたのですが、 赤と入力すると、D列のA(1番上のデータ)のみしか抽出出来ず、Fが抽出されません。 重複するデータがあるのはA列のみで、D列には重複するデータはありません。 わかりにくい文章ですみませんが、よろしくお願いします。

  • ◆◆急募◆◆ エクセル 重複するデータの抽出について

    データの入力された2枚のA、Bシートが同じブックにあります。 <Aシート> D2~D500まで顧客番号が入力されています。 <Bシート> C2~C600まで顧客番号が入力されています。 AシートとBシートの顧客番号はいくつか重複しています。 その重複している番号をBシートのどこかのセルに”重複”と表示したいのですが、その方法が分かりません。最終的にオートフィルタで重複と重複していないものを分けたいのです。 大至急教えてください!宜しくお願いします。

  • 【エクセル】重複データ抽出時にうまくいかない

    エクセル2003で、[データ]→[フィルタ]→[フィルタオプションの設定]で下記のように 設定して重複データを省きました、 ・「指定した範囲」にチェック ・「リスト範囲」に$A$1:$A$13を入力。 ・「抽出範囲」に$B$1を入力 ・「重複するレコードは無視する」にチェック の条件で実行すると。 [元データ]  A列 1 a 2 a 3 b 4 b 5 c 6 c 7 c 8 d 9 d 10 d 11 e 12 e 13 e が [フィルタ実行後]  A列  B列 1 a  a 2 a  a 3 b  b 4 b  c 5 c  d 6 c  e 7 c 8 d 9 d 10 d 11 e 12 e 13 e の様にB列でaが2つ出てしまいます。 なにが原因でしょうか?

  • EXCELでデータ照合

    こんにちは! Excelで、 一つ目のシート(SHEET1)に    A         B      C         D        E             1  名前      ID       住所      評価     性別 2  花子    00456    江戸川区    B    女 3  太郎    12360    港区       C     男  : 1987 という風に入っていて、 別のシート(SHEET2)には A         B         C         D         E     1    名前    ID     評価    所属     年齢 2    洋子    23459   (空欄)    さくら組      10 3   太郎    12360    (空欄)   もも組        8 : 1625 という風に、SHEET1とは行も列も違う順序で入っています。 SHEET1のIDナンバーに対応する評価を SHEET2のIDが同じであればC列の(空欄)にその人の評価を 自動的に入るように設定するにはどうすれば よいのでしょうか? 基本的な質問ですいません。よろしくお願いいたします!

  • 【エクセル】重複データを見つける?関数

    前月の実績を表した以下の様な統計表が1シートであります。   A  B  C  D  E  F … 1 xx  6  aa  3  zz  6 2 aa  3  yy  2  aa  3 3 zz  6  bb  4  bb  4 4 yy  2  cc  1  xx  6 5 ・ この表の見方は、A列とB列、C列とD列・・・とペアになっていてA&B列が某月の1日、C&D列が某月の2日…を表しています。 xxとかaaというのがIDみたいなもので、その右のセルの数字は、その月に合計で何回メールを送信したかを表しています。 上の表で具体的に説明しますと、ID「xx」は今月合計で6回メールを送信したということを表しています。ID「aa」だと3回ということです。 また表を縦に見て、某月1日にメールを送ったのはID「xx」「aa」「zz」「yy」だという事も表しています。 注意して欲しいのは、ID「xx」が某月1日に6回メールを送ったのではなく、某月一ヶ月間の合計で6回送ったという事を表しているということです。 この表を使ってやりたいことは、某月にメールを送信した回数の多いIDベスト10を知りたいのです。 実際にはこの表は膨大(1シート内ですが)で数千のIDがある事に加え、更にIDが重複して(上の表だとID「xx」が1日と3日にある)しまっているために、ベスト10を調べるのに目視で確認している状況です。 (ある列を並び替えて回数の多かったIDが他の列で重複していないか一つずつ確認しています・・・) こういった表で、簡単に上位が判る関数などの方法があれば教えていただきたく質問しました。 どうぞ宜しくお願いします。 説明がわかりにくかったかもしれません。 補足致しますのでわかりにくかった点がございましたらご指摘ください。

  • エクセルデータを人別・かつ区分別に、件数と成績の集計したいのですが

    エクセルデータを人別・かつ区分別に、件数と成績の集計したいのですが 名前 区分 件数 成績 A カ 1 10 A キ 1 20 A キ 1 10 B カ 1  4 データとは別のシートに集計をしたいと思っています また、データシートは名前別に複数あります 名前 区分 件数 成績 Aさん カ 1 10 Aさん カ 1 20 Aさん キ 1 10 Bさん キ 1  5 Bさん ク 1 20 Cさん カ 1 10 Cさん ク 1 10 ・ ・ これらのデータを Aさん:カの合計・件数と成績 Aさん:キの合計・件数と成績 Aさん:クの合計・件数と成績 Bさん:カの合計・件数と成績 Bさん:キの合計・件数と成績 Bさん:クの合計・件数と成績 Cさん:カの合計・件数と成績 Cさん:キの合計・件数と成績 Cさん:クの合計・件数と成績 というように集計したいです データシートが複数なため、ピボットテーブルでもきびしいです

専門家に質問してみよう