UNIQUE関数で重複なしの一覧を作ったら、知らない「0」が1件混ざっていた。そんな経験はありませんか。
この「0」は、範囲の中の空白セルです。この記事では、0が出る理由と、FILTER関数で空白を除いてからUNIQUEに渡す方法を紹介します。
この記事で分かること
- UNIQUEの結果に「0」が出る理由
- FILTERで空白を除いてから、UNIQUEで重複を除く書き方
- SORTと組み合わせるときの順番
- 空白の無い一覧を、プルダウンの元データにする方法
完成形はこうなります。

完成形。J列に5つの分類が並び、L2のプルダウンを開くと空の選択肢が無い
分類の5件だけが選べます。「0」や空の行は出てきません。
どんな場面で使うか
- 入力が続く一覧から、重複なしの分類・担当者・取引先のリストを作りたい
- 行が増えても拾えるように、範囲を広めに取っている
- UNIQUEで作ったリストをプルダウンの元にしたら、空の選択肢が出た
基本説明
サンプルファイル(記事末尾)の「発注一覧」シートを使います。

「発注一覧」シート(A1:D13)。日付・分類・品名・数量の4列に12件。B7の分類が空白
日付・分類・品名・数量の4列に12件あります。7行目「結束バンド」は、分類が入力されていません。
F・H・J列には数式を、L2にはプルダウンを入れていきます。1行目の見出しは入力済みです。
「0」が出るのは、空白も1件と数えるから
UNIQUEは、空のセルも「空白」という1つの値として数えます。何行空いていても、まとめて1件です。
その1件は、結果の一覧では「0」と表示されます。空のセルを =B7 のように数式で参照すると0になるのと同じです。
0が出る位置は、範囲の中で最初に空白が出てくる位置です。末尾とは限りません。
表示を隠すのではなく、先に除く
0を表示形式で見えなくする方法もあります。ただし見えなくなるだけで、一覧の1件として残ります。プルダウンの元にすると、選択肢にも1行混ざります。
この記事では、FILTERで空白を除いてからUNIQUEに渡します。一覧にそもそも空白が入りません。
手順
ここからは「発注一覧」シートで操作します。範囲は、行が増えても拾えるように30行目までにします。
ステップ1 UNIQUEだけで一覧を作る
まず、空白を除かずに作って、0が出ることを確かめます。
- F2 を選ぶ
- 次の数式を入力して、Enter を押す
=UNIQUE(B2:B30)

F2を選択。数式バーに =UNIQUE(B2:B30)。F2:F7に6件が出て、F6が0
6件が出て、5番目のF6に「0」が入ります。7行目の空白と、14〜30行目の空白がまとめて1件になったものです。
ステップ2 FILTERで空白を除いてからUNIQUEに渡す
- H2 を選ぶ
- 次の数式を入力して、Enter を押す
=UNIQUE(FILTER(B2:B30,B2:B30<>""))

H2を選択。数式バーに =UNIQUE(FILTER(B2:B30,B2:B30<>””))。H2:H6に5件が出て、0が無い
5件だけが出て、0は消えます。
内側の FILTER(B2:B30,B2:B30<>"") が、12件のうち分類が空でない11件だけを取り出します。<>"" は「空の文字列ではない」という条件です。UNIQUEには空白の無い11件が渡るので、重複を除くと5件になります。
ステップ3 SORTで並べ替える
一覧は、上から最初に出てきた順に並んでいます。プルダウンに使うなら、並べ替えたほうが探しやすくなります。
- J2 を選ぶ
- 次の数式を入力して、Enter を押す
=SORT(UNIQUE(FILTER(B2:B30,B2:B30<>"")))

J2を選択。数式バーに =SORT(UNIQUE(FILTER(B2:B30,B2:B30<>””)))。J2:J6にケーブル・コネクタ・スイッチ・センサー・モーター
ケーブル、コネクタ、スイッチ、センサー、モーターの順に並びます。
組み合わせる順番は、内側から「FILTER → UNIQUE → SORT」です。空白を除き、重複を除いてから、残った5件だけを並べ替えます。
ステップ4 プルダウンの元データにする
- L2 を選ぶ
- 「データ」タブ →「データの入力規則」を開く
- 「入力値の種類」で「リスト」を選ぶ
- 「元の値」に
=$J$2#と入力する - 「OK」を押す

