概要
「金額の高い順に並べ替えた“あとで”検索したい」
「日付順にソートした表を、別シートから 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 で検索する基本パターン
考え方
- SORT で「並び替え済みの仮想表」を作る
- その仮想表の中から 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
一番わかりやすいパターンです。
手順イメージ:
- 別の場所に「並び替え済みのコピー表」を SORT で作る
- そのコピー表を 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 で結果を取る」
という柔軟なシートを自在に作れるようになります。
