doodle-on-web

自分で調べたことや、仕事の中で質問されたことなどをまとめています。

Excel UNIQUEで空白以外の重複なしリストを作る|FILTERとの合わせ技

スポンサーリンク

数式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で空白と重複を除いた結果

汎用形

=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セルだけですが、結果は縦方向に自動展開されます。これがスピルと呼ばれる動作です。

そのままドロップダウンリストの元データにする

作った一意リストは、入力規則のリストに直結できます。

  1. 入力させたいセルを選択し、「データ」タブ →データの入力規則
  2. 「入力値の種類」でリストを選ぶ
  3. 「元の値」に =$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以前の永続ライセンス版では使えません。その場合は「データ」タブの重複の削除で対応します。

  1. 元データの列をコピーして、作業用の列に貼り付ける
  2. その列を選択して「データ」タブ →重複の削除→ OK
  3. 残った空白セルを選び、右クリック →削除→「上方向にシフト」

自動更新はされないため、元データを変えたら都度やり直す必要があります。

まとめ

  • 基本形は =UNIQUE(FILTER(範囲,範囲<>""))。UNIQUE単体では空白が 0 として残るので、内側のFILTERで先に落とすのがポイント
  • #CALC! 対策に第3引数を用意する=UNIQUE(FILTER(範囲,範囲<>"","該当なし")) としておけば、データが空でもエラー表示にならない
  • =$D$5# でドロップダウンに直結できる。スピル範囲演算子 # を付ければ、項目が増減してもリストが自動追従する

一度覚えてしまえば、ドロップダウンの選択肢作り、集計表の項目出し、重複チェックなど応用範囲は一気に広がります。まずは手元のデータで、範囲だけ差し替えて試してみてください。


あわせてチェック