「データの入力規則」ダイアログ。入力値の種類が「リスト」、元の値が =$J$2#
# は、J2から広がった結果の全体を指す記号です。分類が増えて一覧が伸びても、プルダウンの範囲が一緒に伸びます。
L2 の ▼ を押すと、冒頭の完成形のように5つの分類が並びます。空の選択肢は出ません。
プルダウンで選んだ値から隣のセルを自動入力する方法は、プルダウンで自動入力する記事で解説しています。
例:表をテーブルにして、範囲を広めに取らない
30行目までと決めた範囲は、31行目より下に足した行を拾いません。表をテーブルにすると、行を足しても範囲が自動で伸びます。
- A1 を選ぶ
- Ctrl+T を押す
- 「先頭行をテーブルの見出しとして使用する」にチェックが入っていることを確かめて、「OK」を押す
- J2 の数式を、次の数式に入れ替える
=SORT(UNIQUE(FILTER(テーブル1[分類],テーブル1[分類]<>"")))

A1:D13がテーブルになっている。J2を選択し、数式バーに =SORT(UNIQUE(FILTER(テーブル1分類,テーブル1分類<>””)))。J2:J6はステップ3と同じ5件
結果はステップ3と同じ5件です。
テーブルにしても、FILTERは外さないでください。7行目のような入力漏れの空白は、テーブルの中にも残ります。テーブルの仕組みはテーブル機能の記事で解説しています。
よくあるエラー
空白を除いたのに、まだ空の行が出る
原因: 空に見えるセルに、スペースが入っています。スペースは空の文字列ではないので、<>"" の条件をすり抜けます。
見分け方: 空に見えるセルを =LEN(B7) のように調べて、0以外なら何かが入っています。
直し方: TRIMでスペースを取り除いてから比べます。
=SORT(UNIQUE(FILTER(B2:B30,TRIM(B2:B30)<>"")))
#CALC! が出る
原因: 範囲の分類がすべて空白で、FILTERが取り出す行が0件になっています。
直し方: FILTERの3つ目の引数に、0件のときに出す値を入れます。
=SORT(UNIQUE(FILTER(B2:B30,B2:B30<>"","なし")))
#VALUE! が出る
原因: FILTERの1つ目と2つ目の範囲の大きさが違います。たとえば FILTER(B2:B30,B2:B20<>"") です。
直し方: 2つの範囲を同じ行までに揃えます。
#SPILL! が出る
原因: 結果が広がる先のセルに、値や数式が入っています。
直し方: 結果が広がる先のセルを空にします。スピルの仕組みはスピル関数入門の記事にまとめています。
#NAME? が出る
原因: UNIQUE・FILTER・SORTが使えないバージョンのExcelです。
直し方: Microsoft 365 または Excel 2021 以降で開きます。
まとめ
- UNIQUEは空のセルも1件と数え、その1件は「0」と表示される
- 空白は
=UNIQUE(FILTER(範囲,範囲<>""))で、UNIQUEに渡す前に除く - 並べ替えるときは、内側から「FILTER → UNIQUE → SORT」の順に組み合わせる
- プルダウンの元の値には
=$J$2#のように#を付けて、一覧の伸び縮みに合わせる - 表をテーブルにしても、入力漏れの空白は残るのでFILTERは外さない
まずはサンプルの「発注一覧」シートで、F2・H2・J2の3つの結果を見比べてみてください。
対応バージョン: Microsoft 365 または Excel 2021 以降
関連記事
- 【Excel 関数】UNIQUE + SORT の組み合わせでマスターリストを自動生成する
- 【Excel 関数】FILTER関数で「条件に合う行だけ抽出」— オートフィルターとの違いと使い分け
- 【Excel 関数】SORT・UNIQUE・FILTERで変わるリスト管理 — スピル関数入門
- 【Excel】プルダウンで選んだら隣のセルに自動入力する方法 — XLOOKUP・VLOOKUPで型番や単価を引く
- 【Excel】テーブル機能は普通の表と何が違うのか — 構造化参照と自動拡張の仕組み
サンプルファイル
記事中で使用しているサンプルデータはこちらからダウンロードできます。

