UNIQUE関数は、重複を除いた一覧を別の場所へ取り出す関数です。元の表はそのまま残り、データが増えれば結果も自動で追従します。使えるのはMicrosoft 365とExcel 2021以降。2019以前では #NAME? になるため、「重複の削除」機能やCOUNTIF関数との使い分けが要点になります。
この記事でわかること
- UNIQUE関数の3つの引数と、それぞれが何を切り替えるか
- 複数列の組み合わせで重複を除く書き方
- 空白セルが
0として出てしまうときの直し方 - 重複を除く3つの手段(UNIQUE・重複の削除・COUNTIF)の使い分け
- 2019以前の環境で同じことをする方法
UNIQUE関数の構文と引数
構文
=UNIQUE(配列, [列の比較], [回数指定])
| 引数 | 指定するもの | 省略したときの動き |
|---|---|---|
| 配列 | 重複を除きたい範囲 | ― |
| 列の比較 | TRUE で列単位の比較(横方向) | FALSE=行単位で比較する |
| 回数指定 | TRUE で1回だけ現れた項目のみ返す | FALSE=すべての異なる値を返す |
実務で使うのは、引数を1つだけ渡す形がほとんどです。
=UNIQUE($B$2:$B$100)
UNIQUEは動的配列関数です。数式を入れるのは左上の1セルだけで、結果は必要な行数へ自動的に広がります。この広がりをスピルと呼びます。
⚠️ 使えるバージョン
UNIQUE関数はMicrosoft 365とExcel 2021以降で利用できます。Excel 2016・2019では使えません。2019以前で開くと、関数名の前に接頭辞が付いた文字列として表示され、結果は #NAME? になります。
配布するブックで使うかどうかは、相手の環境で判断してください。代わりの手は後半にまとめています。

基本の使い方
A列に日付、B列に支店、C列に商品が並ぶ売上表を例にします。
1列の重複を除く
=UNIQUE($B$2:$B$100)
支店名が重複なしで縦に並びます。元の表に新しい支店が追加されれば、結果も自動で1行増えます。
複数列の組み合わせで重複を除く
範囲を2列以上にすると、行全体の組み合わせが同じものだけが重複と判定されます。
=UNIQUE($B$2:$C$100)
「大阪×ペン」「大阪×消しゴム」「東京×ペン」のように、実際に存在する組み合わせだけが一覧になります。集計表の見出しを手で作らずに済むのが利点です。
並べ替えとセットで使う
UNIQUEが返す順番は、元の表に出てきた順です。五十音順や昇順で並べたいならSORT関数で包みます。
=SORT(UNIQUE($B$2:$B$100))
集計表の見出し行を作るなら、この形が実務の既定になります。
1回だけ現れた項目を取り出す
第3引数を TRUE にすると、重複したものを除いた残りが返ります。
=UNIQUE($B$2:$B$100, FALSE, TRUE)
「異なる値の一覧」ではなく「1回しか出てこなかった値」です。2つのリストを縦につないでこの式にかけると、片方にしかない項目が洗い出せます。
実務でつまずく2点
① 空白セルが 0 として出てくる
範囲に未入力の行が含まれていると、結果の一覧に 0 が1つ混ざります。動的配列が空白セルを数値の0として読むためです。
FILTER関数で空白を除いてから渡すと消えます。
=UNIQUE(FILTER($B$2:$B$100, $B$2:$B$100<>""))
⚠️ 範囲に該当が1件もない場合、FILTER側が #CALC! を返します。集計表に組み込むなら、第3引数を足しておいてください。
=UNIQUE(FILTER($B$2:$B$100, $B$2:$B$100<>"", ""))
② 見た目が同じなのに別々に残る
一覧に「大阪」が2行出てくることがあります。原因はほぼ次の3つです。
- 前後に余分な空白がある —
=TRIM(B2)の結果と元の値を見比べる - 全角と半角が混ざっている —
=ASC(B2)で半角に寄せて比較する - 数値と文字列が混ざっている — 数値は右寄せ、文字列は左寄せ。寄り方が違えば型が別
UNIQUEは表記が1文字でも違えば別の値として扱います。元データを整えるのが先で、関数側で吸収しようとすると式が複雑になるだけです。
範囲全体をまとめて整えるなら、次の形でも渡せます。
=UNIQUE(TRIM($B$2:$B$100))

