- ベストアンサー
エクセルでのデータ集計に悩んでいます
- エクセルでのデータ集計について悩んでいます。元表の項目種類を集計し、まとめ表に金額集計をしたいのですが、元表の項目数や範囲が毎回異なるため、どのように対応すれば良いでしょうか?初心者でも理解できるように教えていただけると助かります。
- マクロを使用してエクセルファイルを開くと、別のエクセルファイルからデータを読み込み、まとめ表までの結果が自動的に計算されます。しかし、毎回変わる元表のデータをまとめ表に集計する際に困っています。ピボットテーブルを使用すれば良いのかもしれませんが、範囲やデータが変わるため、再計算が必要になると思います。マクロの初心者であり、頭がごちゃごちゃしていてわかりません。どのような方法を使用すれば良いでしょうか?わかりやすく教えていただけると助かります。
- エクセルでのデータ集計に悩んでいます。元表の項目種類を集計し、まとめ表に金額集計をしたいのですが、元表の項目数や範囲が毎回異なるため、どのように対応すれば良いでしょうか?初心者でも理解できるように教えていただけると助かります。マクロを使用してエクセルファイルを開くと、別のエクセルファイルからデータを読み込み、まとめ表までの結果が自動的に計算されます。しかし、毎回変わる元表のデータをまとめ表に集計する際に困っています。ピボットテーブルを使用すれば良いのかもしれませんが、範囲やデータが変わるため、再計算が必要になると思います。マクロの初心者であり、頭がごちゃごちゃしていてわかりません。どのような方法を使用すれば良いでしょうか?わかりやすく教えていただけると助かります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
例えばエクセルの「統合」の機能を使い,元表を記入した都度に項目ごと集計した結果を書き出せてみます。 まず試しに「統合」の操作を実際に行ってみて,上手く使えるようになったら新しいマクロの記録で操作をマクロに録り,参考にしてみて下さい。 なお統合する際には元表の範囲の最後のセルを取得して操作しても勿論構いませんが,最後のセルを無視して十分下にある空っぽセル(たとえば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にセットして)統合結果を書き出させるように組み込んで使います。
その他の回答 (2)
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 一例です。 元表は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
- mitarashi
- ベストアンサー率59% (574/965)
ピボットテーブルのデータの更新だけなら、下記でいかがでしょうか。 データはA1から、A,B列にわたって存在し、ピボットテーブルは同じシート中に1個だけ存在するとします。 Sub test() ActiveSheet.PivotTables(1).SourceData = ActiveSheet.Name & "!" & Range(Range("A1"), Range("A" & Rows.Count).End(xlUp)).Resize(, 2).Address End Sub 同じシート内なら、Activesheet.Name & "!" & は不要かもしれません。