プロが教えるわが家の防犯対策術!

A列に「ID」、B列に「種別」を設定した場合、
C1セルに「種別」の重複を除いた“果物”の合計を
出したいのですが、どのような関数にすればいいのでしょうか。

なお、1つのIDの中にある「種別」は必ず1種類となります。
下図の、重複を除いた果物の合計数は「3」(ID=10001、10002、10004)
と黄色付したC1セル出したい次第です。

「【Excel】重複データのカウント方法」の質問画像

A 回答 (2件)

Option Explicit



Sub koumokutasu()

Dim myDic As Object, myKey, myItem
Dim myVal
Dim i As Long

Set myDic = CreateObject("Scripting.Dictionary")
Range("D2", Range("E" & Rows.Count).End(xlUp)).ClearContents
Range("D1:E1").Value = Range("A1:B1").Value

' ---元データを配列に格納

myVal = Range("A2", Range("A" & Rows.Count).End(xlUp)).Resize(, 2).Value

' ---myDicへデータを格納
For i = 1 To UBound(myVal, 1)
If Not myVal(i, 1) = Empty Then
If Not myDic.exists(myVal(i, 1)) Then

'---新たなkeyの時はkeyとitemを追加します

myDic.Add myVal(i, 1), myVal(i, 2)
Else

'---すでに存在しているkeyの時はitemを加算します

myDic(myVal(i, 1)) = myDic(myVal(i, 1)) + myVal(i, 2)
End If
End If
Next

' ---Key,Itemの書き出し

myKey = myDic.keys
myItem = myDic.items
For i = 0 To UBound(myKey)
Cells(i + 2, 4).Value = myKey(i)
Cells(i + 2, 5).Value = myItem(i)
Next
Set myDic = Nothing

End Sub

これの後にSUMIF()使えばいいですが
    • good
    • 0
この回答へのお礼

早速マクロをご指示くださり、ありがとうございました。

お礼日時:2011/05/03 16:36

サンプルの通りIDが数値で記入してある前提で。


C1に
=COUNT(0/FREQUENCY(IF(B2:B15="果物",A2:A15),IF(B2:B15="果物",A2:A15)))
と記入して,コントロールキーとシフトキーを押しながらEnterするなど。




#別のもっと簡単な方法:
C2に
=IF(AND(B2="果物",MATCH(A2,A:A,0)=ROW(A2)),A2,"")
以下C15までコピー
C1:
=COUNT(C2:C15)
    • good
    • 0
この回答へのお礼

作業用の列を追加したくなかったため、お教えいただいた FREQUENCY で
理想の結果となりました。配列関数を使うことは頭にありませんでした。
本当にありがとうございました。

お礼日時:2011/05/03 16:39

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