[[20090310154712]] 『“延べ”ではないカウント』(かぷち) >>BOT

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『“延べ”ではないカウント』(かぷち)

早速ですが、よろしくお願いします。

A列に次のようにデータがあります。

山口

山口

福田

山口

今井

今井

福田

このとき、「COUNTA」関数により計算すると、
「7」となりますが、
登場人物の山口、福田、今井の3名を表す
「3」となる結果が欲しいのですが、方法を教えて下さい。


=SUMPRODUCT(1/COUNTIF(A1:A15,A1:A15))

迅速な対応感謝します。
もしよろしければ、この数式の中身(詳細?意味?)も
解説いただけませんでしょうか?
お願いします。

SUMPRODUCTとは?
1/は?


 1/は? 分数
ヘルプ参照で


=SUMPRODUCT((MATCH(A11:A15,A11:A15,0)=ROW(A1:A5))*1)

 =SUMPRODUCT((A1:A15<>"")/COUNTIF(A1:A15,A1:A15&""))
 なんてのも。

 範囲内に空白があっても計算されます。
 (独覚)

 >この数式の中身(詳細?意味?)も解説いただけませんでしょうか?

 ご提示のレイアウトに則して解説してみます。

 =SUMPRODUCT(1/COUNTIF(A1:A7,A1:A7))

 上記式の COUNTIF(A1:A7,A1:A7)の部分で、それぞれの名前がいくつ存在するかを求めています。
 この計算で、下記の配列が返ります。

 {3;3;2;3;2;2;2}

 これは、隣のB1からB7セルに =COUNTIF(A$1:A$7,A$1:A$7)とすると、同じ結果になります。
 上記の配列を式に当てはめると

 =SUMPRODUCT(1/{3;3;2;3;2;2;2}) となります。

 更に、1を配列の各要素で除算しますので、下記の配列が返ります。

 {0.333333333333333;0.333333333333333;0.5;0.333333333333333;0.5;0.5;0.5}

 ここで1を除算するのは、「重複している名前を、1つとしてカウントするため」だと思って下さい。
 これはC1セルに =1/B1 とし、下へコピーすれば同じ結果が見えます。
 結果、数式の中身は

 =SUMPRODUCT({0.333333333333333;0.333333333333333;0.5;0.333333333333333;0.5;0.5;0.5})

 となります。
 これらの計算で、重複している数が3なら「0.33333....」を3つ返し、
 重複している数が2なら「0.5」を2つ返しています。
 重複していなければ1を1つです。

 従って、最終的に得た上記配列の各要素を加算する事で、重複していない件数が導かれます。

 独覚さんも触れられていますが、範囲内に空白があると除算の段階で
 #DIV/0!エラーが発生する(0で除算する事になる)ため、最後の加算が
 計算されず、エラーになります。

 (Dil)

 SUMPRODUCT(1/COUNTIF(A1:A15,A1:A15)) 

 は、注意が必要です。

[[20070307112739]] (しらりんご)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.