はじめに:最後のピースは誰だ?
突然ですが、あなたは飲食店の店長です。
ホールスタッフが注文を取るたびに、Excelにメニュー名を入力しています。
牛丼、そば、牛丼、ラーメン、パスタ、牛丼……
さて、ここで少し変わったクイズです。
「このリストの中で、一番最後になってようやく注文された『新顔』メニューはどれ?」

しかし、これは一番下の行にあるメニューではありません。
ずっと注文されずに残っていて、リストの下の方でようやく「お待たせ!」と初登場したメニューを探したいのです。
今回は、この「リストの中で最後に初登場するデータ」を、最新の関数から古の関数パズルまで、5つのアプローチで特定します。
これが分かれば、あなたもデータの出現順序を操る魔術師になれるかも!?
本記事では、無料のWeb版Excelを使用して検証および画像の作成を行っています。Windowsはもちろん、MacやLinuxの方もブラウザさえあれば挑戦できます!
冒険の準備 – 注文リスト
まずは、A1セルを起点に以下のデータを入力してください。
={"注文";"牛丼";"そば";"牛丼";"牛丼";"サラダ";"パスタ";"ラーメン";"牛丼";"そば";"定食";"ラーメン";"定食";"ラーメン";"パスタ";"サラダ"}

【データの流れを見てみよう】
上から順に見ていくと…
- 2行目:牛丼(初!)
- 3行目:そば(初!)
- 6行目:サラダ(初!)
- 7行目:パスタ(初!)
- 8行目:ラーメン(初!)
- 11行目:定食(初!) ← ここですべての役者が揃いました!
- 12行目以降:すべて既出のメニュー
つまり、今回の正解はA11セルの「定食」です。
さあ、数式でこの「定食」を捕まえに行きましょう!
5つの数式で「最後の初登場」を特定せよ!
関数の詳細な仕様については、Microsoft公式のヘルプも参考にしてください。
1. 【最新鋭】TAKE & UNIQUE (Excel 2024 / Microsoft 365)
はじめに、最新のExcelを使っているなら、これが最もシンプルで美しい解法です。
数式と解説
=TAKE(UNIQUE(A2:A16),-1)
解説:
1. UNIQUE(A2:A16)
この関数は、リストから重複を取り除き、「最初に出てきた順」に並べたリストを作ります。
内部では {"牛丼"; "そば"; "サラダ"; "パスタ"; "ラーメン"; "定食"} という配列ができています。

2. TAKE(..., -1)
そのリストの「一番後ろ(-1)」を取り出します。
出現順リストの最後ということは、すなわち「最後に初登場したもの」ですね!

2. 【スマート】SORTBY & MATCH (Excel 2021以降)
次に、「並べ替え」の概念を使った、理にかなった解法です。
数式と解説
=INDEX(SORTBY(A2:A16, MATCH(A2:A16, A2:A16, 0)), ROWS(A2:A16))
解説:
1. MATCH(A2:A16, A2:A16, 0)
ここがミソです!MATCH関数で自分自身を検索すると、「そのデータが最初に登場した位置」が返ってきます。
例えば、牛丼なら「1」、定食なら「10」になります。
イメージとしては、メニューごとに「初登場の席番号」を配っているようなものです。
- 牛丼さんには「1番」の整理券
- そばさんには「2番」の整理券
- (2回目の牛丼さんが来ても、「あなたは1番です」と言われる)
- …
- 定食さんには「10番」の整理券
結果:{1; 2; 1; 1; 5; 6; 7; 1; 2; 10...}

2. SORTBY(..., MATCHの結果)
元のリストを、この「初登場番号」の小さい順に並べ替えます。
すると、同じメニュー同士が固まりつつ、初登場が早い順に上から並びます。

3. INDEX(..., ROWS(...))
続いて、並べ替えたリストの「一番下の行」を取得します。
初登場が一番遅いグループが一番下に集まっているので、その末尾を取れば正解です。

