数式1つ、所要10秒で「重複なしリスト」が完成する
アンケートの回答欄、在庫リストの商品カテゴリ、担当者名の一覧——。Excelで集めたデータから「重複を除いた一覧」を作りたい場面は驚くほど多いものです。
けれど実際のデータには入力漏れの空白セルが点々と混ざり、「重複の削除」機能を使っても元データが更新されるたびに同じ作業をやり直すことになります。
これを一発で片付けるのが、UNIQUE関数とFILTER関数の組み合わせです。数式を1つ入れるだけで空白を無視した一意のリストが自動生成され、元データを書き換えれば結果もその場で更新されます。
結論:この数式をコピーするだけ
D5セルに次の数式を入力します。
=UNIQUE(FILTER(B5:B16,B5:B16<>""))
これだけで、B5:B16に入力されたデータから空白と重複を取り除いた一覧が出力されます。
本記事で使うB5:B16の中身は次のとおりです(空欄はそのまま空白セル)。
| セル | 値 |
|---|---|
| B5 | 赤 |
| B6 | 青 |
| B7 | (空白) |
| B8 | 緑 |
| B9 | 緑 |
| B10 | 黄緑 |
| B11 | (空白) |
| B12 | ピンク |
| B13 | 赤 |
| B14 | 青 |
| B15 | (空白) |
| B16 | 黄緑 |
出力結果は「赤/青/緑/黄緑/ピンク」の5件になります。

汎用形
=UNIQUE(FILTER(data,data<>""))
data を対象のセル範囲(例:A2:A100)に置き換えてください。
なぜFILTERで包む必要があるのか
UNIQUEだけで済ませようとすると、リストの末尾に見慣れない 0 が現れます。
=UNIQUE(B5:B16) → 赤 / 青 / 緑 / 黄緑 / ピンク / 0 =UNIQUE(FILTER(B5:B16,B5:B16<>"")) → 赤 / 青 / 緑 / 黄緑 / ピンク
UNIQUE関数は空白セルを「0」という値として扱うため、空白が1つでもあれば必ず0が混ざります。FILTERで先に空白を落としておく——これがこの合わせ技の存在理由です。
仕組みを2段階で理解する
ステップ1:FILTERで空白を除去する
FILTER(B5:B16,B5:B16<>"")
<> は「等しくない」を意味する比較演算子です。B5:B16<>"" は範囲内の各セルについてTRUE / FALSEの配列を作り、FILTERはTRUEの値だけを抜き出します。
{ "赤" ; "青" ; "緑" ; "緑" ; "黄緑" ; "ピンク" ; "赤" ; "青" ; "黄緑" }
この時点では重複が残っています。
ステップ2:UNIQUEで重複をまとめる
FILTERが返した配列がそのままUNIQUEに渡され、同じ値がまとめられます。
{ "赤" ; "青" ; "緑" ; "黄緑" ; "ピンク" }
数式を書いたのは1セルだけですが、結果は縦方向に自動展開されます。これがスピルと呼ばれる動作です。
そのままドロップダウンリストの元データにする
作った一意リストは、入力規則のリストに直結できます。
- 入力させたいセルを選択し、「データ」タブ →データの入力規則
- 「入力値の種類」でリストを選ぶ
- 「元の値」に
=$D$5#と入力してOK
末尾の # はスピル範囲演算子で、「D5から展開されている範囲すべて」を指します。元データに新しい項目を足せばドロップダウンの選択肢も自動で増え、減らせば消えます。範囲を指定し直す手間が完全になくなるのが、この方法の一番おいしいところです。
つまずきやすいポイント
#CALC! エラー(条件に合う値が0件)
FILTERの条件に合う値が1つもないと #CALC! が返ります。元データがまだ空のテンプレートで頻発するので、第3引数に代替値を渡しておくと安全です。
=UNIQUE(FILTER(B5:B16,B5:B16<>"","該当なし"))
#SPILL! エラー(展開先が塞がっている)
出力先の下方向に既存データがあると展開できず #SPILL! になります。数式を入れるセルの下は空けておきましょう。
スペースだけのセルは「空白」扱いされない
B5:B16<>"" で除外できるのは、本当に何も入っていないセルと長さ0の文字列です。スペースが1つでも入力されたセルは文字が入っているとみなされ、リストに残ります。見た目では気づきにくいので、条件側でTRIMを噛ませておくと確実です。
=UNIQUE(FILTER(B5:B16,TRIM(B5:B16)<>""))
並び順を整えたい
出力順は元データの登場順です。昇順に並べたいときは外側をSORTで包みます。
=SORT(UNIQUE(FILTER(B5:B16,B5:B16<>"")))
発展:1回しか出てこない値だけ抜き出す
UNIQUEの第3引数に TRUE を渡すと、重複した値を除いて1度だけ登場した値が返ります。上のデータなら「緑」「ピンク」だけが残ります。単発の回答や例外値を洗い出したいときに便利です。
=UNIQUE(FILTER(B5:B16,B5:B16<>""),,TRUE)
対応バージョンを確認する
UNIQUE関数とFILTER関数は動的配列に対応したExcelでのみ使えます。2026年8月現在、利用できるのは以下の環境です。
- Microsoft 365(旧Office 365)
- Excel 2021 / Excel 2024
- Excel for the web
Excel 2019以前の永続ライセンス版では使えません。その場合は「データ」タブの重複の削除で対応します。
- 元データの列をコピーして、作業用の列に貼り付ける
- その列を選択して「データ」タブ →重複の削除→ OK
- 残った空白セルを選び、右クリック →削除→「上方向にシフト」
自動更新はされないため、元データを変えたら都度やり直す必要があります。
まとめ
- 基本形は
=UNIQUE(FILTER(範囲,範囲<>""))。UNIQUE単体では空白が0として残るので、内側のFILTERで先に落とすのがポイント #CALC!対策に第3引数を用意する。=UNIQUE(FILTER(範囲,範囲<>"","該当なし"))としておけば、データが空でもエラー表示にならない=$D$5#でドロップダウンに直結できる。スピル範囲演算子#を付ければ、項目が増減してもリストが自動追従する
一度覚えてしまえば、ドロップダウンの選択肢作り、集計表の項目出し、重複チェックなど応用範囲は一気に広がります。まずは手元のデータで、範囲だけ差し替えて試してみてください。