Excel の UNIQUE 関数は重複を除いて一意なリストを作る関数ですが、UNIQUE だけで終わらせるとデータ集計の半分しか活かせません。たとえば「商品ごとの売上を合計したい」「重複なしリストにマスタから単価を当てたい」「条件付きで出現回数を数えたい」といった業務シーンは、UNIQUE を他の関数と組み合わせて初めて 1 つの数式で完結します。
本記事では、Excel 2024 ビルド 19929 で実機検証した UNIQUE 関数と他の関数を組み合わせる実用 9 パターンを、業務シーン・コピー用数式・実行結果・注意点の固定型でまとめました。最後に配布 xlsx(12 シート構成)も用意しています。
- この記事のスコープと対象バージョン
- パターン1:UNIQUE × IF — 値をラベルに置き換えてから重複除去
- パターン2:UNIQUE × IF — 条件絞り込みで FALSE が混ざる罠と回避策
- パターン3:UNIQUE × COUNTIF — 出現回数で重複度ランキング
- パターン4:UNIQUE × COUNTIFS — 条件を加えた出現回数集計
- パターン5:UNIQUE × TEXTJOIN — 区切り文字付きで連結(CONCAT との違いも)
- パターン6:UNIQUE × SUMIFS — 重複なしキーごとの金額集計
- パターン7:UNIQUE × XLOOKUP — 重複なしリストにマスタを当てる
- パターン8:UNIQUE × MAP / LAMBDA — 配列の各要素に同じ処理(非再帰)
- パターン9:UNIQUE × YEAR・MONTH — 期間内のユニーク件数を数える
- うまくいかないときの罠(空セル「0」/ FALSE 混入 / 空文字残存)
- 関連記事と次のステップ
- まとめ
この記事のスコープと対象バージョン
UNIQUE 関数まわりの記事は「重複なしリストを動的に作る」「重複なしキーで集計する」「重複の罠を回避する」など切り口が複数あります。本記事は UNIQUE と他の関数を組み合わせる応用パターンに絞り、別記事への送り先を明示します。
(A) 読者の目的別の読み先
| やりたいこと | 読む先 |
|---|---|
| UNIQUE と FILTER / SORT で動的リストを作る | post 32079 へ |
| ドロップダウンリストの元データを動的更新する | post 32079 へ |
| IF で分類してから重複を消す | 本記事 H2-2 / H2-3 |
| COUNTIF / SUMIFS で重複なしキーを集計する | 本記事 H2-4 / H2-5 / H2-7 |
| TEXTJOIN で重複なしリストを区切り連結する | 本記事 H2-6 |
| XLOOKUP で重複なしリストへマスタ情報を付ける | 本記事 H2-8 |
| MAP / LAMBDA で配列の各要素に同じ処理をかける | 本記事 H2-9 |
| 期間内のユニーク件数を数える(YEAR/MONTH 等) | 本記事 H2-10 |
| UNIQUE 関数の基本(書式・スピル) | post 1984 へ |
| 結果から空白や 0 を除外する詳細手順 | post 11200 へ |
| 複数列の重複(複合キー) | post 11378 へ |
(B) 対象バージョン
関数ごとに対応 Excel のバージョンが異なります。本記事の主要式は動的配列対応版(Excel 2021 / 2024 / Microsoft 365)が前提です。Excel 2019 以前ではそのまま使えません。
| 関数 | 主な対応環境 |
|---|---|
| UNIQUE / FILTER / SORT / SORTBY / XLOOKUP | Excel 2021 / 2024 / Microsoft 365 |
| MAP / LAMBDA / BYROW / HSTACK | Excel 2024 / Microsoft 365 |
| COUNTIF / COUNTIFS / SUMIFS / TEXTJOIN / CONCAT | 比較的広い環境(ただし本記事の式は UNIQUE のスピル前提) |
サンプルは扱いやすさのため固定範囲(C2:C13)で書きます。実務で行追加に自動追従させたい場合はテーブル化し、=UNIQUE(売上テーブル[商品名]) のような構造化参照を使ってください。

