プロが教えるわが家の防犯対策術!

VBAが分かりかけてきた初心者です。皆様のお力添えをお願いいたします。

同じ行に重複する項目があり、金額だけ違う一覧があります。
A4:D4はセルを結合して「2020年9月」、Eを飛ばしてF4:I4を結合して「2020年10月」、Jを飛ばしてと毎月つながる元データのシートがあります。
A5     B5   C5 D5
管理番号  施設名 数 金額
A,B,Cは重複する可能性があり、1つにまとめ、
Dの金額を合計したいです。
A,B,Cはその都度違います。

このような場合のVBAを教えてください。
画像を添付しますので、ご教示をお願い致します。

お手数ではございますが、どうぞよろしくお願いいたします。

「VBAで重複する項目を1つにまとめて金額」の質問画像

質問者からの補足コメント

  • 月別で別のシートに管理番号の合計値を表示したいと思っております。
    よろしくお願いいたします。

    「VBAで重複する項目を1つにまとめて金額」の補足画像1
      補足日時:2020/11/14 04:51
  • アドバイスをありがとうございます。関数でも何回も試してはみたのですが、管理番号が毎回違う、件数も多い等、毎回時間を取られてしまいもっと時短したいと思い助けていただきたく質問させていただきました。自力でももう少し頑張ってみますが出来ればVBAで行いたいと思っております。よろしくお願いいたします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2020/11/15 01:51

A 回答 (6件)

>A,B,Cは重複する可能性があり、1つにまとめ、Dの金額を合計したいです。

A,B,Cはその都度違います。

C列の「数」は集計項目では無いということで良いんですね?
それを前提にコードを書いてみました。こんな感じです。
もし、「数」の集計が必要な場合は、コードを理解して、ご自分で改修してくださいね!!
ちなみに、元データのシート名は、「Sheet1」になっていますので、必要に応じて修正して下さい。

Sub sample()
Dim ra As Range
Dim rc As Range
Dim r As Range
For Each ra In Sheets("Sheet1").Rows(4).SpecialCells(xlCellTypeConstants, 23).Areas
Set rc = ra.CurrentRegion
rc.Copy
With Sheets.Add(After:=Sheets(Sheets.Count))
.Paste
With Range(.Range("A2"), .Cells.SpecialCells(xlCellTypeLastCell))
.RemoveDuplicates Columns:=Array(1, 2, 3), Header:=xlYes
End With
For Each r In .Columns("D").SpecialCells(xlCellTypeConstants, 1)
r.Value = WorksheetFunction.SumIfs(rc.Columns("D"), rc.Columns("A"), r.Offset(, -3), rc.Columns("B"), r.Offset(, -2))
Next r
End With
Next ra
End Sub
    • good
    • 0
この回答へのお礼

ご返信が遅くなり申し訳ございません。
>C列の「数」は集計項目では無いということで良いんですね?
私のつたない説明でご理解していただき大変ありがたいです。
思っていた通りに出来ました。本当に感謝いたします!
勉強させていただきました。またわからないことが出来た時にお世話になると思いますが、その際はどうぞよろしくお願いいたします。
心からお礼を申し上げます。

お礼日時:2020/11/16 22:51

テータベース的な使い方をする場合、月別にせず全データを縦方向に記入していき、年月のデータはもう一列追加してそこに記入するのがよいです。


あと、セルの結合は避けたほうがよいです。
自分なら添付図のようなデータにして、とにかく縦方向にデータを蓄積していきます。


そして、フィルター機能を使うことで、月別や管理番号別に表示することは容易になります。
当然、条件ごと(2020年9月のみや施設『あ』のみなど)の合計値や平均値を出すことも容易です。その場合には、SUM関数やAVERAGE関数ではなくSUBTOTAL関数を使います。

いまからでも遅くないと思いますよ。
「VBAで重複する項目を1つにまとめて金額」の回答画像5
    • good
    • 0
この回答へのお礼

ありがとうございます。上司指定の業務ですので、フォームが決まっております。頑張ってみます。

お礼日時:2020/11/15 01:56

月別にシートを分けちゃう人とか、結構、多いですけど、データの管理に慣れている人は、まず、やらないです!


ご質問のようなレイアウトも、それと同類です。基礎データの管理方法としては、NGです。
まずは、そこから見直した方が、今後の展開が楽になると思います。
    • good
    • 1
この回答へのお礼

ありがとうございます。上司指定の業務ですので、フォームが決まっております。頑張ってみます。

お礼日時:2020/11/15 01:56

No2です。

補足します。

VBAを知らない人にとっては、VBAを作った人が保守をするのが当たり前だと思っています。難色をしめしたら「無責任だ」、「勝手にこんなのつくって」、あげくのはては「こんなのは使い物にならない」なんていわれますよ。(経験者です)

VBAは作りやすいですが、セルの位置などに依存します。ですから一列挿入したり移動したらそのセルの座標を変更しなければなりません。このあたりは関数でも同じなのですが、関数の方がはるかに簡単です。関数ならばVBAほど敷居が高くありません。

ですのでVBAではなく関数で作成することをお勧めします。
    • good
    • 0
この回答へのお礼

ありがとうございます。頑張ってみます。

お礼日時:2020/11/15 01:57

合計の集計ならばSUMIF関数で可能だと思いますが……


VBAで組むと条件が変わった場合などのメンテナンスが面倒ですよ。

特に担当者がかわったりすると、いつまでたってもヘルプディスクになります。
    • good
    • 1

統合でできますが、VBAでないとダメなんですかね?

この回答への補足あり
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A