3. 【王道】INDEX & MATCH & MAX (全バージョン対応)
次は、古いExcelでも使える、実務で最も頼りになる「検索の王道」パターンです。
INDEX & MATCHの検索については以下の記事で紹介しています。
数式と解説
=INDEX(A2:A16,MAX(MATCH(A2:A16,A2:A16,0)))
解説:
1. MATCH(A2:A16, A2:A16, 0)
先ほどと同様、MATCH関数で自分自身を検索すると、「そのデータが最初に登場した位置」が返ってきます。
2回目以降の「牛丼」でも、必ず最初の牛丼の位置「1」が返るのがポイントです。

2. MAX(...)
この番号の中で一番大きい数字を探します。今回は「10」ですね。
つまり、「一番後ろの番号を持っている人=一番遅れてやってきた新顔(定食)」 ということになります!

3. INDEX(...)
その位置にあるデータを取り出します。

4. 【関数パズル】AGGREGATE & COUNTIF (マニア向け)
さらに、「そのセルまでの範囲でカウントする」という、OFFSET関数を使った動的な技です。
数式と解説
=INDEX(A2:A16,AGGREGATE(14,6,SEQUENCE(15)/(COUNTIF(OFFSET(A2,,,SEQUENCE(15)),A2:A16)=1),1))
解説:
これはかなり高度なパズルです!
1. OFFSET(..., SEQUENCE(15))
「A2から1行」「A2から2行」…「A2から15行」という、少しずつ広がる範囲を大量に作ります。

2. COUNTIF(...) = 1
それぞれの広がる範囲の中で、「そのデータが1個しかない(=今初めて出た!)」という瞬間を探します。

3. AGGREGATE(14, 6, ...)
次に、条件を満たす(初登場の)行番号の中で、一番大きいもの(LARGE関数相当)をエラー無視で取り出します。

4. INDEX(...)
最後に、その位置にあるデータを取り出します。

【注意】揮発性関数について
この数式で使用しているOFFSET関数は「揮発性関数」と呼ばれ、シート上のどこかのセルが変更されるたびに毎回再計算を行います。
数千行のデータに対してこの数式を多用すると、Excelの動作が重くなる可能性があります。ここぞという場面での切り札として使いましょう。
5. 【魔術】LOOKUPの逆襲 (全バージョン対応)
最後に、当ブログでおなじみ、配列計算の魔術師「LOOKUP関数」を使った解法です。
数式と解説
=LOOKUP(2,1/(MATCH(A2:A16,A2:A16,0)=ROW(A2:A16)-ROW(A1)),A2:A16)
LOOKUP関数を使ってみたい!という方は以下の記事を是非ご覧ください!
解説:
1. MATCH(A2:A16,A2:A16,0)=ROW(A2:A16)-ROW(A1)
「そのデータの初登場位置」と「現在の行番号」を比較しています。
これが一致する(TRUE)ということは、「今まさにここが初登場の行だ!」ということです。

2. 1 / (TRUE or FALSE)
TRUEは1、FALSEは0として計算されるので、初登場行は「1」、それ以外は「#DIV/0!エラー」になります。

3. LOOKUP(2, ...)
エラーを無視して「最後の数値」を探すLOOKUPの性質を利用し、一番下の「1」(=一番下の初登場行)に対応するメニューを返します。

まとめ:全種類コンプリートした瞬間を見逃すな!
「最後に初登場したデータ」が分かるということは、言い換えれば「データが全種類コンプリートした瞬間」が分かるということです。
このロジックは、例えば以下のような場面で絶大な威力を発揮します。
- ガチャ・コレクション: 何回目で全種類コンプリートしたのか、最後の1種類は何だったのかを特定する。
- 日報提出チェック: チーム全員の日報が出揃ったのはいつか、最後に提出したのは誰かをあぶり出す。
- 不具合ログ分析: 全パターンのエラーが出尽くしたタイミングを知る。
「UNIQUE」や「MATCH」の動きを深く理解することで、データの見え方が変わってきます。
ぜひ、お手元のデータで「最後のワンピース」を探してみてください!