パターン1:UNIQUE × IF — 値をラベルに置き換えてから重複除去
使いどころ:元データの数値や複雑な値を、業務で扱いやすいラベルに変換してから重複除去したいときに使います。たとえば「数量 3 以上なら大量発注、それ以外は通常発注」のようにカテゴリ分けして、その種類だけを一覧化するシーンです。
元データ(売上台帳の D 列「数量」)に対して、IF で 2 段階のラベルに変換しつつ UNIQUE で集約します。
=UNIQUE(IF(D2:D13>=3, "大量発注", "通常発注"))
結果:「通常発注」「大量発注」の 2 件が縦にスピル表示されます。並びは UNIQUE の出現順を保持するので、元データの 1 行目が数量 2 なら「通常発注」が先に出ます。
3 段階以上のネスト IF も同様に書けます。金額カテゴリを「高額・中額・小額」の 3 段階に分けて重複なしリスト化する例です。
=UNIQUE(IF(E2:E13>=100000, "高額", IF(E2:E13>=30000, "中額", "小額")))
結果:「高額・小額・中額」の 3 件(元データの出現順)。並びをアイウエオ順や金額順にしたい場合は外側に SORT を被せます。
注意点:UNIQUE は出現順を保持します。並び順を制御したいときは外側に SORT を、降順なら SORT の第 3 引数に -1 を指定してください。

パターン2:UNIQUE × IF — 条件絞り込みで FALSE が混ざる罠と回避策
使いどころ:「担当者 = 田中」のような条件で対象を絞ってから重複除去したいシーンです。検索で「unique if 組み合わせ」と調べてたどり着く方の多くがこの用途を想定しています。ただし、ここには IF 特有の罠があります。
罠 1:IF の第 3 引数を省略すると FALSE が結果に残る
=UNIQUE(IF(B2:B13="田中", C2:C13))
実機結果:「ノートPC、FALSE、モニター、キーボード」の 4 件。IF の条件が偽になった行で第 3 引数(false 時の値)が省略されているため、論理値 FALSE が独立した値として UNIQUE 結果に混ざります。
罠 2:IF の第 3 引数を “” にしても空文字が独立行で残る
=UNIQUE(IF(B2:B13="田中", C2:C13, ""))
実機結果:「ノートPC、(空文字)、モニター、キーボード」の 4 件。UNIQUE は空文字 "" も 1 つの値として扱うため、空文字が 1 行残ります。
正しい解:FILTER で書き直す
=UNIQUE(FILTER(C2:C13, B2:B13="田中"))
実機結果:「ノートPC、モニター、キーボード」の 3 件だけが返ります。FILTER は条件を満たす行だけを抜き出すので、FALSE や空文字は発生しません。
注意点:FILTER は該当 0 件のとき #CALC! エラーになります。「該当なしのとき表示するメッセージ」を入れたい場合は、FILTER の第 3 引数を使います。
=UNIQUE(FILTER(C2:C13, B2:B13="不在", "該当なし"))
条件絞り込み・AND/OR 連結・並べ替え・ドロップダウン連携まで通しで知りたい方は、姉妹記事の UNIQUE・SORT・FILTER 関数を組み合わせて重複なしの動的リストを作る方法を参照してください。

