[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『“延べ”ではないカウント』(かぷち)
早速ですが、よろしくお願いします。
A列に次のようにデータがあります。
山口
山口
福田
山口
今井
今井
福田
このとき、「COUNTA」関数により計算すると、
「7」となりますが、
登場人物の山口、福田、今井の3名を表す
「3」となる結果が欲しいのですが、方法を教えて下さい。
SUMPRODUCTとは?
1/は?
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.