例えばエクセルの「統合」の機能を使い,元表を記入した都度に項目ごと集計した結果を書き出せてみます。
まず試しに「統合」の操作を実際に行ってみて,上手く使えるようになったら新しいマクロの記録で操作をマクロに録り,参考にしてみて下さい。
なお統合する際には元表の範囲の最後のセルを取得して操作しても勿論構いませんが,最後のセルを無視して十分下にある空っぽセル(たとえば6万行目まで)までを範囲指定して統合させても問題ありません。
いまマクロで元表を記入させる事までは出来ているので,ある一つの元表が「どこのセルから開始されている」かは既知です。
既存のマクロを使い,たとえばB21セルに元表の「項目」と記入されたセルがあってそれ以下のセル範囲に元データを記入したところから始めます。
sub sample1()
dim SourceRange as range
dim DestinationRange as range
set sourcerange = range("B21") '既存マクロが貼り付けた元表の「項目」セルを指定
set destinationrange = cells(1, sourcerange.column) ’そのセルの1行目セルにまとめるとする
destinationrange.consolidate _
sources:=activesheet.name & "!" & sourcerange.resize(60000,2).address(referencestyle:=xlR1C1), _
function:=xlSum, _
toprow:=True, _
leftcolumn:=True, _
createlinks:=False
end sub
実際にはあなたの既存マクロが元表を作成する都度,その元表を配置したセルを基準に(上述サンプルマクロのSoucerangeにセットして)統合結果を書き出させるように組み込んで使います。
こんばんは!
一例です。
元表はA・B列にあり、データは2行目からとします。
無理矢理って感じの方法です。
操作したいSheet見出し上で右クリック → コードの表示 → VBE画面がでますので
↓のコードをコピー&ペーストしてマクロを実行してみてください。
Sub test()
Dim i, k As Long
k = Cells(Rows.Count, 1).End(xlUp).Row
Columns(1).Insert
For i = 2 To k
If WorksheetFunction.CountIf(Range(Cells(2, 2), Cells(i, 2)), Cells(i, 2)) = 1 Then
Cells(i, 1) = WorksheetFunction.SumIf(Range("B:B"), Cells(i, 2), Range("C:C"))
End If
Next i
For i = k To 2 Step -1
If Cells(i, 1) <> "" Then
Cells(i, 3) = Cells(i, 1)
Else
Rows(i).Delete (xlUp)
End If
Next i
Columns(1).Delete
End Sub
尚、一旦マクロを実行すると元に戻せませんので別Sheetにコピー&ペーストしてマクロを試してみてください。
以上、参考になれば良いのですが・・・m(__)m