Excelで「最後に初登場」したデータを見つける!リストがコンプリートした瞬間を特定する数式

実務の深淵

はじめに:最後のピースは誰だ?

突然ですが、あなたは飲食店の店長です。
ホールスタッフが注文を取るたびに、Excelにメニュー名を入力しています。

牛丼、そば、牛丼、ラーメン、パスタ、牛丼……

さて、ここで少し変わったクイズです。

「このリストの中で、一番最後になってようやく注文された『新顔』メニューはどれ?」

Excelの説明画像

しかし、これは一番下の行にあるメニューではありません。

ずっと注文されずに残っていて、リストの下の方でようやく「お待たせ!」と初登場したメニューを探したいのです。

今回は、このリストの中で最後に初登場するデータを、最新の関数から古の関数パズルまで、5つのアプローチで特定します。

これが分かれば、あなたもデータの出現順序を操る魔術師になれるかも!?

本記事では、無料のWeb版Excelを使用して検証および画像の作成を行っています。Windowsはもちろん、MacやLinuxの方もブラウザさえあれば挑戦できます!

冒険の準備 – 注文リスト

まずは、A1セルを起点に以下のデータを入力してください。

={"注文";"牛丼";"そば";"牛丼";"牛丼";"サラダ";"パスタ";"ラーメン";"牛丼";"そば";"定食";"ラーメン";"定食";"ラーメン";"パスタ";"サラダ"}

Excelの説明画像

【データの流れを見てみよう】

上から順に見ていくと…

  • 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)

この関数は、リストから重複を取り除き、「最初に出てきた順」に並べたリストを作ります。

内部では {"牛丼"; "そば"; "サラダ"; "パスタ"; "ラーメン"; "定食"} という配列ができています。

Excelの説明画像

2. TAKE(..., -1)

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

Excelの説明画像

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...}

Excelの説明画像

2. SORTBY(..., MATCHの結果)

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

Excelの説明画像

3. INDEX(..., ROWS(...))

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

Excelの説明画像

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」が返るのがポイントです。

Excelの説明画像

2. MAX(...)

この番号の中で一番大きい数字を探します。今回は「10」ですね。

つまり、「一番後ろの番号を持っている人=一番遅れてやってきた新顔(定食)」 ということになります!

Excelの説明画像

3. INDEX(...)

その位置にあるデータを取り出します。

Excelの説明画像

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行」という、少しずつ広がる範囲を大量に作ります。

Excelの説明画像

2. COUNTIF(...) = 1

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

Excelの説明画像

3. AGGREGATE(14, 6, ...)

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

Excelの説明画像

4. INDEX(...)

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

Excelの説明画像

【注意】揮発性関数について
この数式で使用している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)ということは、「今まさにここが初登場の行だ!」ということです。

Excelの説明画像

2. 1 / (TRUE or FALSE)

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

Excelの説明画像

3. LOOKUP(2, ...)

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

Excelの説明画像

まとめ:全種類コンプリートした瞬間を見逃すな!

「最後に初登場したデータ」が分かるということは、言い換えればデータが全種類コンプリートした瞬間」が分かるということです。

このロジックは、例えば以下のような場面で絶大な威力を発揮します。

  • ガチャ・コレクション: 何回目で全種類コンプリートしたのか、最後の1種類は何だったのかを特定する。
  • 日報提出チェック: チーム全員の日報が出揃ったのはいつか、最後に提出したのは誰かをあぶり出す。
  • 不具合ログ分析: 全パターンのエラーが出尽くしたタイミングを知る。

UNIQUE」や「MATCH」の動きを深く理解することで、データの見え方が変わってきます。
ぜひ、お手元のデータで「最後のワンピース」を探してみてください!

タイトルとURLをコピーしました