- ベストアンサー
エクセルの表の集計をVBAでやりたいのです。
エクセルのsheet1にこのような表があります。 A B C D E 1 名称 金額 2 あああああ 10000 3 あああああ 12000 4 あああああ 9000 5 いいいいい 9500 6 いいいいい 11000 7 ううううう 15000 8 えええええ 12000 9 おおおおお 10000 10 おおおおお 14000 11 かかかかか 13000 12 ききききき 800 ・ 以下多数 この表で、それぞれ同じ名称の個数と合計金額を求めたいのです。 たとえば「ああああ」なら個数 3、合計 31000 と、D4とE4に、 「いいいい」なら個数 2、合計 25000 と、D6とE6に入れたいのです。 実際の表はデータ件数が1万件を越えますのでいちいち手で入れるわけにはいきません。 VBAでやるにはどう記述したらいいでしょうか? どうかお助けください。よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
A列は名称でB列は金額でよろしいんですよねというか その前提で書きましたが。 デバッグはしてません。またオーバーフロー等あると思うのでそのあたりはご自分で。 Sub 集計() Dim i, MyTotal As Double, MyCount As Double MyTotal = Sheets(1).Range("A2")(1, 2) MyCount = 1 For i = 2 To 65535 If Sheets(1).Range("A2")(i) = "" Then Exit For If Sheets(1).Range("A2")(i) = Sheets(1).Range("A2")(i - 1) Then MyTotal = MyTotal + Sheets(1).Range("A2")(i, 2) MyCount = MyCount + 1 Else Sheets(1).Range("A2")(i - 1, 4).Formula = MyCount Sheets(1).Range("A2")(i - 1, 5).Formula = MyTotal MyTotal = Sheets(1).Range("A2")(i, 2) MyCount = 1 End If Next i Sheets(1).Range("A2")(i - 1, 4).Formula = MyCount Sheets(1).Range("A2")(i - 1, 5).Formula = MyTotal End Sub
その他の回答 (3)
- shishishishi
- ベストアンサー率39% (362/921)
1行目が項目行、2行目以降がデータ行として Sub 集計() Dim i As Long Dim x As Long, y As Long y = 1 For i = 2 To 12000'(ここはデータの最終行にする) With Sheet1 If .Range("A" & i) <> .Range("A" & i - 1) Then .Range("D" & i - 1) = i - y .Range("E" & i - 1) = _ Application.WorksheetFunction.Sum(.Range("B" & y & ":" & "B" & i - 1)) y = i End If End With Next i End Sub わたしも初心者なのでVBAの書き方が悪いかもしれませんがテストして動きました。
お礼
ありがとうございました。 思った通りにできました。 いろいろなやり方があるんですね! 感謝感激です。
- bubebube
- ベストアンサー率55% (11/20)
ピボットテーブルを作成してみてはいかがですか? 慣れれば簡単に集計表が作成できると思います。 どうしても自動化させたければ 作業をマクロに記録させるのが簡単なのでお勧めです。 ・方法 データ(D)→ピボットテーブルとピボットグラフレポート(P)を実行すると ウィザードが表示されますので、集計したいデータの範囲を指定してください。 次に、集計表を作成したい場所を指定します。 行フィールドに名称をドラッグし、データアイテムに金額を2回ドラッグします。 名称、データ(合計:金額、合計:金額2)の集計表が作成されますので 「合計:金額2」となっている項目を選択し、右クリックでショートカットメニューを表示させます。 フィールドの設定(E)を実行し、集計の方法(S)の「データの個数」を選択してください。 項目の位置を変えたかったりした場合は 項目を選択してドラッグしてください。
お礼
ありがとうございました。 今回はVBAで思った通りにできました。 ピボットテーブルは使った事がないので勉強します。
- taknt
- ベストアンサー率19% (1556/7783)
データ件数が 1万件ぐらいあるならば、アクセスとか 使ったほうがいいですよ。 エクセルだけで やりたい場合は COUNTIF とか SUNIF とか使えばできます。 使い方は、エクセルで入力するときに出てくるでしょう。 VBAでなくてもできます。
補足
ありがとうございます。 アクセスですよねえ、やっぱりこういうデータ量だと。 でも残念ながらアクセスは難しくて使った事が無いんです。 関数でやってみようかとも思いましたが、この作業はこれからよく出てくると思われるので、できればVBAでの処理をしたかったのです。
お礼
ありがとうございました。 思った通りにできました。 感謝感激です。