• 作成日 : 2025年8月25日

SORTBY関数の使い方:複数の基準でデータを並べ替える方法

SORTBY関数は、指定した列(基準列)に基づいてデータを動的に並べ替える関数です。売上データの多角的な分析、成績表の順位付け、在庫リストの優先順位管理など、複数の基準でデータを整理する場面で活用されます。例えば、売上高の降順で並べ替えた後、同じ売上高の場合は利益率の高い順に並べるといった、複雑な並べ替えを簡単に実現できます。

本記事では、SORTBY関数の基本的な使い方から実践的な活用方法、他の関数との効果的な組み合わせまで、わかりやすく解説していきます。

SORTBY関数とは

SORTBY関数は、Excel 365で導入された動的配列関数の一つで、指定した基準列に基づいてデータ範囲全体を並べ替えます。従来の並べ替え機能と異なり、元データを変更することなく、別の場所に並べ替えた結果を表示できます。また、数式として記述するため、元データが更新されると自動的に並べ替え結果も更新されます。

この関数の最大の特徴は、複数の並べ替え基準を簡単に指定できることです。第1基準で並べ替えた後、同じ値がある場合は第2基準、第3基準と順次適用できるため、複雑な並べ替えルールも一つの関数で実現できます。

SORTBY関数の基本的な使い方

関数の構文を理解する

SORTBY関数の構文は次のとおりです。

=SORTBY(配列, 基準配列1, [並べ替え順序1], [基準配列2, 並べ替え順序2], …)

配列は並べ替えたいデータ範囲、基準配列は並べ替えの基準となる列、並べ替え順序は昇順(1)または降順(-1)を指定します。

基本的な使用例

実際の使用例を見てみましょう。

A2:C10に社員名、部署、売上のデータがある場合:

=SORTBY(A2:C10, C2:C10, -1)

この結果は、売上(C列)の降順で全データを並べ替えます。

複数基準での並べ替え:

=SORTBY(A2:C10, B2:B10, 1, C2:C10, -1)

この場合、まず部署(B列)の昇順で並べ替え、同じ部署内では売上(C列)の降順で並べ替えます。

並べ替え順序の指定

並べ替え順序は数値で指定します。

=SORTBY(A2:D10, B2:B10, 1)    ‘ 昇順(小さい順、A→Z)

=SORTBY(A2:D10, B2:B10, -1)   ‘ 降順(大きい順、Z→A)

省略した場合は昇順(1)として扱われます。

SORTBY関数の実践的な利用シーン

売上分析での活用

営業成績の分析では、複数の視点からデータを並べ替える必要があります。例えば、地域別・月別・商品別の売上データを、売上高の高い順に並べ替えつつ、同じ売上高の場合は利益率の高い順に表示することで、優先的に注力すべき領域を特定できます。

動的な並べ替えにより、フィルターを使わずに様々な角度からデータを分析でき、意思決定のスピードが向上します。

成績管理と順位付け

学校や研修での成績管理において、総合点での順位付けはもちろん、同点の場合の優先順位も自動的に処理できます。例えば、総合点が同じ場合は数学の点数、それも同じなら国語の点数という具合に、複数の基準で公平な順位付けが可能です。

成績表を更新するたびに自動的に順位が再計算されるため、手動での並べ替えミスを防げます。

在庫管理の最適化

在庫管理では、在庫回転率、在庫金額、保管期間など複数の要因を考慮した優先順位付けが必要です。SORTBY関数を使用することで、例えば在庫金額が高く、かつ回転率が低い商品を上位に表示し、優先的に対策を講じるべき商品を特定できます。

季節商品では、シーズンまでの残り日数と在庫数を組み合わせた並べ替えにより、適切な在庫調整のタイミングを把握できます。

SORTBY関数の応用テクニック

条件付き並べ替え

以下のいずれかで、並べ替え基準も同じ条件で揃えます。

=SORTBY(FILTER(A2:C10, B2:B10=”営業部”),

FILTER(C2:C10, B2:B10=”営業部”), -1)

または(FILTER結果の3列目を基準にする場合)

=SORTBY(FILTER(A2:C10, B2:B10=”営業部”),

INDEX(FILTER(A2:C10, B2:B10=”営業部”), , 3), -1)

計算結果による並べ替え

元データにない計算値を基準に並べ替える:

=SORTBY(A2:C10, C2:C10/B2:B10, -1)

売上を人数で割った「一人当たり売上」で並べ替えます。

文字列の長さで並べ替え

商品名や説明文を文字数順に並べる:

=SORTBY(A2:B10, LEN(A2:A10), 1)

短い名前から長い名前の順に並べ替えます。

SORTBY関数のよくあるエラーと対策

#SPILL!エラーへの対処

原因の例:

  • スピル先に既存データがある
  • スピル先に結合セルが含まれている
  • 数式が「テーブル」内にありスピル非対応
  • スピル範囲がシート端を超える
  • 配列のサイズが不確定(RANDARRAY/RANDBETWEEN など)

エラーの確認方法:

    • 数式セルを選択すると、意図したスピル範囲が破線で表示されます。
    • 表示されるエラー チェック アラートから[妨げセルの選択]を選び、ブロックしているセルを特定します。

(補足)別セルで通知したい場合:

  • スピル元セル(例:E2)を別セルで参照して、=IFERROR(E2, “表示範囲を確保してください”)

    とすると、参照側でメッセージ化できます(元セルの #SPILL! は解消されません)。

対処方法:

  • スピル先の既存データを削除または移動する
  • 結合セルを解除する
  • テーブルなら[範囲に変換]するかテーブル外に数式を移動する
  • スピル先がシート端を超える場合は数式の位置をずらす/対象を小さくする
  • 別シートに結果を表示する
  • 結果の一部のみを表示するなら、INDEX などで単一値出力にする

#VALUE!エラーへの対処

基準配列のサイズが配列と一致しない場合に発生します。

サイズチェックを含む処理:

=IF(ROWS(A2:C10)<>ROWS(C2:C10), “範囲のサイズが一致しません”,

SORTBY(A2:C10, C2:C10, -1))

動的な範囲指定での対処:

=LET(データ範囲, A2:C100,

基準列, INDEX(データ範囲, 0, 3),

SORTBY(データ範囲, 基準列, -1))

LET関数を使用することで、範囲の整合性を保ちやすくなります。データ範囲を変数として定義し、そこから基準列を抽出することで、サイズの不一致を防げます。

空白セルの扱い

基準配列に空白セルが含まれる場合の挙動に注意が必要です。

空白を最後に配置する処理:

=SORTBY(A2:C10, IF(C2:C10=””, 999999, C2:C10), 1)

空白を除外して並べ替え:

=LET(非空白データ, FILTER(A2:C10, C2:C10<>””),

SORTBY(非空白データ, INDEX(非空白データ, 0, 3), -1))

数値と文字列が混在する列では、空白セルが0として扱われるケースがあるため、意図しない並び順になる可能性があります。IF関数で空白に大きな値を割り当てることで、最後に配置できます。

文字列と数値の混在

基準列に文字列と数値が混在する場合、予期しない結果になることがあります。

データ型の統一:

=SORTBY(A2:C10, VALUE(C2:C10), -1)

エラー処理を含む変換:

=SORTBY(A2:C10, IFERROR(VALUE(C2:C10), 0), -1)

文字列として保存された数値は、VALUE関数で数値に変換してから並べ替えることで、正しい順序を得られます。変換できない文字列は0として扱うなど、適切なデフォルト値を設定することが重要です。

SORTBY関数と他の関数との組み合わせ

FILTER関数での条件付き並べ替え

特定条件のデータを抽出してから並べ替える:

(いずれも 推奨:CHOOSECOLS を使う例。CHOOSECOLS が使えない環境では INDEX(…,0,列番号) を使ってください。)

=LET(f, FILTER(A2:D10, D2:D10>100000),

SORTBY(f, CHOOSECOLS(f, 4), -1))

=LET(f, FILTER(データ範囲, (条件1)*(条件2)),

SORTBY(f, CHOOSECOLS(f, 基準列番号), -1))

売上が10万円以上のデータのみを抽出し、売上順に並べ替えます。FILTER関数と組み合わせることで、必要なデータだけを対象にした効率的な分析が可能になります。複数条件を掛け算で組み合わせることで、AND条件での絞り込みも実現できます。

UNIQUE関数での重複除去後の並べ替え

重複を除去してから並べ替える:

=LET(u, UNIQUE(A2:B10),

SORTBY(u, CHOOSECOLS(u, 2), -1))

=LET(u, UNIQUE(FILTER(A2:C10, C2:C10>0)),

SORTBY(u, CHOOSECOLS(u, 3), -1))

(参考:SORT を使うなら列番号指定で書けます

=SORT(FILTER(A2:D10, D2:D10>100000), 4, -1) / =SORT(UNIQUE(A2:B10), 2, -1) など。)

顧客リストから重複を除去し、購入金額順に並べ替えるなどの処理が可能です。UNIQUE関数で一意の値だけを抽出してから並べ替えることで、重複のないクリーンなデータセットを作成できます。マスターデータの作成や、レポート用のサマリー作成に有効です。

INDEX関数での上位N件の抽出

並べ替え後の上位データのみを取得:

=INDEX(SORTBY(A2:C10, C2:C10, -1), SEQUENCE(5), {1,2,3})

=LET(並替済, SORTBY(A2:C10, C2:C10, -1),

INDEX(並替済, SEQUENCE(MIN(5, ROWS(並替済))), 0))

売上上位5件のデータを抽出します。SEQUENCE関数で連番を生成し、INDEX関数で必要な行だけを取り出します。LET関数を使用することで、並べ替え結果を変数に格納し、エラー処理も含めた柔軟な処理が可能になります。

SCAN関数での並べ替え後の集計

並べ替えたデータの累計を計算:

=LET(並替データ, SORTBY(A2:C10, C2:C10, -1),

売上列, INDEX(並替データ, 0, 3),

SCAN(0, 売上列, LAMBDA(a,b, a+b)))

売上順に並べ替えた後、累積売上を計算します。SCAN関数を使用することで、動的な累計計算が可能になります。パレート分析など、累積比率を使った分析に活用できます。

XLOOKUP関数での順位検索

並べ替え結果から特定の順位のデータを取得:

=INDEX(SORTBY(A2:C10, C2:C10, -1), 3, 0)

=LET(s, SORTBY(A2:C10, C2:C10, -1),

XLOOKUP(検索名, INDEX(s, 0, 1), s))

「特定の人の順位を確認」する正しい例(位置を返す):

=LET(s, SORTBY(A2:C10, C2:C10, -1),

XMATCH(検索名, INDEX(s, 0, 1)))

売上3位のデータを取得したり、特定の人の順位を確認したりできます。動的な順位表を作成し、常に最新の順位情報を参照できます。

TEXT関数での書式設定付き並べ替え

並べ替えと同時に表示形式を整える:

=LET(元データ, A2:C10,

並替済, SORTBY(元データ, C2:C10, -1),

CHOOSE({1,2,3},

INDEX(並替済, 0, 1),

INDEX(並替済, 0, 2),

TEXT(INDEX(並替済, 0, 3), “#,##0″”円”””)))

金額に通貨書式を適用しながら並べ替えます。CHOOSE関数とTEXT関数を組み合わせることで、各列に異なる書式を適用できます。レポート用の整形されたデータを一度に作成できます。

SORTBY関数で複数基準の並べ替えを自動化

SORTBY関数は、指定した複数の基準に基づいてデータを動的に並べ替えるExcelの配列関数です。元データを変更せずに別の場所に並べ替え結果を表示できるため、売上分析や成績管理、在庫の優先順位付けなど、さまざまな場面で利用されています。

売上の降順や部署別の昇順など、複数条件での並べ替えを1つの数式で設定でき、FILTER関数やUNIQUE関数、LET関数と組み合わせることで、条件抽出・重複除去・表示形式の整形にも対応できます。

一方で、スピル範囲の確保、基準列とデータ範囲のサイズ一致、空白セルやデータ型の混在への対応といった、事前のデータ整備が必要になります。また、SORTBY関数は並べ替えを行う関数であり、順位付けや集計にはINDEX関数やSCAN関数などの併用が求められます。

機能の特性と制約を理解したうえで使用することで、データの整理や比較がしやすくなり、日常業務の効率化につながります。


※ 掲載している情報は記事更新時点のものです。

※本サイトは、法律的またはその他のアドバイスの提供を目的としたものではありません。当社は本サイトの記載内容(テンプレートを含む)の正確性、妥当性の確保に努めておりますが、ご利用にあたっては、個別の事情を適宜専門家にご相談いただくなど、ご自身の判断でご利用ください。

関連記事