重複を除く3つの手段を使い分ける
UNIQUE関数は選択肢の1つで、目的によっては別の手段のほうが速く済みます。判断軸は元データを残すかと自動更新が要るかの2つです。
| 手段 | 対応バージョン | 元データ | 自動更新 | 向いている場面 |
|---|---|---|---|---|
| UNIQUE関数 | 365/2021〜 | 残る | ○ | 一覧を別の場所に作り、更新に追従させたい |
| データ>重複の削除 | 2016〜 | 消える | ×(1回きり) | 元の表そのものを整理したい |
| COUNTIF関数 | 2016〜 | 残る | ○ | 2019以前で重複に印を付けたい・何件目かを知りたい |
| 条件付き書式>重複する値 | 2016〜 | 残る | ○ | 消さずに見つけるだけでよい |
| フィルターの詳細設定 | 2016〜 | 残る | ×(手動実行) | 2019以前で、別の場所へ一覧を書き出したい |
| ピボットテーブル | 2016〜 | 残る | 更新操作 | 種類ごとの件数も同時に欲しい |
「重複の削除」は元データが書き換わる
「データ」タブの重複の削除は、選択した範囲から重複行そのものを消します。手軽ですが、消えた行は戻りません。取り消せるのはCtrl+Zだけで、保存して閉じたあとでは復元できません。
実行する前にシートを複製しておくのが安全です。名簿の重複整理のように「元の表を正しい状態にしたい」ときだけ選んでください。
⚠️ 複数列を選んだ状態で実行すると、チェックを入れた列の組み合わせが一致する行だけが削除されます。1列だけにチェックを入れると、他の列の内容が違っていても消えます。ダイアログの列の選択は必ず確認してください。
COUNTIFで印を付ける(2019以前の定番)
削除も抽出もせず、重複している行に印を付けるだけの方法です。
=COUNTIF($B$2:$B$100, B2)>1
TRUE になった行が重複です。同じ式を条件付き書式のルールに入れれば、色で判別できます。
「何件目か」を知りたいなら、範囲の始点だけを固定します。
=COUNTIF($B$2:B2, B2)
下へコピーすると範囲が伸びていくため、同じ値の1件目は 1、2件目は 2 と連番になります。この列を =1 で絞り込めば、重複を除いた一覧として使えます。
2019以前で一覧を書き出す
「データ」タブ →「並べ替えとフィルター」→詳細設定を開き、「指定した範囲」を選んで抽出先を指定、「重複するレコードは無視する」にチェックして実行します。元データを残したまま、別の場所へ重複なしの一覧が書き出されます。
自動更新はされないため、データを更新するたびに実行し直す必要があります。更新頻度が低い表なら、これで十分です。

