条件に合うデータを抽出した上で、さらに金額の大きい順など任意の並び順で見たいとき、結論から言うとSORT関数とFILTER関数を組み合わせることで、絞り込みと並べ替えを1つの数式で同時に行えます。この記事では基本の書き方、FILTER単体との違い、複数条件を組み合わせる際の注意点まで解説します。
SORT+FILTERで絞り込みと並べ替えを同時に行う基本の書き方
基本の形は次の通りです。
=SORT(FILTER(配列,含む条件),並べ替えのキー列,並べ替え順序)
先にFILTERで条件に合う行だけを絞り込み、その結果をSORTで指定した列を基準に並べ替える、という2段構えの数式です。並べ替え順序は「1」が昇順、「-1」が降順です。
なぜFILTER単体ではなくSORTと組み合わせるのか
FILTER関数で条件に合うデータだけを抽出する方法単体では、抽出された行は元データに登場した順番のまま並びます。並び順を変えたい場合は、抽出後に手動で並べ替えるか、SORT関数で囲む必要があります。SORTはFILTERの結果(配列)をそのまま受け取れるため、抽出と並べ替えを1つの数式にまとめられます(Excel 2021・Microsoft 365以降で利用可能)。
具体例:「文具」カテゴリを金額の高い順に並べる
次のような注文データ(A1:C8)があるとします。A列が担当者、B列がカテゴリ、C列が金額です。
| A(担当者) | B(カテゴリ) | C(金額) | |
|---|---|---|---|
| 2 | 佐藤 | 文具 | 1200 |
| 3 | 鈴木 | 雑貨 | 800 |
| 4 | 佐藤 | 雑貨 | 500 |
| 5 | 田中 | 文具 | 1500 |
| 6 | 鈴木 | 文具 | 900 |
| 7 | 佐藤 | 文具 | 700 |
| 8 | 高橋 | 雑貨 | 300 |
B列(カテゴリ)が「文具」の行を、C列(金額)の高い順に並べたい場合、次のように書きます。
=SORT(FILTER(A2:C8,B2:B8="文具"),3,-1)
まずB列(カテゴリ)が「文具」の行だけをFILTERで絞り込み、その結果を3列目(金額)を基準に降順(-1)で並べ替える、という意味の数式です。
絞り込まれた4行「佐藤/1200」「田中/1500」「鈴木/900」「佐藤/700」が、金額の高い順に「田中/1500」「佐藤/1200」「鈴木/900」「佐藤/700」と並び替わります。
複数条件で絞り込んでから並べ替える場合
「文具」かつ「金額1000以上」のように複数条件で絞り込みたい場合は、内側のFILTERの条件式を掛け算(*)や足し算(+)でつなぎます。
=SORT(FILTER(A2:C8,(B2:B8="文具")*(C2:C8>=1000)),3,-1)
この条件式の組み立て方はSUMPRODUCTでAND/OR条件の集計をする方法で紹介しているAND/OR条件の考え方と同じです。
よくあるエラー・注意点
- 内側のFILTERがエラーだと外側のSORTもエラーになる: FILTERの結果が0件で#CALC!エラーになっている場合、それを受け取るSORTも同様にエラーを返します。FILTER側に「空の場合」の指定をしておくと安全です。
- 並べ替えのキー列番号を間違えやすい: SORTの第2引数はFILTERの結果(絞り込んだあとの配列)の中での列番号です。元データ全体での列番号と混同しないよう注意しましょう。
- 古いExcelでは使えない: SORT・FILTERともにExcel 2021・Microsoft 365以降で追加された関数です。それより古いバージョンでは#NAME?エラーになります。
まとめ
SORT関数とFILTER関数を組み合わせることで、条件による絞り込みと並べ替えを1つの数式にまとめられます。並べ替えを伴わずまず絞り込みだけを行いたい場合はFILTER関数で条件に合うデータだけを抽出する方法、重複を除いた一覧を作りたい場合はUNIQUE関数で重複を除いたリストを作る方法もあわせてご覧ください。





