OpenOfficeで選手の登場頻度別の内訳を調べるには

下の表は、とある草野球チームの先発投手の履歴です。
A列に日付、B列にその日の先発投手が入力されています。期間内に一回先発した人は何人いて二回先発した人は何人、三回先発した人は何人・・・を調べることになりました。

送信者 OpenOffice
このサンプルファイルは、SKYDRIVEからcalc146.odsをダウンロードしてください。

B列だけを見ていると、結局このチームには何人の投手がいるのかさえ分かりにくいですが、E列の数字を合計すると、9人であることが一目して分かります。

ここで、またも使用する関数は、SUMPRODUCT関数です。
ここでは、COUNTIF関数と組み合わせてSUMPRODUCT関数を使っています。
仕組みは、下の説明をご覧ください。



COUNTIF関数の部分は、COUNTIF($B$2:$B$22;$B$2:$B$22)で、そのまま理解すると、範囲$B$2:$B$22に、$B$2:$B$22が含まれている回数を返せ、という、なにやら分かったような分からないような意味不明の数式のようです。
しかし、これを理解していただくのが、このSUMPRODUCT関数で包んだ数式のポイントなので下に図解で説明します。
21個もデータがあると複雑なので下の表で説明します。A列に4つデータが入っていると考えてください。
送信者 OpenOffice

COUNTIF関数では範囲と検索データを同じにすると、範囲の中に含まれている重複するデータを探します。
左の例では、Aが2個あります。ここで重複を示す線が一本引けます。この1が、ここでのCOUNTIF関数の戻り値になります。同様に右の例では、Aが3つあるので、3本線が引けます。従って3がCOUNTIF関数の戻り値になります。



この、COUNTIF関数の特性を使ってSUMPRODUCT関数に当てはめてみます。
COUNTIF関数だけで処理したときと線の引き方が少し異なります。平たく言えば、COUNTIF関数だけの場合、10月1日の杉内というデータからは、他の日付の杉内に対してだけ線を引きました。しかし、SUMPRODUCT関数に当てはめると、10月1日の杉内に対しても線を引くことになります。これを図で説明すると下のようになります。
送信者 OpenOffice


これを、今回のテーマに当てはめると、2本線を引けるデータはいくつあるか、ということになります。
送信者 OpenOffice
上の例では、2本の線が引けるところは4ヶ所あります。
そこで、この4を2本で割ると、2が返されます。=SUMPRODUCT((COUNTIF(A1:A4;A1:A4)=2)/2)
OpenOfficeの画像では、=SUMPRODUCT((COUNTIF($B$2:$B$22;$B$2:$B$22)=D2)/D2)



この数式の仕組みを使うと、小売店での顧客の来店頻度別消費金額なども簡単に調べることができます。

FREQUENCY関数を使って同様の処理を行なうことも可能です。あまりお勧めじゃないですが。こちらに書きました。

この記事をクリップ!