「売上金額の大きい順に担当者名だけを並べ替えたい」「カテゴリ昇順・価格降順の2条件で商品一覧を整理したい」――元データを書き換えずに、別のセルへ並べ替え結果をスピル展開して自動更新したいとき、SORTBY関数が威力を発揮します。
SORT関数との最大の違いは、並べ替えの基準となる列が、並べ替え対象の範囲の外にあってもよい点です。SORTBY関数はExcel 365(Microsoft 365版Excel)で利用できる動的配列関数で、MOS Excel 365 エキスパート(MO-211)の「高度な機能を使用した数式およびマクロの作成」の出題範囲に含まれます。本記事では、構文の基本から複数条件・外部基準・FILTER連携まで、実務でそのまま使えるパターンを体系的に解説します。
SORTBY関数の役割とSORT関数との違い
まず、SORT関数とSORTBY関数の違いを整理します。
| 関数 | 並べ替え基準の位置 | 複数基準 | 典型的な用途 |
|---|---|---|---|
| SORT | 並べ替え対象の列番号で指定(内部) | 1列のみ | テーブル全体を1列で並べ替え |
| SORTBY | 外部の任意の範囲を指定可能 | 複数列の組み合わせが可能 | 外部スコア・ランク・複数条件での高度な並べ替え |
たとえば「名前と部署だけを表示した列を、別シートの売上金額の大きい順に並べ替えたい」というケースでは、SORT関数では実現が難しく、SORTBY関数が必要になります。
SORTBY関数の構文
=SORTBY(配列, 基準配列1, [並べ替え順序1], [基準配列2, 並べ替え順序2], ...)
| 引数 | 説明 | 値・形式 |
|---|---|---|
| 配列 | 並べ替えて返したいセル範囲または配列 | 必須 |
| 基準配列1 | 並べ替えの基準となる範囲または配列(配列と行数または列数が一致していること) | 必須 |
| 並べ替え順序1 | 1 = 昇順(既定)、-1 = 降順 | 省略可(省略時は1) |
| 基準配列2以降 | 第2・第3の並べ替え基準(第1基準が同じ値のときに適用) | 省略可・繰り返し指定可 |
引数の重要なルール
- 配列と基準配列は行数(縦方向に並べ替える場合)または列数(横方向の場合)が一致している必要があります。
- 基準配列は1列(または1行)で指定します。複数列の範囲を渡すとエラーになります。
- 基準配列の範囲は配列の外側にあっても構いません(これがSORT関数との最大の差異)。
- 並べ替え順序を省略するか 1 を指定すると昇順、-1 で降順になります。
基本例:単一条件で並べ替える
例1:売上金額の降順でA列の名前リストを並べ替える
A列に担当者名(A2:A11)、B列に売上金額(B2:B11)があるとします。D2セルに担当者名を売上降順で並べ替えた結果をスピル展開するには、次のように入力します。
=SORTBY(A2:A11, B2:B11, -1)
この式はA列(担当者名)をB列(売上金額)の大きい順(-1 = 降順)で並べ替えた結果をD2から下方向にスピル展開します。B列の値そのものは結果に含まれません。
例2:名前と売上を両方取り出して並べ替える
担当者名と売上金額の両方を並べ替えた結果として取り出したい場合は、配列を2列分にします。
=SORTBY(A2:B11, B2:B11, -1)
A2:B11(名前と売上)をB列(売上)の降順で並べ替え、名前・売上の2列がスピル展開されます。B列を基準にしつつB列自体も出力に含められる点がポイントです。
複数条件:昇順・降順の組み合わせ
基準配列と並べ替え順序のペアを追加すると、複数の条件を組み合わせた並べ替えができます。
例3:カテゴリ昇順→価格降順の2条件で並べ替える
A列に商品名、B列にカテゴリ、C列に価格があるとします(A2:C20)。カテゴリ昇順・価格降順で並べ替えるには次の通りです。
=SORTBY(A2:C20, B2:B20, 1, C2:C20, -1)
第1基準(B列=カテゴリ)が同じ値の行の中で、第2基準(C列=価格)の降順で並べ替えます。基準の組は「基準配列, 順序」のペアでいくつでも追加できます。
| 引数の位置 | 指定値 | 役割 |
|---|---|---|
| 第1引数 | A2:C20 | 並べ替えて返す範囲(商品名・カテゴリ・価格) |
| 第2引数 | B2:B20 | 第1基準(カテゴリ) |
| 第3引数 | 1 | 第1基準は昇順 |
| 第4引数 | C2:C20 | 第2基準(価格) |
| 第5引数 | -1 | 第2基準は降順 |
外部基準:元データの範囲外にある列を基準にする
SORTBY関数の最大の特長は、並べ替え対象の範囲に含まれない外部の列を基準にできる点です。
例4:RANK関数の結果を基準に並べ替える
D列にRANK関数で計算したランク(D2:D11)があり、A列の担当者名リスト(A2:A11)をそのランクの昇順で並べ替えたい場合です。
' D列にあらかじめRANK関数で順位を計算しておく例
' D2 = RANK(B2, $B$2:$B$11, 0) ← 売上降順ランク
' A列の名前をD列のランク昇順(順位1位が先頭)で並べ替え
=SORTBY(A2:A11, D2:D11, 1)
D列が並べ替え対象(A列)の外側にあっても問題なく機能します。D列をスピル結果に含めたくない場合でも、基準として参照できます。
例5:別シートのスコア列を基準にする
「Sheet1のA列(社員名)を、Sheet2のB列(評価スコア)の降順で並べ替えたい」というケースです。
=SORTBY(Sheet1!A2:A50, Sheet2!B2:B50, -1)
Sheet1とSheet2の行数が一致していれば、シートをまたいだ外部基準の参照も可能です。
実務パターン:業務別の活用例
パターン1:月次売上ランキングを自動更新する
A列に担当者名、B列に売上(毎月数字が更新される)があるとします。別エリアのE2セルに次の式を入力しておくと、B列が更新されるたびにランキングが自動的に並べ替わります。
=SORTBY(A2:B20, B2:B20, -1)
ピボットテーブルを使わずに、元データを書き換えることなくリアルタイムのランキング表を作れます。
パターン2:複数店舗の商品一覧を店舗別・売上高順に整理する
A列に商品名、B列に店舗名、C列に売上高があるとします(A2:C100)。店舗名昇順・売上高降順で整理します。
=SORTBY(A2:C100, B2:B100, 1, C2:C100, -1)
店舗ごとにまとめた上で、各店舗内では売上の高い商品が上に来る形に並べ替わります。
パターン3:UNIQUE関数と組み合わせた重複なし並べ替え
顧客リストから重複を除いた上で、顧客コードの昇順に並べ替えて表示します。A列に顧客名(重複あり)、B列に顧客コードが対応しているとします。
' 顧客名の重複を除去してから顧客コードの昇順に並べ替え
=SORTBY(UNIQUE(A2:A100), UNIQUE(B2:B100), 1)
この式は、A列の重複除去結果とB列の重複除去結果が行ごとに対応していることが前提です。同一顧客に複数レコードが存在する場合は、先に集計処理を加えてから渡すのが確実です。
パターン4:FILTER関数の結果をさらに並べ替える
「東京支社のデータだけを絞り込み、その上で売上降順で並べ替えたい」という場合、FILTERとSORTBYを組み合わせます。
' B列が「東京」のデータのみを抽出し、C列(売上)の降順で並べ替え
=SORTBY(
FILTER(A2:C100, B2:B100="東京"),
FILTER(C2:C100, B2:B100="東京"),
-1
)
FILTERの結果配列をSORTBYの第1引数に渡し、FILTER済みの売上列を基準配列にします。行数が自動的に揃うため、スピルの範囲が動的に変わっても正しく動作します。
エラーの種類と対処法
| エラー | 主な原因 | 対処法 |
|---|---|---|
| #SPILL! | スピル先のセルにすでにデータが入っている | スピル先のセル範囲を空にする |
| #VALUE! | 配列と基準配列の行数(または列数)が一致していない | 両方の範囲の行数を揃える |
| #CALC! | 基準配列にFILTERなどが0件を返している | IFERROR(SORTBY(…),””) でエラーを非表示にする |
| #NAME? | ExcelのバージョンがSORTBYをサポートしていない | Microsoft 365版またはExcel 2021以降を使用する |
#SPILL! エラーの回避
#SPILL! はスピル先のセルに別のデータが存在するときに発生します。スピル先の範囲全体を空にすることで解消できます。スピルが予定される範囲を確認するには、数式セルをクリックし、破線で囲まれたスピル範囲を目視で確認します。
#VALUE! エラーの対処
#VALUE! は配列と基準配列の行数(縦並べ替えの場合)が食い違っているときに発生します。たとえば配列がA2:A20(19行)なのに基準配列がB2:B21(20行)になっているケースです。参照範囲を揃えることで解決します。
MOS試験対策:SORTBY関数の出題ポイント
出題範囲の確認
SORTBY関数はMOS Excel 365 エキスパート(MO-211)の4領域のうち「高度な機能を使用した数式およびマクロの作成」の出題範囲に含まれます。分野別の出題数・配点は公表されていません。
なお、SORTBY関数はエキスパート(MO-211)レベルの機能です。一般レベル(MO-210)では扱いません。
試験で問われやすいポイント
- 第1引数(配列)と基準配列の行数が一致していることを確認する操作
- 並べ替え順序に -1(降順)を正しく指定する場面(省略すると昇順になる)
- SORT関数とSORTBY関数のどちらを使うべきかを判断する(外部基準があればSORTBY)
- 複数条件の並べ替えで基準配列と並べ替え順序のペアを正しい順序で指定する
- #SPILL! エラーを解消するためにスピル先のデータを削除する操作
SORT関数との使い分けを整理する
MOS試験では状況に応じてどちらを使うかを判断する場面があります。並べ替えの基準列が返す範囲の中に含まれている場合はSORT、外側の列を基準にしたい場合はSORTBYと整理しておくと判断が速くなります。また、複数条件の組み合わせが必要な場合はSORTBYを選びます。
学習時間の目安
MOS Excel 365 エキスパート(MO-211)全体の学習時間の目安として、アソシエイト合格後に追加で60~100時間が目安です(公式非公表のため目安)。SORTBY関数は動的配列関数の応用に位置づけられます。FILTER・UNIQUE・SORT関数を先にマスターした上で取り組むと理解が深まります。
よくある質問(FAQ)
Q1. SORT関数とSORTBY関数、どちらを覚えればよいですか?
両方覚えることを推奨します。SORT関数は「並べ替え対象の範囲の内側にある列を基準にする」シンプルなケースに向いています。SORTBY関数は「外部の列を基準にしたい」「複数条件を組み合わせたい」場面で使います。SORT関数を先に習得し、その後SORTBYに進むのが学習のスムーズな順序です。
Q2. SORTBY関数はExcel 2019でも使えますか?
SORTBY関数はMicrosoft 365版Excel(サブスクリプション)とExcel 2021以降で利用できます。Excel 2019では動的配列関数がサポートされていないため使用できません。代替として、配列数式やINDEX+MATCHを組み合わせる方法がありますが数式が複雑になります。
Q3. SORTBY関数で並べ替えた結果を固定したい場合はどうすればよいですか?
SORTBY関数は動的配列関数のため、元データが変わると結果も変わります。結果を固定したい場合は、スピル範囲をコピーして「値のみ貼り付け」(形式を選択して貼り付け→値)で固定コピーを別のセル範囲に貼り付けます。
Q4. 基準配列に文字列列を指定したときの昇順はどういう順序ですか?
文字列の昇順は、Excelの既定の並べ替えルールと同じく、数字→英字→ひらがな・カタカナ→漢字の大まかな並びになります。ロケールや設定によって変わる場合があるため、意図しない順序になるときは元データの表記(全角・半角など)を統一してください。
Q5. 基準配列の位置に数式(RANK・COUNTIF等)を直接記述できますか?
はい、記述できます。たとえば基準配列の引数にRANK関数を直接書くことができます。
=SORTBY(A2:A20, RANK(B2:B20, B2:B20, 0), 1)
ただし、数式が複雑になるとエラー時の原因特定が難しくなります。基準配列の計算結果を隣の列に出しておき、そのセル範囲を基準配列として参照するほうがデバッグしやすいです。
まとめ
SORTBY関数は、SORT関数では実現できない「外部基準による並べ替え」「複数条件の昇降混合」を数式だけで実現する動的配列関数です。元データを書き換えずにスピル展開でリアルタイムに並べ替え結果を更新できるため、月次ランキング・複数店舗の商品整理・FILTER結果の再整列など、さまざまな業務シナリオに対応します。
FILTER・UNIQUE・SORT・LETなどの動的配列関数との組み合わせで、VBAなしの高度なデータ処理パイプラインを構築できます。MOS Excel 365 エキスパート(MO-211)の「高度な機能を使用した数式およびマクロの作成」の出題範囲として、SORT関数との使い分けを含めてしっかり対策しておきましょう。
PR
MOS Excel 365 エキスパート(MO-211)に対応した定番対策テキスト。SORTBY・FILTER・LETなど動的配列関数を含む出題範囲を実技問題形式で学べる。試験本番のプロジェクト形式に慣れるためにも有効な一冊。
MOS試験の最新の受験料は、公式サイトの「受験料・価格」(https://mos.odyssey-com.co.jp/exam/examfee.html)でご確認ください。