うまくいかないときの原因と直し方
| 表示・症状 | 主な原因 | 直し方 |
|---|---|---|
#NAME? | Excel 2016・2019で開いている | UNIQUEは使えない。詳細設定かCOUNTIFで代替する |
#SPILL! | 結果が広がる先に別のデータがある | 下のセルを空ける。結合セルも解除する |
#SPILL! | 数式をテーブル(Ctrl+T)の中に入れている | テーブルの外のセルへ移す |
#CALC! | 入れ子にしたFILTERが0件を返した | FILTERの第3引数に "" を指定する |
一覧に 0 が混ざる | 範囲に空白セルがある | FILTERで <>"" を条件に除いてから渡す |
| 同じ値が2行残る | 空白・全角半角・型の違い | TRIM・ASCで整える。数値と文字列の混在も確認する |
| 結果を並べ替えられない | スピル結果は直接編集できない | SORT関数で包む |
| 一部のセルだけ消せない | スピル結果の一部は削除できない | 左上のセルの数式を直す・消す |
| 元データを消したら結果も消えた | 参照しているだけで複製ではない | 残したいならコピー →「値」で貼り付ける |
結果を固定したいとき
UNIQUEの結果は元データに追従します。ある時点の一覧を記録として残したいなら、スピル範囲をコピーして「形式を選択して貼り付け」→「値」で貼り付けてください。貼り付け後は自動更新されなくなります。
似た関数との使い分け
| 関数 | 対応バージョン | 役割 |
|---|---|---|
| UNIQUE | 365/2021〜 | 重複を除く |
| FILTER | 365/2021〜 | 条件に合う行を取り出す |
| SORT | 365/2021〜 | 並べ替える |
| COUNTIF | 2016〜 | 件数を数える・重複に印を付ける |
| COUNTA | 2016〜 | UNIQUEと組んで種類の数を数える |
| ピボットテーブル | 2016〜 | 種類ごとの件数を同時に見る |
3つの動的配列関数は入れ子にして組み合わせるのが前提の設計です。「大阪支店の商品を、重複なしで五十音順に」なら、外側から順に重ねます。
=SORT(UNIQUE(FILTER($C$2:$C$100, $B$2:$B$100="大阪", "")))
内側のFILTERが行を絞り、UNIQUEが重複を除き、SORTが並べる。1本の式で完結し、元データが増えても手を入れる必要がありません。
よくある質問
Q1:Excel 2019でUNIQUE関数を使う方法はありますか?
ありません。2021以降の関数で、2019では #NAME? になります。同じ結果が欲しい場合は、「データ」タブのフィルターの詳細設定で「重複するレコードは無視する」にチェックして別の場所へ抽出するか、COUNTIF関数で連番を振って1件目だけを残す形にします。
Q2:重複を除いた「種類の数」だけを知りたいのですが。
=COUNTA(UNIQUE($B$2:$B$100)) で数えられます。2019以前なら次の形が使えます。ただし範囲に空白セルがあると #DIV/0! になるため、範囲は実データの行数ぴったりに指定してください。
=SUMPRODUCT(1/COUNTIF($B$2:$B$100, $B$2:$B$100))
Q3:横方向に並んだ重複を除けますか?
除けます。第2引数に TRUE を指定すると、行ではなく列を単位に比較します。=UNIQUE($B$1:$M$50, TRUE) の形です。横並びの項目が同じ内容で重複しているとき、その列がまとめられます。
Q4:結果に見出しを付けられますか?
数式の上のセルに見出しを手入力してください。UNIQUEの範囲に見出し行を含めると、見出しも1つの値として一覧に混ざります。範囲はデータの先頭行から指定するのが原則です。
Q5:大文字と小文字は別の値として扱われますか?
ABC と abc の扱いは環境によって迷いが出やすいところです。区別して集計したい場合は、あらかじめUPPER関数やLOWER関数でどちらかに寄せた作業列を作り、その列に対してUNIQUEをかけると結果が安定します。
Q6:別のシートのデータからも取り出せますか?
できます。=UNIQUE(データ!$B$2:$B$100) のようにシート名と ! を付けて参照します。結果を出すシートは、スピルの邪魔になるデータを置かず空けておくのが前提です。
まとめ
- 引数は配列・列の比較・回数指定。通常は配列だけで足りる
- 使えるのはMicrosoft 365とExcel 2021以降。2019以前は
#NAME? - 一覧に
0が出たら空白セル。FILTERで<>""を条件に除く - 元データを整理するなら「重複の削除」。消えた行は戻らない
- SORT・FILTERと入れ子にして1本の式で完結させる
※関数の対応バージョンはExcelの一般提供時点の情報にもとづいています。お使いの環境や更新プログラムの適用状況により、利用できる関数や表示が異なる場合があります。

