Excel 何種類の値があるか関数で求める方法

Excel 関数

スポンサーリンク

下図で縦横に配置されたデータにおいて、何種類のデータがあるのか(答え:5種類)というのを関数でカウントするのは、意外に難しい。

ひとまず先に答えだけ書くと、最もポピュラーな解法でさえ

=SUMPRODUCT( 1 / COUNTIFS( $A$1:$D$5 , $A$1:$D$5) )

という難解な式になる。

今回は、この式について中身を見ていく。

COUNTIFS関数

Excel COUNTIF関数とCOUNTIFS関数で条件に合致するデータの件数をカウント

今回の数式

=SUMPRODUCT( 1 / COUNTIFS( $A$1:$D$5 , $A$1:$D$5) )

で最も大事なのがCOUNTIFS関数で、これをじっくり見ていく。

COUNTIFS関数の構成は

=COUNTIFS( 範囲01 , 検索条件01 ,範囲02 , 検索条件02 ,・・・)

というものだが、まずはA1セル「東京都」が全体のセル範囲A1:D5の中に幾つあるかカウントする式は

=COUNTIFS( $A$1:$D$5 , A1)

となる。

そして、対象セル範囲A1:D5と同じサイズの縦5行×横4列に、今のCOUNTIFS式をコピペしたものが下の図1。

図1 COUNTIFS式をコピペ

スピルさせる

では、いったんF1:I5のセル範囲に入力された式は消しておく。

元の式

=COUNTIFS( $A$1:$D$5 , A1)

について、検索条件であるA1は単一セルを指定しているわけだが、これを範囲拡張して

=COUNTIFS( $A$1:$D$5 , $A$1:$D$5)

という原則外れの書き方でF1セルに入力すると、「スピル」が発生して下の図2のようになる。

これは、数式をコピペした図1と同じ状態だ。

図2 COUNTIFS式をスピル

Excel 「スピル」機能の使い所

Excel 「スピル」機能について

スピルした式の逆数

ではこの、スピルしたCOUNTIFS式について、逆数を取ってみよう。つまり、このCOUNTIFS式で1を割り

=1 / COUNTIFS( $A$1:$D$5 , $A$1:$D$5)

という式にするわけだ。

すると結果は下の図3のようになる。

たとえばF1セルの0.142857というのは、スピル前の図2でF1セルに入っていた7の逆数である1/7と合致する。

そして図3のF1~I5セルには、「東京都」に対応するセルが7箇所あって、それらの合計が7箇所×1/7 = 1となる。

同様に、「栃木県」なら5箇所が合致して、F2セルなど該当箇所の値がそれぞれ0.2=1/5 なので、5箇所×1/5=1となる。

したがって、ユニークな値が5種類あるなら、合計は5となる。実際、図3でも選択範囲の合計が5と表示されている。

図3 スピルしたCOUNTIFS式の逆数

では、このスピルしたセル範囲、すなわち配列をいっぺんに合計してしまうのがSUMPRODUCT関数だというわけだ。

そこで、冒頭の数式

=SUMPRODUCT( 1 / COUNTIFS( $A$1:$D$5 , $A$1:$D$5) )

で、COUNTIFS関数の逆数が全て合計されるということになる。

まあSUMPRODUCT関数は、配列を合計するって機能は確かにあるんだけど、ここまでの使い方をする機会ってまず無い。

普通はSUMPRODUCT関数は、縦横が入り混じった表の合計を出すとか、そういう使い方を押さえておけば良い。

Excel SUMPRODUCT関数とSUMIFS関数 縦横混合の集計を比較してみる

ExcelのSUMPRODUCT関数(2)複数条件を指定した足し算

ExcelのSUMPRODUCT関数(1)足し算と掛け算を合わせることができる

スポンサーリンク