- ベストアンサー
(VBA)重複の削除後、合計を出したい
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
行を実際に削除するのでしたら Sub Test() Dim i As Long, j As Long, LastRow As Long LastRow = Cells(Rows.Count, "A").End(xlUp).Row For i = LastRow To 2 Step -1 For j = i - 1 To 2 Step -1 If Cells(i, "A").Value = Cells(j, "A").Value And _ Cells(i, "C").Value = Cells(j, "C").Value And _ Cells(i, "D").Value = Cells(j, "D").Value Then Cells(i, "B").Value = Cells(i, "B").Value + Cells(j, "B").Value Rows(j).Delete End If Next Next End Sub
その他の回答 (2)
- kkkkkm
- ベストアンサー率66% (1719/2589)
転記したい場合、たとえばF列以降に転記する場合、AからD列をFからI列に全てコピーして行削除とほぼ同じコードで行削除ではなくセルの削除で。 Sub Test2() Dim i As Long, j As Long, LastRow As Long LastRow = Cells(Rows.Count, "A").End(xlUp).Row Cells(1, "F").Resize(LastRow, 4).Value = Range(Cells(1, "A"), Cells(LastRow, "D")).Value LastRow = Cells(Rows.Count, "F").End(xlUp).Row For i = LastRow To 2 Step -1 For j = i - 1 To 2 Step -1 If Cells(i, "F").Value = Cells(j, "F").Value And _ Cells(i, "H").Value = Cells(j, "H").Value And _ Cells(i, "I").Value = Cells(j, "I").Value Then Cells(i, "G").Value = Cells(i, "G").Value + Cells(j, "G").Value Cells(j, "F").Resize(1, 4).Delete Shift:=xlShiftUp End If Next Next End Sub
- bardfish
- ベストアンサー率28% (5029/17766)
SQLだとこれで済むんですけどね・・・ SELECT 会社名, 振出日, 満期日, Sum(金額) AS 金額 FROM テーブル1 GROUP BY 会社名, 振出日, 満期日 ExcelでもSQLを使う方法があるかもしれませんので探してみてください。 SQLServer Expressというものが無料で使えるのでデータベース作成してテーブルを作って集計を出すVIEWを作ってその結果をExcelに取り込めばマクロ/コードを作る手間はなくなります。 そのかわりSQLを勉強しないといけないですけどね… ご希望の回答ではありませんが、こういう方法もありますということで今後の検討材料として頭の片隅に捨てておいてください(^^;
お礼
bardfish さま ありがとうございます。 SQLを使うとそんなに簡単に出来るんですか...! (驚 VBAが上達したのち、accessの予定でしたがSQLも併せて学習してみたいと思います^^ ありがとうございました!
お礼
kkkkkm さま いつも教えて下さって、本当にありがとうございます...! 今回は自分が書いたコードに質問の処理を追加したかったので、 行を削除するこちらのコードを使わせて頂きたいと思います。 当初、値をつなげたキーを元に検索→集計...と考えておりましたが、 こんな綺麗なコードで済むなんて感動です。指定箇所の変更もしやすいですし。 ありがとうございました!