Excel関数 逆引き集 | 並び替え後に検索 → SORT+XLOOKUP

Excel VBA Excel
スポンサーリンク

概要

「金額の高い順に並べ替えた“あとで”検索したい」
「日付順にソートした表を、別シートから XLOOKUP で参照したい」

そんなときに便利なのが SORT + XLOOKUP の組み合わせです。

ポイントは
「元データを直接並べ替えず、SORT で“並び替え済みの仮想表”を作り、
その仮想表を XLOOKUP の検索範囲にする」
という考え方です。

これで
元データはそのまま
見たいときだけ並び替え+検索
という、柔軟で壊れにくいシートを作れます。


SORT の基本(並び替えだけでまだ検索してない段階)

SORT の書式

=SORT(範囲, [並び替えの基準列], [昇順/降順], [行方向ソートかどうか])

最低限おさえたいのは前半 3 つです。

範囲
並び替えたい表全体。例:A2:D100

並び替えの基準列
何列目を基準に並び替えるか(1=範囲の1列目)。
例:4 を指定すると、範囲の4列目(たとえば「金額」)でソート。

昇順/降順
1 = 昇順(小さい→大きい、古い→新しい)
-1 = 降順(大きい→小さい、新しい→古い)

たとえば、A2:D100 の表を「4列目(金額)」で降順に並び替えた“別表”を作るならこうです。

=SORT(A2:D100, 4, -1)

この式を、たとえば F2 に入れると、
F2 から右下に向かって「金額の高い順に並んだコピー表」がスピル表示されます。
元のA2:D100は一切書き換えません。


SORT した表を XLOOKUP で検索する基本パターン

考え方

  1. SORT で「並び替え済みの仮想表」を作る
  2. その仮想表の中から XLOOKUP で検索する

XLOOKUP 自体は「順序に依存しない」ので
「並べ替えてからじゃないと検索できない」というわけではありません。
ですが、
「集計シートには“ソートされた表”を元に結果を出したい」
「上から順に見ていきたい」
といったニーズがあるときに、SORT と組み合わせる意味が出てきます。


SORT の結果を“そのまま XLOOKUP の範囲にする”書き方

例:金額の高い順に並べ替えた後で、商品コードから商品名を検索

前提:
A2:A100:商品コード
B2:B100:商品名
C2:C100:担当者
D2:D100:金額

この表をまず「金額の降順」に並べ替えた仮想表として扱い、
その中から、E2 の商品コードに対応する商品名を取りたいとします。

XLOOKUP でこう書けます。

=XLOOKUP(
    E2,
    SORT(A2:D100, 4, -1)[列1],
    SORT(A2:D100, 4, -1)[列2]
)

……と書きたいところですが、
実際の Excel では「[列1] みたいな書き方」はできません。

そこで、実務的には「先に SORT の結果をどこかに出してから XLOOKUP する」か、
テーブル化してから構造化参照を組み合わせるほうが現実的です。


実務向きの型①:SORT の結果を“一度セルに出してから” XLOOKUP

一番わかりやすいパターンです。

手順イメージ:

  1. 別の場所に「並び替え済みのコピー表」を SORT で作る
  2. そのコピー表を XLOOKUP の検索範囲にする

例えば、F2 に次の式を書いて、ソート済み表を作ります。

=SORT(A2:D100, 4, -1)

すると
F列:「商品コード」
G列:「商品名」
H列:「担当者」
I列:「金額(降順)」
のような並びで、A2:D100 のコピーが並び替えられて出ます。

この状態で、たとえば K2 のコードに対して
「ソート済み表の中から商品名を取る」ならこうです。

=XLOOKUP(K2, F2:F100, G2:G100, "未登録")

検索は F2:F100(ソート済みのコード列)、
戻りは G2:G100(ソート済みの商品名)です。

元のA〜D列の並びは一切変えずに、
「並び替え後の世界」で XLOOKUP できています。


実務向きの型②:テーブル+SORT+XLOOKUP で “読みやすい”式にする

