アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルの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でやるにはどう記述したらいいでしょうか?
どうかお助けください。よろしくお願いします。

A 回答 (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
    • good
    • 1
この回答へのお礼

ありがとうございました。
思った通りにできました。
感謝感激です。

お礼日時:2003/05/15 19:42

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の書き方が悪いかもしれませんがテストして動きました。
    • good
    • 1
この回答へのお礼

ありがとうございました。
思った通りにできました。
いろいろなやり方があるんですね!
感謝感激です。

お礼日時:2003/05/15 19:43

ピボットテーブルを作成してみてはいかがですか?


慣れれば簡単に集計表が作成できると思います。
どうしても自動化させたければ
作業をマクロに記録させるのが簡単なのでお勧めです。

・方法
データ(D)→ピボットテーブルとピボットグラフレポート(P)を実行すると
ウィザードが表示されますので、集計したいデータの範囲を指定してください。
次に、集計表を作成したい場所を指定します。

行フィールドに名称をドラッグし、データアイテムに金額を2回ドラッグします。
名称、データ(合計:金額、合計:金額2)の集計表が作成されますので
「合計:金額2」となっている項目を選択し、右クリックでショートカットメニューを表示させます。
フィールドの設定(E)を実行し、集計の方法(S)の「データの個数」を選択してください。

項目の位置を変えたかったりした場合は
項目を選択してドラッグしてください。
    • good
    • 1
この回答へのお礼

ありがとうございました。
今回はVBAで思った通りにできました。
ピボットテーブルは使った事がないので勉強します。

お礼日時:2003/05/15 19:44

データ件数が 1万件ぐらいあるならば、アクセスとか


使ったほうがいいですよ。

エクセルだけで やりたい場合は
COUNTIF とか SUNIF とか使えばできます。
使い方は、エクセルで入力するときに出てくるでしょう。

VBAでなくてもできます。

この回答への補足

ありがとうございます。
アクセスですよねえ、やっぱりこういうデータ量だと。
でも残念ながらアクセスは難しくて使った事が無いんです。
関数でやってみようかとも思いましたが、この作業はこれからよく出てくると思われるので、できればVBAでの処理をしたかったのです。

補足日時:2003/05/15 11:07
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!