パターン3:UNIQUE × COUNTIF — 出現回数で重複度ランキング
使いどころ:商品ごとの発注回数、アンケート選択肢の票数、エラーログのメッセージ別件数など、「重複なしキーごとに何回出てきたか」を一覧化したいシーンです。
2 セルに分けて書きます。A1 に重複なしリスト、B1 に各キーの出現回数を COUNTIF で集計します。
=UNIQUE(C2:C13)
=COUNTIF(C2:C13, A1#)
A1# はスピル範囲参照で、A1 から始まる UNIQUE 結果全体を指します。COUNTIF はそのスピル範囲に追従して各キーの件数を縦に並べて返します。
実機結果:A1# に「ノートPC、マウス、モニター、キーボード」、B1# に「4、3、3、2」。
降順ランキングにしたいときは、商品名と件数を HSTACK で横結合してから SORTBY で並べ替えます。同回数の項目までしっかり並び順を固定したいなら、第 2 キーに商品名昇順を追加します。
=SORTBY(HSTACK(A1#, B1#), B1#, -1, A1#, 1)
注意点:SORT 単独だと同回数の並びは元の UNIQUE 順のままになります(仕様としての安定性は保証されていません)。同順位の並びまで確実にしたいときは、SORTBY で第 2 キー(例:商品名昇順)を必ず追加してください。

パターン4:UNIQUE × COUNTIFS — 条件を加えた出現回数集計
使いどころ:「商品ごとの発注回数」をさらに「担当者 = 田中」のような追加条件で絞りたいときに使います。「田中さんは商品ごとに何回ずつ発注したか」を一発で算出できます。
=UNIQUE(C2:C13)
=COUNTIFS(C2:C13, A1#, B2:B13, "田中")
実機結果:A1# に「ノートPC、マウス、モニター、キーボード」、B1# に「2、0、2、1」。担当者「田中」の発注回数だけが商品ごとに数えられます。
注意点:COUNTIFS は条件を満たす行が 0 件のキー(マウス=0)も結果に残します。「0 件は隠したい」ときは、FILTER で 0 行を除外してください。
=FILTER(HSTACK(A1#, B1#), B1#>0)

パターン5:UNIQUE × TEXTJOIN — 区切り文字付きで連結(CONCAT との違いも)
使いどころ:重複なしリストを 1 つのセルにカンマ区切りで並べたいシーンです。メール本文への貼り付け、レポートのサマリ、商品一覧テキスト化などで便利です。
=TEXTJOIN(", ", TRUE, UNIQUE(C2:C13))実機結果:「ノートPC, マウス, モニター, キーボード」(1 つの文字列)。
TEXTJOIN 第 2 引数の重要性:TRUE にすると空セル・空文字をスキップします。前述のように UNIQUE は空文字を独立行として残すことがあるので、TEXTJOIN を組み合わせるときは TRUE を指定するのが安全です。
| 第 2 引数 | 結果 |
|---|---|
| TRUE(空を無視) | ノートPC, モニター, キーボード |
| FALSE(空も含める) | ノートPC, , モニター, キーボード |
※ どちらも UNIQUE(IF(B2:B13=”田中”, C2:C13, “”)) を入力に渡したケース。
CONCAT との違い:CONCAT は区切り文字を指定できません。
=CONCAT(UNIQUE(C2:C13))
実機結果:「ノートPCマウスモニターキーボード」(区切りなし)。区切りを入れたければ事前に &"/" で連結する手もありますが、末尾に余分な区切りが残ります。区切り連結が必要な場面では TEXTJOIN を第一選択にしてください。

パターン6:UNIQUE × SUMIFS — 重複なしキーごとの金額集計
使いどころ:「商品ごとの売上合計」「担当者ごとの達成額」「顧客ごとの累計金額」など、UNIQUE で重複なしのキーを作り、SUMIFS で各キーの数値合計を算出するシーンです。ピボットテーブルを起動するほどでない簡易集計に向きます。
=UNIQUE(C2:C13)
=SUMIFS(E2:E13, C2:C13, A1#)
実機結果:A1# に「ノートPC、マウス、モニター、キーボード」、B1# に「720000、25000、180000、48000」。
金額の大きい順に並べたいときは、SORTBY で B1# 降順、同額の場合の第 2 キーに商品名昇順を入れて並びを固定します。
=SORTBY(HSTACK(A1#, B1#), B1#, -1, A1#, 1)
注意点:SUMIFS は UNIQUE# の縦スピルにそのまま追従します。横にしたい場合は UNIQUE を TRANSPOSE で横展開すれば、SUMIFS も横向きにスピルします。

パターン7:UNIQUE × XLOOKUP — 重複なしリストにマスタを当てる
使いどころ:売上台帳から重複なしの商品リストを作り、別シートのマスタから単価や品名を引き当てたいシーンです。マスタ照合は VLOOKUP より XLOOKUP のほうがエラー時の代替値を直接指定できて安全です。
マスタを別表(F2:G5)に用意した前提です。F 列が商品名、G 列が単価とします。
=UNIQUE(C2:C13)
=XLOOKUP(A1#, F2:F5, G2:G5, "未登録")
実機結果:A1# に「ノートPC、マウス、モニター、キーボード」、B1# に「120000、2500、30000、8000」。
注意点:XLOOKUP の第 4 引数(一致なし時の値)に "未登録" を入れておくと、マスタ漏れがあったときに #N/A ではなく分かりやすい文字列が表示されます。マスタ整備の漏れチェックにそのまま使えます。

パターン8:UNIQUE × MAP / LAMBDA — 配列の各要素に同じ処理(非再帰)
使いどころ:UNIQUE で得た各要素に対して、同じ計算を一括で適用したいシーンです。SUMIFS や COUNTIFS で代用できる場面が多いですが、より柔軟に「LAMBDA 内で複数行の処理を書きたい」ときに MAP / LAMBDA の組み合わせが効きます。Excel 2024 または Microsoft 365 の環境が必要です。
=MAP(UNIQUE(C2:C13), LAMBDA(x, SUMIFS(E2:E13, C2:C13, x)))
実機結果:UNIQUE で得た商品名(ノートPC・マウス・モニター・キーボード)の各要素 x に対して、SUMIFS が動き、結果として「720000・25000・180000・48000」が縦にスピルします。SUMIFS 単発のスピル結果と一致します。
BYROW で書いても同じ結果になります(単列スピルの場合)。
=BYROW(UNIQUE(C2:C13), LAMBDA(r, SUMIFS(E2:E13, C2:C13, r)))
注意点:LAMBDA 再帰の制限。LAMBDA は名前マネージャーに登録して再帰関数として再利用できますが、LET 内のローカル名として書いた場合は自己参照ができません。実機で以下の差を確認しました。
| 書き方 | 数式 | 実機結果 |
|---|---|---|
| LET ローカル名・単純再帰 | =LET(myfact, LAMBDA(n, IF(n<=1, 1, n*myfact(n-1))), myfact(5)) | #NAME? 相当 |
| LET ローカル名・枝分かれ再帰 | =LET(myfib, LAMBDA(n, IF(n<2, n, myfib(n-1)+myfib(n-2))), myfib(10)) | #NAME? 相当 |
| 名前マネージャー登録・単純再帰 | 名前 myfact_named に LAMBDA を登録、セルで =myfact_named(5) | 120 |
| 名前マネージャー登録・枝分かれ再帰 | 名前 myfib_named に LAMBDA を登録、セルで =myfib_named(10) | 55 |
LET のローカル名で書いた LAMBDA は、その名前で自己参照できません(単純再帰でも #NAME? 相当になります)。再帰関数を使う場合は、Excel の「名前の管理」(数式タブ → 名前の管理) に LAMBDA を登録するのが正しい使い方です。なお、ローカル名に fact のような Excel 組み込み関数名(FACT())と衝突する名前を使うと、結果は LAMBDA 再帰ではなく組み込み関数の計算になります。
本記事の MAP / LAMBDA はあくまで「UNIQUE の各要素に処理を当てる」非再帰用途に絞ります。再帰を本格的に使う場合は名前マネージャー登録、と覚えておけば十分です。

パターン9:UNIQUE × YEAR・MONTH — 期間内のユニーク件数を数える
使いどころ:「2023 年 1 月のユニーク顧客数」「直近 3 か月のリピーター数」など、期間で絞ってからユニーク件数を数えるシーンです。YEAR 関数と MONTH 関数で日付を年・月に分解し、FILTER で絞ってから UNIQUE で重複除去、最後に ROWS 関数で件数化します。
このパターンには、よく見かける書き間違いがあります。FILTER の引数仕様は FILTER(配列, 含む条件, [一致なしの場合]) で、第 3 引数は AND の第 2 条件ではなく、結果が空のときの代替値です。AND を取りたいときは配列論理 * を使います。
検証データ(A 列=日付、B 列=顧客)
| 日付 | 顧客 |
|---|---|
| 2023/01/05 | A |
| 2023/01/08 | B |
| 2023/02/01 | C |
| 2024/01/10 | D |
| 2023/01/20 | A |
誤った書き方(第 3 引数を AND の追加条件と誤解する)
=ROWS(UNIQUE(FILTER(B2:B6, YEAR(A2:A6)=2023, MONTH(A2:A6)=1)))
実機結果:3。MONTH(A2:A6)=1 が第 3 引数 if_empty として渡されて条件として効かないため、2023 年 2 月の顧客 C まで含まれてしまいます。
正しい書き方(複数条件は * で配列論理に)
=ROWS(UNIQUE(FILTER(B2:B6, (YEAR(A2:A6)=2023)*(MONTH(A2:A6)=1))))
実機結果:2。2023 年 1 月の顧客 A と B のみが正しく抽出されます。同じ顧客 A が 2 回登場しても UNIQUE で重複除去されるため、ユニーク件数として 2 が返ります。
注意点:複数条件では、AND 条件に *、OR 条件に + を使います。AND() 関数は配列をスカラーに縮約してしまうため、ここでは使えません。

うまくいかないときの罠(空セル「0」/ FALSE 混入 / 空文字残存)
9 パターンの中で実機で頻発する 3 つの罠を、症状・原因・回避策の三段でまとめます。
| 罠 | 症状 | 回避策 |
|---|---|---|
| 空セルが「0」になる | =UNIQUE(F2:F7) で F 列に空セルがあると、結果に 0 が混入する | =UNIQUE(FILTER(F2:F7, F2:F7<>"")) で空白を除外。本物の数値 0 を残したい場合はこの式のまま使う。0 も除外したい場合だけ、(F2:F7<>"")*(F2:F7<>0) の 2 条件にする |
| IF の FALSE 混入 | =UNIQUE(IF(B2:B13="田中", C2:C13)) の結果に FALSE が独立行で残る | IF を UNIQUE(FILTER(C2:C13, B2:B13="田中")) に書き換える |
| IF 第 3 引数 “” が独立行で残る | =UNIQUE(IF(B2:B13="田中", C2:C13, "")) の結果に空文字 "" が独立行で残る | 外側に FILTER(範囲, 範囲<>"") で空文字除外、または最初から UNIQUE(FILTER(...)) に切り替える |
「0 が見えたら元データの空セルを疑う(ただし本物の 0 と区別する)」「FALSE が見えたら IF を FILTER に置き換えるべき合図」と覚えておくと、原因の切り分けが速くなります。詳しい空白・0 除外パターンは UNIQUE 関数の結果から空白やゼロを除外する計算設定で解説しています。
なお、@ マークが勝手に付いて UNIQUE のスピルが想定どおりに動かない(暗黙的交差)の罠は別記事 数式の「@」が勝手につく 3 つの原因と外し方に切り出しています。

関連記事と次のステップ
本記事は UNIQUE 関数の「他関数との組み合わせカタログ」です。隣接トピックは以下の記事へまとめています。
- UNIQUE 関数の使い方|Excel で重複を除く基本と複数列・空セル対処 — UNIQUE 単体の書式と基本動作
- 【Excel】UNIQUE・SORT・FILTER 関数を組み合わせて重複なしの動的リストを作る方法 — 動的リスト系・条件絞り込み・ドロップダウン連携
- UNIQUE 関数の結果から空白やゼロを除外する計算設定 — 空白/0 を取り除く詳細手順
- 複数列の組み合わせからアイテムリストを UNIQUE 関数で出力する — 複数列キーの重複抽出
- 数式の「@」が勝手につく 3 つの原因と外し方 — 暗黙的交差の罠
まとめ
UNIQUE 関数は他の関数と組み合わせると、業務集計の起点として大きな力を発揮します。本記事で紹介した実用 9 パターンを再掲します。
- UNIQUE × IF(ラベル変換):値を業務カテゴリに変換してから重複除去
- UNIQUE × IF(条件絞り込みの罠):FALSE や空文字の混入を FILTER で回避
- UNIQUE × COUNTIF:重複なしキーごとの出現回数ランキング
- UNIQUE × COUNTIFS:条件を加えた出現回数集計
- UNIQUE × TEXTJOIN:区切り文字付きで連結(CONCAT との違い)
- UNIQUE × SUMIFS:重複なしキーごとの金額集計
- UNIQUE × XLOOKUP:重複なしリストにマスタを当てる
- UNIQUE × MAP / LAMBDA:配列の各要素に同じ処理(非再帰)
- UNIQUE × YEAR / MONTH:期間内のユニーク件数(FILTER 第 3 引数の誤用に注意)
本記事で扱った 9 パターンに加え、罠の比較サンプル・YEAR/MONTH の誤った式と正しい式の対比を 1 つのブックにまとめた配布 xlsx を用意しています。シートごとに数式と結果が並び、対象 Excel バージョンも一覧表にしてあります。
動的リスト系(FILTER + UNIQUE + SORT で重複なしリストを並べ替えてドロップダウンに連携する流れ)は 姉妹記事でまとめて解説しています。本記事の応用 9 パターンと合わせて、UNIQUE を業務で使い倒す全体像が掴めます。
コメント