テーブル(Ctrl+T)を使うと、
「元表 → ソート結果 → XLOOKUP」の関係がとても読みやすくなります。

前提:
元データ表をテーブル化して「tbl売上」という名前を付ける。
列名:商品コード、商品名、担当者、金額

まず、別の場所(例えばシート「集計」)の A2 に、
金額降順のソート結果を作ります。

=SORT(tbl売上,  tbl売上[金額], -1)

これで「金額降順の tbl売上 のコピー」ができます。
(列名も一緒についてきます)

このソート済みテーブルを「tbl売上ソート」などの名前でテーブル化しておけば、
XLOOKUP はこう書けます。

=XLOOKUP(E2, tbl売上ソート[商品コード], tbl売上ソート[商品名], "未登録")

どの表のどの列を検索しているかが、一目で分かる形になります。


SORT を間に挟むメリットと注意点

並び替え基準を変えやすい

SORT の第2・第3引数を変えるだけで、
「金額降順」「金額昇順」「日付昇順」などを簡単に切り替えられます。

元データの並びをいじらずに、
「見たい並びの世界」をいくつも作れるのが大きなメリットです。

XLOOKUP 自体は並び順に依存しない

XLOOKUP は基本「順序に関係なく検索できる」関数なので、
「並び替えないと検索できない」というわけではありません。

SORT+XLOOKUP は

並び替えられた状態で見たい
その上で検索もしたい

というニーズがあるときに使う組み合わせだと捉えてください。

SORT の結果はスピルするので、下方向・右方向の空きを確保する

SORT の結果表をどこかに出す場合、
その右下の範囲に何もないようにしておかないと
#SPILL! になります。


例題

問題1

A2:D100 に「商品コード, 商品名, 担当者, 金額」が入っています。
この表を「金額の高い順(降順)」に並べ替えたコピー表を F2 に作る SORT の式を書いてください。

=SORT(A2:D100, 4, -1)

問題2

問題1で、F2:I100 に「ソート済みの売上表」ができているとします。
K2 に商品コードを入力したとき、そのコードに対応する商品名を
ソート済み表(F列:コード, G列:商品名)から取得し、L2 に表示する XLOOKUP の式を書いてください。

=XLOOKUP(K2, F2:F100, G2:G100, "未登録")

問題3

元データ A2:D100 をテーブル化して「tbl売上」という名前を付け、
列「金額」で降順にソートしたコピー表を、シート「集計」の A2 に作る SORT の式を書いてください。

=SORT(tbl売上, tbl売上[金額], -1)

問題4

問題3で作成したソート済みテーブルに「tbl売上ソート」という名前を付けたとします。
集計シートの E2 に商品コードを入力したら、
tbl売上ソート から商品名を取得して F2 に表示する XLOOKUP の式を書いてください。

=XLOOKUP(E2, tbl売上ソート[商品コード], tbl売上ソート[商品名], "未登録")

問題5

A2:D100 に「商品コード, 商品名, 担当者, 日付」が入っています。
この表を「日付の古い順(昇順)」に並べ替えたコピー表を H2 に作り、
J2 の商品コードに対して、そのコピー表から商品名を取得して K2 に表示する、
SORT+XLOOKUP の 2つの式を書いてください。

H2(ソート):

=SORT(A2:D100, 4, 1)

K2(検索):

=XLOOKUP(J2, H2:H100, I2:I100, "未登録")

まとめ

「並び替え後に検索」の基本パターンは、こう整理できます。

1つ目の型:ソート済みコピー表を作る

=SORT(元表範囲, 並び替えの基準列番号, 1または-1)

2つ目の型:そのコピー表を XLOOKUP で検索する

=XLOOKUP(検索値, ソート済み表のキー列, ソート済み表の戻り列, "未登録")

この 2ステップさえ覚えておけば、
元データを壊さずに、
「任意の並び順で見ながら XLOOKUP で結果を取る」
という柔軟なシートを自在に作れるようになります。

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