Excel でユニークな件数を得る

数値が格納されている場合、検索すれば統計関数を利用した式がすぐに出てくるが、文字列の例がないので自作したメモ

{=SUM(IF(MATCH([範囲],[範囲],0)=ROW([範囲])-ROW(INDEX([範囲],1))+1,1,0))}

縦一列の範囲用なので、横一列の場合は ROW() のかわりに COLUMN() を使用し、矩形領域の場合には IF() の中で COLUMN(), ROW() を両方比較するようにする必要がある。

  1. 対象セルと同じ値を、対象範囲の先頭から探す (IF 左値)
  2. 対象セルの行番号から、対象先頭セルの行番号を引くことで、対象セルの相対位置を探す (IF 右値)
  3. この値が一致するレコードは、先頭から見て最初に発見されたレコードであるため 1 とする (IF 真値)
  4. この値が一致しないレコードは、先頭から見て最初に発見されたレコードであるため 0 とする (IF 偽値)
  5. 合計を得ることで、最初に発見されたレコードの数=ユニークな件数が得られる
範囲 右値 左値 真偽
1 1 1
2 2 1
3 3 1
4 4 1
5 2 0
6 6 1
7 1 0
8 6 0

右値は、ROW() 関数を使って作った範囲配列のインデックス…つまり、右値は行番号です。Excel 上で1行目から開始しているなら、右値は ROW([範囲]) だけでも良いのですが、任意の範囲に使える式にするために多少の加工があります。
左値は、検索結果ですので重複しているデータがある場合は、もっとも若い行番号が入ることになります。そして、左値と右値が同じであるものを数えているので、結果としてユニークなデータ件数が手に入ります。