
Excelでデータから重複値を除くのに便利なUNIQUE関数ですが、Microsoft 365またはExcel 2021以降のバージョンでしか使えません。この記事では、Excel 2019以前でも、UNIQUE関数以外の方法で一意の値を抽出する方法を解説しているので、ぜひ参考にしてみてください。
はじめに

UNIQUE関数は、指定した範囲から、すべての一意の値を返します。
例:=UNIQUE(A2:A5)
- UNIQUE関数が使えるExcelのバージョン
- 使える:Microsoft 365またはExcel 2021以降
- 使えない:Excel 2019以前
UNIQUE関数の引数:(範囲, [列の比較], [回数指定])
UNIQUE関数の代用方法
作業列を使う方法

UNIQUE関数が使えない場合、次のように、作業列を使って一意の値を抽出します。
- 作業列で一意の行番号を取得
- 例:
=IF(COUNTIF( $B$2:B2, B2 )=1,ROW(),"")
- 例:
- INDEX関数で一意の値を抽出
- 例:
=IFERROR(INDEX(B:B,SMALL($A$2:$A$5,ROW(A1))),"")
- 例:
数式の解説
作業列で一意の行番号を取得

まず、作業列に以下の数式を入力し、データのある行までオートフィルでコピーします。
例:=IF(COUNTIF( $B$2:B2, B2 )=1,ROW(),"")
この数式は、COUNTIF関数で「その値が何回出現したか」を数え、IF関数を使って「初めて出現した場合(回数が1)」にだけ、行番号を返すようにしています。
ポイント
COUNTIF($B$2:B2, B2)のように、範囲の開始位置のみを固定($を付ける)します。これにより、数式を下にコピーすると範囲が広がり、その値が何回目に出てきたかを正確に数えられます。
COUNTIF関数の引数:(範囲, 検索条件)
IF関数の引数:(論理式, 真の場合, 偽の場合)
INDEX関数で一意の値を抽出

次に、以下の数式を入力し、データのある行までオートフィルでコピーします。
例: =IFERROR(INDEX(B:B,SMALL($A$2:$A$5,ROW(A1))),"")
この数式は、SMALL関数で作業列の行番号を小さい順に抜き出し、INDEX関数で、その行番号にある元のデータを抽出しています。
ポイント
関数の第2引数(順位)にROW(A1)を指定することで、数式を下にコピーするたびに、1位、2位、3位と順位を変えながら、値を取り出せるようになります。
INDEX関数の引数:(参照, 行番号, [列番号])
作業列を使わない方法

作業列を作らずに一意の値を抽出したい場合は、以下の数式を入力してオートフィルでコピーします。
例:=IFERROR(INDEX(A$2:A$5,MATCH(0,COUNTIF(C$1:C1,A$2:A$5),0)),"")
※Excelのバージョンによっては、[Ctrl]+[Shift]+[Enter]で確定する必要があります。
ポイント
COUNTIF関数の検索範囲は、C$1:C1のように、開始位置(C$1)のみ絶対参照($を付ける)にします。これにより、数式をコピーすることでC$1:C2、C$1:C3…と1行ずつ拡張され、これまでに抽出した値を正確に数えることができます。
MATCH関数の引数:(検索キー, 範囲, [検索の種類])
数式の解説
COUNTIF(C$1:C1,A$2:A$5)A2からA5までの各値が、これまでに抽出した値の範囲(C1:C1)に何回出現するかを一度に数え、{0, 0, 0, 0}のような「配列」で返しています。A2はC1に何回? → 0回A3はC1に何回? → 0回A4はC1に何回? → 0回A5はC1に何回? → 0回
MATCH(0, …)- MATCH関数は、COUNTIF関数が返す配列
{0, 0, 0, 0}の中から、最初に現れる0(まだ抽出されていない値)を見つけ、その位置(例:1番目)を返します。
- MATCH関数は、COUNTIF関数が返す配列
INDEX(A$2:A$5, …)- INDEX関数は、MATCH関数が返す位置を使って、元のデータ範囲(
A$2:A$5)から、その位置にある値を抽出します。
- INDEX関数は、MATCH関数が返す位置を使って、元のデータ範囲(