
VBAが分かりかけてきた初心者です。皆様のお力添えをお願いいたします。
同じ行に重複する項目があり、金額だけ違う一覧があります。
A4:D4はセルを結合して「2020年9月」、Eを飛ばしてF4:I4を結合して「2020年10月」、Jを飛ばしてと毎月つながる元データのシートがあります。
A5 B5 C5 D5
管理番号 施設名 数 金額
A,B,Cは重複する可能性があり、1つにまとめ、
Dの金額を合計したいです。
A,B,Cはその都度違います。
このような場合のVBAを教えてください。
画像を添付しますので、ご教示をお願い致します。
お手数ではございますが、どうぞよろしくお願いいたします。

No.7ベストアンサー
- 回答日時:
>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
ご返信が遅くなり申し訳ございません。
>C列の「数」は集計項目では無いということで良いんですね?
私のつたない説明でご理解していただき大変ありがたいです。
思っていた通りに出来ました。本当に感謝いたします!
勉強させていただきました。またわからないことが出来た時にお世話になると思いますが、その際はどうぞよろしくお願いいたします。
心からお礼を申し上げます。
No.5
- 回答日時:
テータベース的な使い方をする場合、月別にせず全データを縦方向に記入していき、年月のデータはもう一列追加してそこに記入するのがよいです。
あと、セルの結合は避けたほうがよいです。
自分なら添付図のようなデータにして、とにかく縦方向にデータを蓄積していきます。
そして、フィルター機能を使うことで、月別や管理番号別に表示することは容易になります。
当然、条件ごと(2020年9月のみや施設『あ』のみなど)の合計値や平均値を出すことも容易です。その場合には、SUM関数やAVERAGE関数ではなくSUBTOTAL関数を使います。
いまからでも遅くないと思いますよ。

No.4
- 回答日時:
月別にシートを分けちゃう人とか、結構、多いですけど、データの管理に慣れている人は、まず、やらないです!
ご質問のようなレイアウトも、それと同類です。基礎データの管理方法としては、NGです。
まずは、そこから見直した方が、今後の展開が楽になると思います。
No.3
- 回答日時:
No2です。
補足します。VBAを知らない人にとっては、VBAを作った人が保守をするのが当たり前だと思っています。難色をしめしたら「無責任だ」、「勝手にこんなのつくって」、あげくのはては「こんなのは使い物にならない」なんていわれますよ。(経験者です)
VBAは作りやすいですが、セルの位置などに依存します。ですから一列挿入したり移動したらそのセルの座標を変更しなければなりません。このあたりは関数でも同じなのですが、関数の方がはるかに簡単です。関数ならばVBAほど敷居が高くありません。
ですのでVBAではなく関数で作成することをお勧めします。
No.2
- 回答日時:
合計の集計ならばSUMIF関数で可能だと思いますが……
VBAで組むと条件が変わった場合などのメンテナンスが面倒ですよ。
特に担当者がかわったりすると、いつまでたってもヘルプディスクになります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
VBAで重複データを合算したい
Excel(エクセル)
-
重複行を削除して数値を合算したい(合算列が多い)
Excel(エクセル)
-
重複するIDのデータを1行にまとめるvbaのコード
Access(アクセス)
-
-
4
excel VBA 2つのシートの特定の列を比較して同じ値のセルがあったらその行を上書きしたい
Excel(エクセル)
-
5
VBAで重複データを合算したい(時間)
Excel(エクセル)
-
6
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
7
重複データをまとめて合計を合算する
Visual Basic(VBA)
-
8
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
9
vba 重複データ合算
Visual Basic(VBA)
-
10
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
11
VBAで重複するデータがあれば1個だけ残して他の重複セルを"(空白)にしたいのですが
Excel(エクセル)
-
12
vba 2つの条件が一致したらコピーして別シートに値のみ貼り付け
Visual Basic(VBA)
-
13
指定した文字があった場合、その行を削除するマクロが欲しいです
Excel(エクセル)
-
14
excelのマクロで該当処理できなければ飛ばして進むにはどうすればよいのでしょうか
Visual Basic(VBA)
-
15
重複データの合算(VBA)
Visual Basic(VBA)
-
16
【Excel VBA】複数ある特定の文字列を含む行を削除
Excel(エクセル)
-
17
エクセルvbaで重複データを加算したい
Excel(エクセル)
-
18
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
19
EXCEL VBAで、セルの文字列の前後に文字を入力する方法は?
その他(Microsoft Office)
-
20
実行時エラー 438になった時の対処法を教えて下さい。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フィルタをしても最下行を常に...
-
【エクセル】オートフィルタで...
-
エクセルの小計を自動的に色づ...
-
ピボットテーブルでは時間の表...
-
VBAで重複する項目を1つにまと...
-
エクセル、リソース不足エラー...
-
エクセルで特定の色の数字だけ...
-
ピボットテーブルで同じデータ...
-
ピボットテーブルの自動計算を...
-
EXCEL 重複データの集計の仕方
-
エクセルでアンケート集計した...
-
ピボットを更新すると数式が入...
-
ピボットテーブルのページエリ...
-
常にタイトル行と合計行を表示...
-
同一行上に指定範囲の数字が何...
-
いい機能だけど、毎回めんどく...
-
ピボットの集計方法「合計」初...
-
エクセル条件付書式で指定の時...
-
同一セルに日時があるものを日...
-
エクセルで円グラフに引き出し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【エクセル】オートフィルタで...
-
ピボットテーブルでは時間の表...
-
フィルタをしても最下行を常に...
-
VBAで重複する項目を1つにまと...
-
エクセル、リソース不足エラー...
-
ピボットを更新すると数式が入...
-
ピボットテーブルのページエリ...
-
エクセル 関数を使った横方向の...
-
エクセルで特定の色の数字だけ...
-
アンケートの集計
-
Excelの集計結果だけをコピー貼...
-
excelで集計の合計を降順に並べ...
-
ピボットテーブルで同じデータ...
-
ピボットテーブルの自動計算を...
-
エクセル 日付(年月日)の合...
-
エクセルについてご教示願いたい。
-
いい機能だけど、毎回めんどく...
-
常にタイトル行と合計行を表示...
-
エクセル 最小値を求める関数...
-
ピボットの集計方法「合計」初...
おすすめ情報
月別で別のシートに管理番号の合計値を表示したいと思っております。
よろしくお願いいたします。
アドバイスをありがとうございます。関数でも何回も試してはみたのですが、管理番号が毎回違う、件数も多い等、毎回時間を取られてしまいもっと時短したいと思い助けていただきたく質問させていただきました。自力でももう少し頑張ってみますが出来ればVBAで行いたいと思っております。よろしくお願いいたします。